From 422723d3fca5f9a984c8c258f65267e64a7f89da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Carlos=20Nieto?= <jose.carlos@menteslibres.net> Date: Tue, 13 Dec 2016 03:34:50 +0000 Subject: [PATCH] Merge with master --- Makefile | 8 ++--- internal/sqladapter/exql/column_value.go | 3 ++ internal/sqladapter/exql/column_value_test.go | 9 ++++++ lib/sqlbuilder/builder.go | 18 +++++------ lib/sqlbuilder/convert.go | 30 +++++++------------ lib/sqlbuilder/select.go | 8 ++--- 6 files changed, 38 insertions(+), 38 deletions(-) diff --git a/Makefile b/Makefile index 7181dd72..b72e1662 100644 --- a/Makefile +++ b/Makefile @@ -5,11 +5,9 @@ DB_HOST ?= 127.0.0.1 export DB_HOST test: - go test -v -benchtime=500ms -bench=. ./lib/... & \ - go test -v -benchtime=500ms -bench=. ./internal/... & \ - wait && \ + go test -v -benchtime=500ms -bench=. ./lib/... && \ + go test -v -benchtime=500ms -bench=. ./internal/... && \ for ADAPTER in postgresql mysql sqlite ql mongo; do \ - $(MAKE) -C $$ADAPTER test & \ + $(MAKE) -C $$ADAPTER test; \ done && \ - wait && \ go test -v diff --git a/internal/sqladapter/exql/column_value.go b/internal/sqladapter/exql/column_value.go index 8834ee8a..2d2f2784 100644 --- a/internal/sqladapter/exql/column_value.go +++ b/internal/sqladapter/exql/column_value.go @@ -35,6 +35,9 @@ func (c *ColumnValue) Compile(layout *Template) (compiled string) { c.Operator, c.Value.Compile(layout), } + if c.Operator == "" { + data.Operator = layout.DefaultOperator + } compiled = mustParse(layout.ColumnValue, data) diff --git a/internal/sqladapter/exql/column_value_test.go b/internal/sqladapter/exql/column_value_test.go index b71db7ed..e9bfc524 100644 --- a/internal/sqladapter/exql/column_value_test.go +++ b/internal/sqladapter/exql/column_value_test.go @@ -54,6 +54,15 @@ func TestColumnValue(t *testing.T) { if s != e { t.Fatalf("Got: %s, Expecting: %s", s, e) } + + cv = &ColumnValue{Column: ColumnWithName("date"), Value: NewValue(RawValue("NOW()"))} + + s = cv.Compile(defaultTemplate) + e = `"date" = NOW()` + + if s != e { + t.Fatalf("Got: %s, Expecting: %s", s, e) + } } func TestColumnValues(t *testing.T) { diff --git a/lib/sqlbuilder/builder.go b/lib/sqlbuilder/builder.go index 1867b221..31ea0736 100644 --- a/lib/sqlbuilder/builder.go +++ b/lib/sqlbuilder/builder.go @@ -330,10 +330,10 @@ func columnFragments(columns []interface{}) ([]exql.Fragment, []interface{}, err for i := 0; i < l; i++ { switch v := columns[i].(type) { - case *selector: - expanded, rawArgs := expandPlaceholders(v.Compile(), v.Arguments()) - f[i] = exql.RawValue(expanded) - args = append(args, rawArgs...) + case compilable: + q, a := Preprocess(v.Compile(), v.Arguments()) + f[i] = exql.RawValue(q) + args = append(args, a...) case db.Function: fnName, fnArgs := v.Name(), v.Arguments() if len(fnArgs) == 0 { @@ -341,13 +341,13 @@ func columnFragments(columns []interface{}) ([]exql.Fragment, []interface{}, err } else { fnName = fnName + "(?" + strings.Repeat("?, ", len(fnArgs)-1) + ")" } - expanded, fnArgs := expandPlaceholders(fnName, fnArgs) - f[i] = exql.RawValue(expanded) + fnName, fnArgs = Preprocess(fnName, fnArgs) + f[i] = exql.RawValue(fnName) args = append(args, fnArgs...) case db.RawValue: - expanded, rawArgs := expandPlaceholders(v.Raw(), v.Arguments()) - f[i] = exql.RawValue(expanded) - args = append(args, rawArgs...) + q, a := Preprocess(v.Raw(), v.Arguments()) + f[i] = exql.RawValue(q) + args = append(args, a...) case exql.Fragment: f[i] = v case string: diff --git a/lib/sqlbuilder/convert.go b/lib/sqlbuilder/convert.go index bc5d8f5f..b8b2de40 100644 --- a/lib/sqlbuilder/convert.go +++ b/lib/sqlbuilder/convert.go @@ -11,10 +11,9 @@ import ( ) var ( - sqlNull = exql.RawValue(`NULL`) - sqlIsOperator = `IS` - sqlInOperator = `IN` - sqlDefaultOperator = `=` + sqlNull = exql.RawValue(`NULL`) + sqlIsOperator = `IS` + sqlInOperator = `IN` ) type templateWithUtils struct { @@ -167,11 +166,6 @@ func Preprocess(in string, args []interface{}) (string, []interface{}) { return expandQuery(in, args, preprocessFn) } -func expandPlaceholders(in string, args []interface{}) (string, []interface{}) { - // TODO: Remove after immutable query builder - return in, args -} - // toWhereWithArguments converts the given parameters into a exql.Where // value. func toWhereWithArguments(term interface{}) (where exql.Where, args []interface{}) { @@ -182,7 +176,7 @@ func toWhereWithArguments(term interface{}) (where exql.Where, args []interface{ if len(t) > 0 { if s, ok := t[0].(string); ok { if strings.ContainsAny(s, "?") || len(t) == 1 { - s, args = expandPlaceholders(s, t[1:]) + s, args = Preprocess(s, t[1:]) where.Conditions = []exql.Fragment{exql.RawValue(s)} } else { var val interface{} @@ -211,7 +205,7 @@ func toWhereWithArguments(term interface{}) (where exql.Where, args []interface{ } return case db.RawValue: - r, v := expandPlaceholders(t.Raw(), t.Arguments()) + r, v := Preprocess(t.Raw(), t.Arguments()) where.Conditions = []exql.Fragment{exql.RawValue(r)} args = append(args, v...) return @@ -329,13 +323,13 @@ func toColumnValues(term interface{}) (cv exql.ColumnValues, args []interface{}) // A function with one or more arguments. fnName = fnName + "(?" + strings.Repeat("?, ", len(fnArgs)-1) + ")" } - expanded, fnArgs := expandPlaceholders(fnName, fnArgs) - columnValue.Value = exql.RawValue(expanded) + fnName, fnArgs = Preprocess(fnName, fnArgs) + columnValue.Value = exql.RawValue(fnName) args = append(args, fnArgs...) case db.RawValue: - expanded, rawArgs := expandPlaceholders(value.Raw(), value.Arguments()) - columnValue.Value = exql.RawValue(expanded) - args = append(args, rawArgs...) + q, a := Preprocess(value.Raw(), value.Arguments()) + columnValue.Value = exql.RawValue(q) + args = append(args, a...) default: v, isSlice := toInterfaceArguments(value) @@ -367,10 +361,6 @@ func toColumnValues(term interface{}) (cv exql.ColumnValues, args []interface{}) } // Using guessed operator if no operator was given. - if columnValue.Operator == "" { - columnValue.Operator = sqlDefaultOperator - } - cv.ColumnValues = append(cv.ColumnValues, &columnValue) return cv, args diff --git a/lib/sqlbuilder/select.go b/lib/sqlbuilder/select.go index b22d05a4..d560fb85 100644 --- a/lib/sqlbuilder/select.go +++ b/lib/sqlbuilder/select.go @@ -243,9 +243,9 @@ func (sel *selector) OrderBy(columns ...interface{}) Selector { switch value := columns[i].(type) { case db.RawValue: - col, args := expandPlaceholders(value.Raw(), value.Arguments()) + query, args := Preprocess(value.Raw(), value.Arguments()) sort = &exql.SortColumn{ - Column: exql.RawValue(col), + Column: exql.RawValue(query), } sq.orderByArgs = append(sq.orderByArgs, args...) case db.Function: @@ -255,9 +255,9 @@ func (sel *selector) OrderBy(columns ...interface{}) Selector { } else { fnName = fnName + "(?" + strings.Repeat("?, ", len(fnArgs)-1) + ")" } - expanded, fnArgs := expandPlaceholders(fnName, fnArgs) + fnName, fnArgs = Preprocess(fnName, fnArgs) sort = &exql.SortColumn{ - Column: exql.RawValue(expanded), + Column: exql.RawValue(fnName), } sq.orderByArgs = append(sq.orderByArgs, fnArgs...) case string: -- GitLab