Skip to content
This repository was archived by the owner on Sep 7, 2021. It is now read-only.
This repository is currently being migrated. It's locked while the migration is in progress.

Commit 59ed80c

Browse files
authored
fix insert where with bool bug on mssql (#1432)
1 parent 2fbb9cd commit 59ed80c

File tree

4 files changed

+31
-7
lines changed

4 files changed

+31
-7
lines changed

session_insert.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -382,7 +382,7 @@ func (session *Session) innerInsert(bean interface{}) (int64, error) {
382382
return 0, err
383383
}
384384

385-
if err := writeArgs(buf, args); err != nil {
385+
if err := session.statement.writeArgs(buf, args); err != nil {
386386
return 0, err
387387
}
388388

@@ -739,7 +739,7 @@ func (session *Session) insertMapInterface(m map[string]interface{}) (int64, err
739739
return 0, err
740740
}
741741

742-
if err := writeArgs(w, args); err != nil {
742+
if err := session.statement.writeArgs(w, args); err != nil {
743743
return 0, err
744744
}
745745

@@ -825,7 +825,7 @@ func (session *Session) insertMapString(m map[string]string) (int64, error) {
825825
return 0, err
826826
}
827827

828-
if err := writeArgs(w, args); err != nil {
828+
if err := session.statement.writeArgs(w, args); err != nil {
829829
return 0, err
830830
}
831831

session_insert_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -846,6 +846,7 @@ func TestInsertWhere(t *testing.T) {
846846
Width uint32
847847
Height uint32
848848
Name string
849+
IsTrue bool
849850
}
850851

851852
assert.NoError(t, prepareEngine())

statement_args.go

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,37 @@ import (
88
"fmt"
99

1010
"xorm.io/builder"
11+
"xorm.io/core"
1112
)
1213

13-
func writeArg(w *builder.BytesWriter, arg interface{}) error {
14+
func (statement *Statement) writeArg(w *builder.BytesWriter, arg interface{}) error {
1415
switch argv := arg.(type) {
1516
case string:
1617
if _, err := w.WriteString("'" + argv + "'"); err != nil {
1718
return err
1819
}
20+
case bool:
21+
if statement.Engine.dialect.DBType() == core.MSSQL {
22+
if argv {
23+
if _, err := w.WriteString("1"); err != nil {
24+
return err
25+
}
26+
} else {
27+
if _, err := w.WriteString("0"); err != nil {
28+
return err
29+
}
30+
}
31+
} else {
32+
if argv {
33+
if _, err := w.WriteString("true"); err != nil {
34+
return err
35+
}
36+
} else {
37+
if _, err := w.WriteString("false"); err != nil {
38+
return err
39+
}
40+
}
41+
}
1942
case *builder.Builder:
2043
if _, err := w.WriteString("("); err != nil {
2144
return err
@@ -34,9 +57,9 @@ func writeArg(w *builder.BytesWriter, arg interface{}) error {
3457
return nil
3558
}
3659

37-
func writeArgs(w *builder.BytesWriter, args []interface{}) error {
60+
func (statement *Statement) writeArgs(w *builder.BytesWriter, args []interface{}) error {
3861
for i, arg := range args {
39-
if err := writeArg(w, arg); err != nil {
62+
if err := statement.writeArg(w, arg); err != nil {
4063
return err
4164
}
4265

test_mssql.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
go test -db=mssql -conn_str="server=localhost;user id=sa;password=yourStrong(!)Password;database=xorm_test"
1+
go test -db=mssql -conn_str="server=localhost;user id=sa;password=MwantsaSecurePassword1;database=xorm_test"

0 commit comments

Comments
 (0)