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 2fbb9cd

Browse files
authored
fix setexpr missing big quotes (#1431)
* fix setexpr missing big quotes * fix tests * fix tests
1 parent 6d11913 commit 2fbb9cd

File tree

4 files changed

+50
-5
lines changed

4 files changed

+50
-5
lines changed

session_cols_test.go

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,21 +7,38 @@ package xorm
77
import (
88
"testing"
99

10-
"xorm.io/core"
1110
"github.com/stretchr/testify/assert"
11+
"xorm.io/builder"
12+
"xorm.io/core"
1213
)
1314

1415
func TestSetExpr(t *testing.T) {
1516
assert.NoError(t, prepareEngine())
1617

18+
type UserExprIssue struct {
19+
Id int64
20+
Title string
21+
}
22+
23+
assert.NoError(t, testEngine.Sync2(new(UserExprIssue)))
24+
25+
var issue = UserExprIssue{
26+
Title: "my issue",
27+
}
28+
cnt, err := testEngine.Insert(&issue)
29+
assert.NoError(t, err)
30+
assert.EqualValues(t, 1, cnt)
31+
assert.EqualValues(t, 1, issue.Id)
32+
1733
type UserExpr struct {
18-
Id int64
19-
Show bool
34+
Id int64
35+
IssueId int64 `xorm:"index"`
36+
Show bool
2037
}
2138

2239
assert.NoError(t, testEngine.Sync2(new(UserExpr)))
2340

24-
cnt, err := testEngine.Insert(&UserExpr{
41+
cnt, err = testEngine.Insert(&UserExpr{
2542
Show: true,
2643
})
2744
assert.NoError(t, err)
@@ -34,6 +51,16 @@ func TestSetExpr(t *testing.T) {
3451
cnt, err = testEngine.SetExpr("show", not+" `show`").ID(1).Update(new(UserExpr))
3552
assert.NoError(t, err)
3653
assert.EqualValues(t, 1, cnt)
54+
55+
tableName := testEngine.TableName(new(UserExprIssue), true)
56+
cnt, err = testEngine.SetExpr("issue_id",
57+
builder.Select("id").
58+
From(tableName).
59+
Where(builder.Eq{"id": issue.Id})).
60+
ID(1).
61+
Update(new(UserExpr))
62+
assert.NoError(t, err)
63+
assert.EqualValues(t, 1, cnt)
3764
}
3865

3966
func TestCols(t *testing.T) {

session_update.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -245,7 +245,7 @@ func (session *Session) Update(bean interface{}, condiBean ...interface{}) (int6
245245
if err != nil {
246246
return 0, err
247247
}
248-
colNames = append(colNames, session.engine.Quote(colName)+" = "+subQuery)
248+
colNames = append(colNames, session.engine.Quote(colName)+" = ("+subQuery+")")
249249
args = append(args, subArgs...)
250250
}
251251
}

statement_args.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,15 @@ func writeArg(w *builder.BytesWriter, arg interface{}) error {
1717
return err
1818
}
1919
case *builder.Builder:
20+
if _, err := w.WriteString("("); err != nil {
21+
return err
22+
}
2023
if err := argv.WriteTo(w); err != nil {
2124
return err
2225
}
26+
if _, err := w.WriteString(")"); err != nil {
27+
return err
28+
}
2329
default:
2430
if _, err := w.WriteString(fmt.Sprintf("%v", argv)); err != nil {
2531
return err

statement_exprparam.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,15 @@ func (exprs *exprParams) writeArgs(w *builder.BytesWriter) error {
6060
for _, expr := range exprs.args {
6161
switch arg := expr.(type) {
6262
case *builder.Builder:
63+
if _, err := w.WriteString("("); err != nil {
64+
return err
65+
}
6366
if err := arg.WriteTo(w); err != nil {
6467
return err
6568
}
69+
if _, err := w.WriteString(")"); err != nil {
70+
return err
71+
}
6672
default:
6773
if _, err := w.WriteString(fmt.Sprintf("%v", arg)); err != nil {
6874
return err
@@ -83,9 +89,15 @@ func (exprs *exprParams) writeNameArgs(w *builder.BytesWriter) error {
8389

8490
switch arg := exprs.args[i].(type) {
8591
case *builder.Builder:
92+
if _, err := w.WriteString("("); err != nil {
93+
return err
94+
}
8695
if err := arg.WriteTo(w); err != nil {
8796
return err
8897
}
98+
if _, err := w.WriteString("("); err != nil {
99+
return err
100+
}
89101
default:
90102
w.Append(exprs.args[i])
91103
}

0 commit comments

Comments
 (0)