Add ability to set a dialect on an existing builder #77
|
@ -102,6 +102,12 @@ func SQLite() *Builder {
|
|||
return Dialect(SQLITE)
|
||||
}
|
||||
|
||||
// ToDialect sets the dialect
|
||||
func (b *Builder) ToDialect(dialect string) *Builder {
|
||||
|
||||
b.dialect = dialect
|
||||
return b
|
||||
}
|
||||
|
||||
// Where sets where SQL
|
||||
func (b *Builder) Where(cond Cond) *Builder {
|
||||
if b.cond.IsValid() {
|
||||
|
|
|
@ -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)
|
||||
}
|
Loading…
Reference in New Issue
Block a user
Maybe we could have a better name for this function?
Maybe SetDialect fits better according to "Effective Go" article https://golang.org/doc/effective_go.html#Getters
Or can you suggest better name?
AsDialect(dialect string)
maybe better?