Add ability to set a dialect on an existing builder #77

Closed
bazanov-a-ju wants to merge 2 commits from master into master
2 changed files with 39 additions and 0 deletions

View File

@ -102,6 +102,12 @@ func SQLite() *Builder {
return Dialect(SQLITE)
}
// ToDialect sets the dialect
func (b *Builder) ToDialect(dialect string) *Builder {
Review

Maybe we could have a better name for this function?

Maybe we could have a better name for this function?
Review

Maybe SetDialect fits better according to "Effective Go" article https://golang.org/doc/effective_go.html#Getters

Or can you suggest better name?

Maybe SetDialect fits better according to "Effective Go" article https://golang.org/doc/effective_go.html#Getters Or can you suggest better name?
Review

AsDialect(dialect string) maybe better?

`AsDialect(dialect string)` maybe better?
b.dialect = dialect
return b
}
// Where sets where SQL
func (b *Builder) Where(cond Cond) *Builder {
if b.cond.IsValid() {

View File

@ -5,6 +5,7 @@
package builder
import (
sql2 "database/sql"
"testing"
"github.com/stretchr/testify/assert"
@ -655,3 +656,35 @@ func TestBuilder_Or(t *testing.T) {
assert.EqualValues(t, "SELECT id FROM table_b tb WHERE b=? OR c<>?", sql)
assert.EqualValues(t, []interface{}{"a", "d"}, args)
}
func TestBuilder_ToDialect(t *testing.T) {
b := Select("id").From("table_b", "tb").Where(Eq{"b": "a"}).Or(Neq{"c": "d"}).ToDialect(ORACLE)
sql, args, err := b.ToSQL()
assert.NoError(t, err)
assert.EqualValues(t, "SELECT id FROM table_b tb WHERE b=:p1 OR c<>:p2", sql)
assert.EqualValues(t, []interface{}{sql2.NamedArg{Name:"p1", Value:"a"}, sql2.NamedArg{Name:"p2", Value:"d"}}, args)
b = Select("id").From("table_b", "tb").Where(Eq{"b": "a"}).Or(Neq{"c": "d"}).ToDialect(POSTGRES)
sql, args, err = b.ToSQL()
assert.NoError(t, err)
assert.EqualValues(t, "SELECT id FROM table_b tb WHERE b=$1 OR c<>$2", sql)
assert.EqualValues(t, []interface{}{"a", "d"}, args)
b = Select("id").From("table_b", "tb").Where(Eq{"b": "a"}).Or(Neq{"c": "d"}).ToDialect(MYSQL)
sql, args, err = b.ToSQL()
assert.NoError(t, err)
assert.EqualValues(t, "SELECT id FROM table_b tb WHERE b=? OR c<>?", sql)
assert.EqualValues(t, []interface{}{"a", "d"}, args)
b = Select("id").From("table_b", "tb").Where(Eq{"b": "a"}).Or(Neq{"c": "d"}).ToDialect(SQLITE)
sql, args, err = b.ToSQL()
assert.NoError(t, err)
assert.EqualValues(t, "SELECT id FROM table_b tb WHERE b=? OR c<>?", sql)
assert.EqualValues(t, []interface{}{"a", "d"}, args)
b = Select("id").From("table_b", "tb").Where(Eq{"b": "a"}).Or(Neq{"c": "d"}).ToDialect(MSSQL)
sql, args, err = b.ToSQL()
assert.NoError(t, err)
assert.EqualValues(t, "SELECT id FROM table_b tb WHERE b=@p1 OR c<>@p2", sql)
assert.EqualValues(t, []interface{}{sql2.NamedArg{Name:"p1", Value:"a"}, sql2.NamedArg{Name:"p2", Value:"d"}}, args)
}