dialect/sql: make sql.In() with empty args fallback to False() (#2735)

* dialect/sql/builder: make sql.In() with empty args fallback to False()

* fix indent

* added comment

* remove the equilvalent logic in the codegen side

* comment fix, run go generate
This commit is contained in:
Ryo Yamada
2022-07-12 06:15:36 +09:00
committed by GitHub
parent bc623b3f64
commit b00e549c88
106 changed files with 11 additions and 1243 deletions

View File

@@ -1535,8 +1535,10 @@ func In(col string, args ...interface{}) *Predicate {
// In appends the `IN` predicate.
func (p *Predicate) In(col string, args ...interface{}) *Predicate {
// if no arguments were provided, append the FALSE constants,
// since we can't apply "IN ()". This will make this predicate falsy.
if len(args) == 0 {
return p
return p.False()
}
return p.Append(func(b *Builder) {
b.Ident(col).WriteOp(OpIn)

View File

@@ -2004,6 +2004,14 @@ func TestReusePredicates(t *testing.T) {
wantQuery: `SELECT * FROM "users" WHERE "a" = $1 OR "b" = $2`,
wantArgs: []interface{}{"a", "b"},
},
{
p: Or(
EQ("a", "a"),
In("b"),
),
wantQuery: `SELECT * FROM "users" WHERE "a" = $1 OR FALSE`,
wantArgs: []interface{}{"a"},
},
{
p: And(
EQ("active", true),