Skip to content

Commit def598c

Browse files
authored
#301 Conjunction produces wrong dollar parameter placeholders (#302)
1 parent 84ae2bc commit def598c

File tree

2 files changed

+16
-1
lines changed

2 files changed

+16
-1
lines changed

expr.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -372,7 +372,7 @@ func (c conj) join(sep, defaultExpr string) (sql string, args []interface{}, err
372372
}
373373
var sqlParts []string
374374
for _, sqlizer := range c {
375-
partSQL, partArgs, err := sqlizer.ToSql()
375+
partSQL, partArgs, err := nestedToSql(sqlizer)
376376
if err != nil {
377377
return "", nil, err
378378
}

select_test.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,21 @@ func TestSelectSubqueryPlaceholderNumbering(t *testing.T) {
264264
assert.Equal(t, []interface{}{1, 1, 2}, args)
265265
}
266266

267+
func TestSelectSubqueryInConjunctionPlaceholderNumbering(t *testing.T) {
268+
subquery := Select("a").Where(Eq{"b": 1}).Prefix("EXISTS(").Suffix(")").PlaceholderFormat(Dollar)
269+
270+
sql, args, err := Select("*").
271+
Where(Or{subquery}).
272+
Where("c = ?", 2).
273+
PlaceholderFormat(Dollar).
274+
ToSql()
275+
assert.NoError(t, err)
276+
277+
expectedSql := "SELECT * WHERE (EXISTS( SELECT a WHERE b = $1 )) AND c = $2"
278+
assert.Equal(t, expectedSql, sql)
279+
assert.Equal(t, []interface{}{1, 2}, args)
280+
}
281+
267282
func ExampleSelect() {
268283
Select("id", "created", "first_name").From("users") // ... continue building up your query
269284

0 commit comments

Comments
 (0)