Skip to content

Commit ff276aa

Browse files
author
mgutz
committed
Merge branch 'lgonzalez-silen-v1' into v1
2 parents c4a90ad + 356fbb0 commit ff276aa

File tree

2 files changed

+42
-26
lines changed

2 files changed

+42
-26
lines changed

update.go

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -174,15 +174,11 @@ func (b *UpdateBuilder) ToSQL() (string, []interface{}) {
174174
placeholderStartPos += int64(len(e.Args))
175175
} else {
176176
// TOOD
177-
if i < maxLookup {
177+
if placeholderStartPos < maxLookup {
178178
buf.WriteString(equalsPlaceholderTab[placeholderStartPos])
179179
} else {
180-
if placeholderStartPos < maxLookup {
181-
buf.WriteString(equalsPlaceholderTab[placeholderStartPos])
182-
} else {
183-
buf.WriteString(" = $")
184-
buf.WriteString(strconv.FormatInt(placeholderStartPos, 10))
185-
}
180+
buf.WriteString(" = $")
181+
buf.WriteString(strconv.FormatInt(placeholderStartPos, 10))
186182
}
187183
placeholderStartPos++
188184
args = append(args, c.value)

update_test.go

Lines changed: 39 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import (
44
"testing"
55

66
"gopkg.in/stretchr/testify.v1/assert"
7+
"fmt"
8+
"strings"
79
)
810

911
func BenchmarkUpdateValuesSql(b *testing.B) {
@@ -23,45 +25,45 @@ func BenchmarkUpdateValueMapSql(b *testing.B) {
2325
func TestUpdateAllToSql(t *testing.T) {
2426
sql, args := Update("a").Set("b", 1).Set("c", 2).ToSQL()
2527

26-
assert.Equal(t, sql, quoteSQL(`UPDATE "a" SET %s = $1, %s = $2`, "b", "c"))
27-
assert.Equal(t, args, []interface{}{1, 2})
28+
assert.Equal(t, quoteSQL(`UPDATE "a" SET %s = $1, %s = $2`, "b", "c"), sql)
29+
assert.Equal(t, []interface{}{1, 2}, args)
2830
}
2931

3032
func TestUpdateSingleToSql(t *testing.T) {
3133
sql, args := Update("a").Set("b", 1).Set("c", 2).Where("id = $1", 1).ToSQL()
3234

33-
assert.Equal(t, sql, quoteSQL(`UPDATE "a" SET %s = $1, %s = $2 WHERE (id = $3)`, "b", "c"))
34-
assert.Equal(t, args, []interface{}{1, 2, 1})
35+
assert.Equal(t, quoteSQL(`UPDATE "a" SET %s = $1, %s = $2 WHERE (id = $3)`, "b", "c"), sql)
36+
assert.Equal(t, []interface{}{1, 2, 1}, args)
3537
}
3638

3739
func TestUpdateSetMapToSql(t *testing.T) {
3840
sql, args := Update("a").SetMap(map[string]interface{}{"b": 1, "c": 2}).Where("id = $1", 1).ToSQL()
3941

4042
if sql == quoteSQL(`UPDATE "a" SET %s = $1, %s = $2 WHERE (id = $3)`, "b", "c") {
41-
assert.Equal(t, args, []interface{}{1, 2, 1})
43+
assert.Equal(t, []interface{}{1, 2, 1}, args)
4244
} else {
43-
assert.Equal(t, sql, quoteSQL(`UPDATE "a" SET %s = $1, %s = $2 WHERE (id = $3)`, "c", "b"))
44-
assert.Equal(t, args, []interface{}{2, 1, 1})
45+
assert.Equal(t, quoteSQL(`UPDATE "a" SET %s = $1, %s = $2 WHERE (id = $3)`, "c", "b"), sql)
46+
assert.Equal(t, []interface{}{2, 1, 1}, args)
4547
}
4648
}
4749

4850
func TestUpdateSetExprToSql(t *testing.T) {
4951
sql, args := Update("a").Set("foo", 1).Set("bar", Expr("COALESCE(bar, 0) + 1")).Where("id = $1", 9).ToSQL()
5052

51-
assert.Equal(t, sql, quoteSQL(`UPDATE "a" SET %s = $1, %s = COALESCE(bar, 0) + 1 WHERE (id = $2)`, "foo", "bar"))
52-
assert.Equal(t, args, []interface{}{1, 9})
53+
assert.Equal(t, quoteSQL(`UPDATE "a" SET %s = $1, %s = COALESCE(bar, 0) + 1 WHERE (id = $2)`, "foo", "bar"), sql)
54+
assert.Equal(t, []interface{}{1, 9}, args)
5355

5456
sql, args = Update("a").Set("foo", 1).Set("bar", Expr("COALESCE(bar, 0) + $1", 2)).Where("id = $1", 9).ToSQL()
5557

56-
assert.Equal(t, sql, quoteSQL(`UPDATE "a" SET %s = $1, %s = COALESCE(bar, 0) + $2 WHERE (id = $3)`, "foo", "bar"))
57-
assert.Equal(t, args, []interface{}{1, 2, 9})
58+
assert.Equal(t, quoteSQL(`UPDATE "a" SET %s = $1, %s = COALESCE(bar, 0) + $2 WHERE (id = $3)`, "foo", "bar"), sql)
59+
assert.Equal(t, []interface{}{1, 2, 9}, args)
5860
}
5961

6062
func TestUpdateTenStaringFromTwentyToSql(t *testing.T) {
6163
sql, args := Update("a").Set("b", 1).Limit(10).Offset(20).ToSQL()
6264

63-
assert.Equal(t, sql, quoteSQL(`UPDATE "a" SET %s = $1 LIMIT 10 OFFSET 20`, "b"))
64-
assert.Equal(t, args, []interface{}{1})
65+
assert.Equal(t, quoteSQL(`UPDATE "a" SET %s = $1 LIMIT 10 OFFSET 20`, "b"), sql)
66+
assert.Equal(t, []interface{}{1}, args)
6567
}
6668

6769
func TestUpdateWhitelist(t *testing.T) {
@@ -75,8 +77,8 @@ func TestUpdateWhitelist(t *testing.T) {
7577
SetWhitelist(sr, "user_id", "other").
7678
ToSQL()
7779

78-
assert.Equal(t, sql, quoteSQL(`UPDATE "a" SET %s = $1, %s = $2`, "user_id", "other"))
79-
checkSliceEqual(t, args, []interface{}{2, false})
80+
assert.Equal(t, quoteSQL(`UPDATE "a" SET %s = $1, %s = $2`, "user_id", "other"), sql)
81+
checkSliceEqual(t, []interface{}{2, false}, args)
8082
}
8183

8284
func TestUpdateBlacklist(t *testing.T) {
@@ -85,13 +87,31 @@ func TestUpdateBlacklist(t *testing.T) {
8587
SetBlacklist(sr, "something_id").
8688
ToSQL()
8789

88-
assert.Equal(t, sql, quoteSQL(`UPDATE "a" SET %s = $1, %s = $2`, "user_id", "other"))
89-
checkSliceEqual(t, args, []interface{}{2, false})
90+
assert.Equal(t, quoteSQL(`UPDATE "a" SET %s = $1, %s = $2`, "user_id", "other"), sql)
91+
checkSliceEqual(t, []interface{}{2, false}, args)
9092
}
9193

9294
func TestUpdateWhereExprSql(t *testing.T) {
9395
expr := Expr("id=$1", 100)
9496
sql, args := Update("a").Set("b", 10).Where(expr).ToSQL()
95-
assert.Equal(t, sql, `UPDATE "a" SET "b" = $1 WHERE (id=$2)`)
96-
assert.Exactly(t, args, []interface{}{10, 100})
97+
assert.Equal(t, `UPDATE "a" SET "b" = $1 WHERE (id=$2)`, sql)
98+
assert.Exactly(t, []interface{}{10, 100}, args)
99+
}
100+
101+
func TestUpdateBeyondMaxLookup(t *testing.T) {
102+
sqlBuilder := Update("a")
103+
setClauses := []string{}
104+
expectedArgs := []interface{}{}
105+
for i := 1; i < maxLookup + 1; i++ {
106+
sqlBuilder = sqlBuilder.Set("b", i)
107+
setClauses = append(setClauses, fmt.Sprintf(" %s = $%d", quoteSQL("%s", "b"), i))
108+
expectedArgs = append(expectedArgs, i)
109+
}
110+
sql, args := sqlBuilder.Where("id = $1", maxLookup + 1).ToSQL()
111+
expectedSQL := fmt.Sprintf(`UPDATE "a" SET%s WHERE (id = $%d)`, strings.Join(setClauses, ","), maxLookup + 1)
112+
expectedArgs = append(expectedArgs, maxLookup + 1)
113+
114+
assert.Equal(t, expectedSQL, sql)
115+
assert.Equal(t, expectedArgs, args)
116+
97117
}

0 commit comments

Comments
 (0)