fix(perf): Fixed performance

* Performance are better when you write columns byte by
byte rather than string generation
This commit is contained in:
sagarafr
2018-11-03 00:05:57 +01:00
committed by Michal Matczuk
parent ec81eea1fc
commit a503f75a9c
2 changed files with 11 additions and 4 deletions

View File

@@ -10,7 +10,6 @@ package qb
import ( import (
"bytes" "bytes"
"fmt" "fmt"
"strings"
) )
// Order specifies sorting order. // Order specifies sorting order.
@@ -54,7 +53,11 @@ func (b *SelectBuilder) ToCql() (stmt string, names []string) {
cql.WriteString("DISTINCT ") cql.WriteString("DISTINCT ")
b.distinct.writeCql(&cql) b.distinct.writeCql(&cql)
case len(b.groupBy) > 0: case len(b.groupBy) > 0:
cql.WriteString(strings.Join(append(b.groupBy, b.columns...), ",")) b.groupBy.writeCql(&cql)
if len(b.columns) != 0 {
cql.WriteByte(',')
b.columns.writeCql(&cql)
}
case len(b.columns) == 0: case len(b.columns) == 0:
cql.WriteByte('*') cql.WriteByte('*')
default: default:

View File

@@ -6,7 +6,6 @@ package qb
import ( import (
"bytes" "bytes"
"strings"
) )
// placeholders returns a string with count ? placeholders joined with commas. // placeholders returns a string with count ? placeholders joined with commas.
@@ -25,5 +24,10 @@ func placeholders(cql *bytes.Buffer, count int) {
type columns []string type columns []string
func (cols columns) writeCql(cql *bytes.Buffer) { func (cols columns) writeCql(cql *bytes.Buffer) {
cql.WriteString(strings.Join(cols, ",")) for i, c := range cols {
cql.WriteString(c)
if i < len(cols)-1 {
cql.WriteByte(',')
}
}
} }