diff --git a/part.go b/part.go index f3a7b15..c58f68f 100644 --- a/part.go +++ b/part.go @@ -19,7 +19,7 @@ func (p part) ToSql() (sql string, args []interface{}, err error) { case nil: // no-op case Sqlizer: - sql, args, err = pred.ToSql() + sql, args, err = nestedToSql(pred) case string: sql = pred args = p.args diff --git a/select_test.go b/select_test.go index aa3742f..a4c74a9 100644 --- a/select_test.go +++ b/select_test.go @@ -279,6 +279,22 @@ func TestSelectSubqueryInConjunctionPlaceholderNumbering(t *testing.T) { assert.Equal(t, []interface{}{1, 2}, args) } +func TestSelectJoinClausePlaceholderNumbering(t *testing.T) { + subquery := Select("a").Where(Eq{"b": 2}).PlaceholderFormat(Dollar) + + sql, args, err := Select("t1.a"). + From("t1"). + Where(Eq{"a": 1}). + JoinClause(subquery.Prefix("JOIN (").Suffix(") t2 ON (t1.a = t2.a)")). + PlaceholderFormat(Dollar). + ToSql() + assert.NoError(t, err) + + expectedSql := "SELECT t1.a FROM t1 JOIN ( SELECT a WHERE b = $1 ) t2 ON (t1.a = t2.a) WHERE a = $2" + assert.Equal(t, expectedSql, sql) + assert.Equal(t, []interface{}{2, 1}, args) +} + func ExampleSelect() { Select("id", "created", "first_name").From("users") // ... continue building up your query