fix insert where with bool bug on mssql (#1432)
This commit is contained in:
parent
2fbb9cd8de
commit
59ed80ce1a
|
@ -382,7 +382,7 @@ func (session *Session) innerInsert(bean interface{}) (int64, error) {
|
||||||
return 0, err
|
return 0, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := writeArgs(buf, args); err != nil {
|
if err := session.statement.writeArgs(buf, args); err != nil {
|
||||||
return 0, err
|
return 0, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -739,7 +739,7 @@ func (session *Session) insertMapInterface(m map[string]interface{}) (int64, err
|
||||||
return 0, err
|
return 0, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := writeArgs(w, args); err != nil {
|
if err := session.statement.writeArgs(w, args); err != nil {
|
||||||
return 0, err
|
return 0, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -825,7 +825,7 @@ func (session *Session) insertMapString(m map[string]string) (int64, error) {
|
||||||
return 0, err
|
return 0, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := writeArgs(w, args); err != nil {
|
if err := session.statement.writeArgs(w, args); err != nil {
|
||||||
return 0, err
|
return 0, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -846,6 +846,7 @@ func TestInsertWhere(t *testing.T) {
|
||||||
Width uint32
|
Width uint32
|
||||||
Height uint32
|
Height uint32
|
||||||
Name string
|
Name string
|
||||||
|
IsTrue bool
|
||||||
}
|
}
|
||||||
|
|
||||||
assert.NoError(t, prepareEngine())
|
assert.NoError(t, prepareEngine())
|
||||||
|
|
|
@ -8,14 +8,37 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"xorm.io/builder"
|
"xorm.io/builder"
|
||||||
|
"xorm.io/core"
|
||||||
)
|
)
|
||||||
|
|
||||||
func writeArg(w *builder.BytesWriter, arg interface{}) error {
|
func (statement *Statement) writeArg(w *builder.BytesWriter, arg interface{}) error {
|
||||||
switch argv := arg.(type) {
|
switch argv := arg.(type) {
|
||||||
case string:
|
case string:
|
||||||
if _, err := w.WriteString("'" + argv + "'"); err != nil {
|
if _, err := w.WriteString("'" + argv + "'"); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
case bool:
|
||||||
|
if statement.Engine.dialect.DBType() == core.MSSQL {
|
||||||
|
if argv {
|
||||||
|
if _, err := w.WriteString("1"); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if _, err := w.WriteString("0"); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if argv {
|
||||||
|
if _, err := w.WriteString("true"); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if _, err := w.WriteString("false"); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
case *builder.Builder:
|
case *builder.Builder:
|
||||||
if _, err := w.WriteString("("); err != nil {
|
if _, err := w.WriteString("("); err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -34,9 +57,9 @@ func writeArg(w *builder.BytesWriter, arg interface{}) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func writeArgs(w *builder.BytesWriter, args []interface{}) error {
|
func (statement *Statement) writeArgs(w *builder.BytesWriter, args []interface{}) error {
|
||||||
for i, arg := range args {
|
for i, arg := range args {
|
||||||
if err := writeArg(w, arg); err != nil {
|
if err := statement.writeArg(w, arg); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
go test -db=mssql -conn_str="server=localhost;user id=sa;password=yourStrong(!)Password;database=xorm_test"
|
go test -db=mssql -conn_str="server=localhost;user id=sa;password=MwantsaSecurePassword1;database=xorm_test"
|
Loading…
Reference in New Issue