diff --git a/dialect/sql/builder.go b/dialect/sql/builder.go index d6f62a6c7..36b23dd7e 100644 --- a/dialect/sql/builder.go +++ b/dialect/sql/builder.go @@ -731,6 +731,9 @@ func P() *Predicate { return &Predicate{} } // func Or(preds ...*Predicate) *Predicate { return P().append(func(b *Builder) { + if len(preds) > 1 { + b.WriteString("(") + } for i := range preds { if i > 0 { b.WriteString(" OR ") @@ -739,6 +742,9 @@ func Or(preds ...*Predicate) *Predicate { b.Join(preds[i]) }) } + if len(preds) > 1 { + b.WriteString(")") + } }) } @@ -1317,6 +1323,19 @@ func (s *Selector) Where(p *Predicate) *Selector { return s } +// P returns the predicate of a selector. +func (s *Selector) P() *Predicate { + return s.where +} + +// SetP sets explicitly the predicate function for the selector and clear its previous state. +func (s *Selector) SetP(p *Predicate) *Selector { + s.where = p + s.or = false + s.not = false + return s +} + // FromSelect copies the predicate from a selector. func (s *Selector) FromSelect(s2 *Selector) *Selector { s.where = s2.where diff --git a/dialect/sql/builder_test.go b/dialect/sql/builder_test.go index aeb2fa699..c4bb52b33 100644 --- a/dialect/sql/builder_test.go +++ b/dialect/sql/builder_test.go @@ -492,7 +492,7 @@ func TestBuilder(t *testing.T) { ), ), ), - wantQuery: "DELETE FROM `users` WHERE (`name` = ? AND `age` = ?) OR (`name` = ? AND `age` = ?) OR ((`name` = ?) AND (`age` = ? OR `age` = ?))", + wantQuery: "DELETE FROM `users` WHERE ((`name` = ? AND `age` = ?) OR (`name` = ? AND `age` = ?) OR ((`name` = ?) AND (`age` = ? OR `age` = ?)))", wantArgs: []interface{}{"foo", 10, "bar", 20, "qux", 1, 2}, }, { @@ -508,9 +508,34 @@ func TestBuilder(t *testing.T) { ), ), ), - wantQuery: `DELETE FROM "users" WHERE ("name" = $1 AND "age" = $2) OR ("name" = $3 AND "age" = $4) OR (("name" = $5) AND ("age" = $6 OR "age" = $7))`, + wantQuery: `DELETE FROM "users" WHERE (("name" = $1 AND "age" = $2) OR ("name" = $3 AND "age" = $4) OR (("name" = $5) AND ("age" = $6 OR "age" = $7)))`, wantArgs: []interface{}{"foo", 10, "bar", 20, "qux", 1, 2}, }, + { + input: Delete("users"). + Where( + Or( + EQ("name", "foo").And().EQ("age", 10), + EQ("name", "bar").And().EQ("age", 20), + ), + ). + Where(EQ("role", "admin")), + wantQuery: "DELETE FROM `users` WHERE ((`name` = ? AND `age` = ?) OR (`name` = ? AND `age` = ?)) AND `role` = ?", + wantArgs: []interface{}{"foo", 10, "bar", 20, "admin"}, + }, + { + input: Dialect(dialect.Postgres). + Delete("users"). + Where( + Or( + EQ("name", "foo").And().EQ("age", 10), + EQ("name", "bar").And().EQ("age", 20), + ), + ). + Where(EQ("role", "admin")), + wantQuery: `DELETE FROM "users" WHERE (("name" = $1 AND "age" = $2) OR ("name" = $3 AND "age" = $4)) AND "role" = $5`, + wantArgs: []interface{}{"foo", 10, "bar", 20, "admin"}, + }, { input: Select().From(Table("users")), wantQuery: "SELECT * FROM `users`", @@ -985,7 +1010,7 @@ func TestBuilder(t *testing.T) { }, { input: Select("age").From(Table("users")).Where(EQ("name", "foo")).Or().Where(EQ("name", "bar")), - wantQuery: "SELECT `age` FROM `users` WHERE (`name` = ?) OR (`name` = ?)", + wantQuery: "SELECT `age` FROM `users` WHERE ((`name` = ?) OR (`name` = ?))", wantArgs: []interface{}{"foo", "bar"}, }, { @@ -993,7 +1018,7 @@ func TestBuilder(t *testing.T) { Select("age"). From(Table("users")). Where(EQ("name", "foo")).Or().Where(EQ("name", "bar")), - wantQuery: `SELECT "age" FROM "users" WHERE ("name" = $1) OR ("name" = $2)`, + wantQuery: `SELECT "age" FROM "users" WHERE (("name" = $1) OR ("name" = $2))`, wantArgs: []interface{}{"foo", "bar"}, }, { diff --git a/entc/gen/internal/bindata.go b/entc/gen/internal/bindata.go index 6b4d1b5cd..500494628 100644 --- a/entc/gen/internal/bindata.go +++ b/entc/gen/internal/bindata.go @@ -741,7 +741,7 @@ func templateDialectSqlOpenTmpl() (*asset, error) { return a, nil } -var _templateDialectSqlPredicateTmpl = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x58\xd1\x4f\xe3\xb8\x13\x7e\x4e\xff\x8a\x11\xaa\xf4\x4b\x50\x71\xa1\x0b\x0f\xbf\x93\x38\x09\x75\x41\xea\xdd\x42\xef\xd4\xd5\xdd\x03\x42\x2b\x93\x4c\x5a\xef\x1a\x3b\xd8\x6e\x11\xca\xe6\x7f\x3f\xd9\x71\xd3\xa4\x4d\xa1\xdb\x05\xdd\xcb\x3d\x35\x89\xc7\x33\xdf\x7c\xf3\xcd\xd8\x6a\x9e\xf7\x0f\x3b\x43\x99\x3d\x2b\x36\x9d\x19\x18\x1c\x9f\xfc\xff\x28\x53\xa8\x51\x18\xb8\xa2\x31\xde\x4b\xf9\x0d\x46\x22\x26\x70\xc1\x39\x38\x23\x0d\x76\x5d\x2d\x30\x21\x9d\xcf\x33\xa6\x41\xcb\xb9\x8a\x11\x62\x99\x20\x30\x0d\x9c\xc5\x28\x34\x26\x30\x17\x09\x2a\x30\x33\x84\x8b\x8c\xc6\x33\x84\x01\x39\x5e\xae\x42\x2a\xe7\x22\xe9\x30\xe1\xd6\x3f\x8d\x86\x97\x37\x93\x4b\x48\x19\x47\xf0\xdf\x94\x94\x06\x12\xa6\x30\x36\x52\x3d\x83\x4c\xc1\xd4\x82\x19\x85\x48\x3a\x87\xfd\xa2\xe8\x74\xf2\x1c\x12\x4c\x99\x40\x38\x48\x18\xe5\x18\x9b\xbe\x7e\xe4\xfd\x4c\x61\xc2\x62\x6a\xb0\xcf\x92\x03\x38\x2a\x8a\x4e\x90\xce\x45\x1c\x6a\x38\xd4\x8f\x9c\x4c\x90\x3b\xd7\x11\xe4\x9d\x20\xc8\xf3\x23\x60\x29\x74\xc9\xe8\x23\x19\xe9\x89\x51\x4c\x4c\xa1\x28\x58\xd2\x83\x2f\xf0\xcb\x39\x68\xa3\x62\x29\x16\xe4\xc2\x48\x16\xb2\x24\xb2\xf6\x28\x12\xb0\x5e\x03\x4d\xfe\x9e\xa1\xc2\xd0\xba\xbd\xfc\x33\xd4\x64\x18\xe6\x79\xe9\x6b\x28\x85\x36\x54\x18\x28\x8a\xa8\x07\x2c\x89\xa2\x4e\x50\x74\x6a\xbb\x77\x41\xdf\x97\x99\xf6\x19\xd8\x9d\x5d\x99\x59\x48\x5d\x32\x89\x65\x86\x64\x9c\xd5\x96\xa8\x9a\xd6\xd7\x2e\xd4\xb4\xb6\xa8\x8d\x54\x74\x8a\x75\x83\x89\xff\xb4\x23\x3d\x32\x23\x7f\x51\xc5\x68\xc2\xe2\x32\xf5\xa0\xdf\xb7\x0b\x42\x1a\xa0\x6a\x3a\x7f\x40\x61\x34\x3c\xa1\x42\xc8\x94\x5c\xb0\x04\x93\x1e\xd0\x2c\xb3\xc9\xda\xa2\x5e\x5d\x7c\x9a\x5c\x42\xec\x49\xd1\x3d\xef\x41\x33\x11\x23\x3c\x21\xc4\x54\xfc\xcf\xd8\x0d\xfc\x19\x0e\x46\x37\x10\x46\x07\x04\x9c\xc8\x9e\x18\xe7\xf0\x40\xbf\x61\x29\x83\x8a\x1e\x48\x29\xd7\xcf\xc4\x3a\x62\x29\x70\x14\x8e\x7a\x4b\x43\x51\x44\x70\x7e\x0e\xc7\x2e\x81\x66\x91\xae\x28\xd7\x18\xda\x5a\x04\x41\xa0\xd0\xcc\x95\xb0\x8f\x2e\xa1\x85\xa5\xc7\x06\x0a\x6f\xef\x98\x30\xa8\x52\x1a\x63\x5e\xf4\xd6\x7d\xbb\xcd\xa9\x54\xc0\xec\x06\x45\xc5\x14\x61\xe1\x63\xe5\x79\x9b\x98\x16\xb7\xec\xce\xca\x69\x4d\x4d\x2b\x9f\xb7\xec\x2e\xca\x73\x40\xae\xd1\x9b\xc3\x39\x34\x96\xed\xea\x52\x75\x0e\xae\x53\x92\xb5\x6f\x89\xe7\x38\x69\x15\x70\x2d\x8d\xa5\x8f\x36\x2d\xe7\x39\xc4\x94\xf3\x4a\x38\x64\x9c\x0d\x6d\x93\x5b\x01\x16\xc5\x0b\x3a\xf7\xf9\x37\xd5\xb2\x20\x84\xac\xb2\x63\x49\x95\xcb\x1e\x3d\x91\x32\xe4\x49\xbd\x25\xd2\xba\xa8\xaf\xec\xea\x6b\x92\xde\xd2\xb4\xe9\x5a\x2a\x8b\x7d\xd1\xad\x37\xed\x36\x84\xff\x75\xf4\x3b\x77\xf4\xcf\xca\xbb\xa9\x88\x52\xda\x96\x1d\x4b\xdd\x0d\xe3\x9e\xb9\x1e\x2c\x5a\x55\xef\x45\xef\xe2\xff\x8c\xe2\x31\x99\x62\x7f\x46\x1b\x92\x6a\xd4\xfd\x32\xd9\xbd\xe8\x48\xae\x07\xd7\xe0\xeb\x6d\x4e\xdc\x7c\x20\x9f\xe9\x3d\xc7\xd0\x31\x78\x3f\x67\xdc\x9e\xdd\xf6\xfb\x23\x27\x1f\x4b\x44\xa1\xae\x9e\x4a\xa2\x97\x64\x96\xd5\x78\xe4\x64\x24\xca\xe7\xc0\x9c\x6c\x9b\x0d\xe5\xba\x0f\xe0\xe1\x39\x4b\x24\x7f\xfc\x5e\xb3\xbc\xf5\x6c\x22\x19\xe9\x91\x58\xa0\x72\x53\xe3\x64\x35\x40\x8e\x2b\x36\xef\x22\x52\x7a\x0d\xae\x94\x7c\x08\x97\xbe\xcb\x7c\x4a\xd7\xee\xb9\x8e\xc3\x03\x29\x7f\xa2\xb5\x41\x2a\x55\x49\xd1\x18\x42\x2a\x12\xfb\x3c\x1e\x8c\x1b\x50\x22\x57\xcd\xfe\x21\x58\xa3\xef\xdf\x21\xb4\x06\x4f\xcc\xcc\x80\x79\xac\xb6\x5e\x11\xb8\x0b\x4a\x3b\xc7\x75\x25\xde\x48\x73\x33\xe7\x3c\xac\x68\x43\x32\x94\x7c\xfe\x20\x1a\x90\x1b\x30\x7d\xfc\xf1\xe0\xba\x19\x9f\x6a\x2d\xe3\xd7\xa3\xff\x3b\x15\xde\x4c\x6a\x8f\xca\x2d\xb7\x6c\xd2\xb7\x95\xb9\xd6\x62\xfb\x91\xb0\x67\x1f\x5a\xb2\xdf\xbe\x17\x6d\x06\xee\x3e\x71\x52\x8e\x8b\xee\x57\xfb\x72\xec\x5e\x8e\x5a\xfa\xa1\xb4\x5f\x5a\x58\xf3\x6a\xab\xcd\xe8\xa8\xf4\xba\x63\xb1\x5b\x64\x62\x06\xf6\x53\xb3\x2e\xfe\x86\xe3\xe0\x08\x84\x6e\xf9\xd9\xd5\xea\x39\xf3\x05\x5b\x46\x2e\x33\x42\xe2\x11\xaf\x17\xb3\x72\xe5\x24\x5d\xed\x71\x66\xab\xb5\x55\x22\x25\xa6\x0f\x9b\x98\xb6\x68\xc5\x99\x9f\xd6\xcd\xbd\x1c\xcd\x87\xaa\xd1\x36\xa6\x4e\xf7\xab\x9b\x29\x5e\x67\x4e\x98\xe6\x83\x7f\xfb\x4d\x32\x11\x9a\x81\x7f\x1b\x8b\x97\x1d\x31\xe7\xa8\x07\x66\x50\x19\x39\x8a\xd6\x3a\xa6\x84\x79\xd6\x02\x33\x22\x65\xf8\x41\x75\xd9\xfc\xd2\x83\x6c\x75\xdf\xb4\xb2\xd4\xfe\x34\xcc\x42\x73\x16\x55\xb7\x58\x73\xea\xb6\x2e\xd3\x3d\xdb\x18\x39\x23\x11\x6e\x6f\x61\x30\xa7\xd1\xfb\x0f\xc5\xb7\x92\x65\x63\xc4\xb4\x11\x4c\x5a\xa6\xcb\xfb\xab\xb8\x5d\x93\xad\xb2\xde\xad\xbc\x83\x55\x79\xb7\x55\xb2\x6d\xfa\x59\xfd\xed\x7f\x76\xbc\x4b\x91\x5a\xce\x81\x1f\x38\x00\xde\x8a\xac\x16\xd9\xd7\x88\xda\xef\x78\xa0\xe2\xf5\xff\x1a\xda\xb1\xbb\xfd\x3e\x81\x2c\xd4\x16\xc7\x8f\x87\x97\x6a\xa7\xe8\xec\xc5\xe8\x2c\x05\x06\xbf\xd6\xae\xd9\x63\x15\xae\xd8\xdc\x1b\x9b\x90\xe6\x55\x70\x59\xa8\xed\x69\x1e\x6e\x5c\x90\xff\x09\x00\x00\xff\xff\xc7\x79\xb5\x48\xa8\x12\x00\x00") +var _templateDialectSqlPredicateTmpl = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x58\xdf\x4f\xe3\x38\x10\x7e\x6e\xff\x8a\x11\xaa\x74\x09\x2a\x2e\x2d\xf0\x70\x27\x71\x12\xea\x82\xd4\xbb\x85\x72\xea\xea\xee\x01\xa1\x95\x49\x26\xad\x77\x8d\x1d\x6c\xb7\x08\x65\xf3\xbf\x9f\xec\xb8\x69\xd2\xa6\xc0\x15\xd0\xbd\xec\x13\x69\x66\x3c\x3f\xbe\xef\x9b\x89\x45\x96\xf5\xf6\xdb\x43\x99\x3e\x29\x36\x9d\x19\x18\x1c\xf6\x7f\x3d\x48\x15\x6a\x14\x06\x2e\x68\x84\x77\x52\x7e\x87\x91\x88\x08\x9c\x71\x0e\xce\x49\x83\xb5\xab\x05\xc6\xa4\xfd\x65\xc6\x34\x68\x39\x57\x11\x42\x24\x63\x04\xa6\x81\xb3\x08\x85\xc6\x18\xe6\x22\x46\x05\x66\x86\x70\x96\xd2\x68\x86\x30\x20\x87\x4b\x2b\x24\x72\x2e\xe2\x36\x13\xce\xfe\x79\x34\x3c\xbf\x9a\x9c\x43\xc2\x38\x82\x7f\xa7\xa4\x34\x10\x33\x85\x91\x91\xea\x09\x64\x02\xa6\x92\xcc\x28\x44\xd2\xde\xef\xe5\x79\xbb\x9d\x65\x10\x63\xc2\x04\xc2\x5e\xcc\x28\xc7\xc8\xf4\xf4\x03\xef\xa5\x0a\x63\x16\x51\x83\x3d\x16\xef\xc1\x41\x9e\xb7\x5b\xc9\x5c\x44\x81\x86\x7d\xfd\xc0\xc9\x04\xb9\x0b\x1d\x42\xd6\x6e\xb5\xb2\xec\x00\x58\x02\x1d\x32\xfa\x44\x46\x7a\x62\x14\x13\x53\xc8\x73\x16\x77\xe1\x2b\xfc\x76\x0a\xda\xa8\x48\x8a\x05\x39\x33\x92\x05\x2c\x0e\xad\x3f\x8a\x18\x6c\xd4\x96\x26\xff\xcc\x50\x61\x60\xc3\x9e\xff\x15\x68\x32\x0c\xb2\xac\x88\x35\x94\x42\x1b\x2a\x0c\xe4\x79\xd8\x05\x16\x87\x61\xbb\x95\xb7\x2b\xa7\x5f\x53\x7d\x4f\xa6\xda\x77\x60\x4f\x76\x64\x6a\x4b\xea\x90\x49\x24\x53\x24\xe3\xb4\x62\xa2\x6a\x5a\xb5\x9d\xa9\x69\xc5\xa8\x8d\x54\x74\x8a\x55\x87\x89\x7f\xf5\x4a\x78\x64\x4a\xfe\xa6\x8a\xd1\x98\x45\x45\xeb\xad\x5e\xcf\x1a\x84\x34\x40\xd5\x74\x7e\x8f\xc2\x68\x78\x44\x85\x90\x2a\xb9\x60\x31\xc6\x5d\xa0\x69\x6a\x9b\xb5\xa4\x5e\x9c\x7d\x9e\x9c\x43\xe4\x41\xd1\x5d\x1f\x41\x33\x11\x21\x3c\x22\x44\x54\xfc\x62\xec\x01\xfe\x04\x7b\xa3\x2b\x08\xc2\x3d\x02\x4e\x64\x8f\x8c\x73\xb8\xa7\xdf\xb1\x90\x41\x09\x0f\x24\x94\xeb\x27\x62\x03\xb1\x04\x38\x0a\x07\xbd\x85\x21\xcf\x43\x38\x3d\x85\x43\xd7\x40\x9d\xa4\x0b\xca\x35\x06\x96\x8b\x56\xab\xa5\xd0\xcc\x95\xb0\x8f\xae\xa1\x85\x85\xc7\x26\x0a\x6e\x6e\x99\x30\xa8\x12\x1a\x61\x96\x77\xd7\x63\xbb\xc3\x89\x54\xc0\xec\x01\x45\xc5\x14\x61\xe1\x73\x65\x59\x93\x98\x16\x37\xec\xd6\xca\x69\x4d\x4d\xab\x98\x37\xec\x36\xcc\x32\x40\xae\xd1\xbb\xc3\x29\xd4\xcc\xd6\xba\x54\x9d\x2b\xd7\x29\xc9\xfa\x37\xe4\x73\x98\x34\x0a\xb8\xd2\xc6\x32\x46\x93\x96\xb3\x0c\x22\xca\x79\x29\x1c\x32\x4e\x87\x76\xc8\xad\x00\xf3\xfc\x19\x9d\xfb\xfe\xeb\x6a\x59\x10\x42\x56\xdd\xb1\xb8\xec\x65\x87\x99\x48\x18\xf2\xb8\x3a\x12\x49\x55\xd4\x17\xd6\xfa\x92\xa4\xb7\x0c\x6d\xb2\xd6\xca\x62\xd7\xea\xd6\x87\x76\x5b\x85\x3f\x27\xfa\x83\x27\xfa\xad\xf2\xae\x2b\xa2\x90\xb6\x45\xc7\x42\x77\xc5\xb8\x47\xae\x0b\x8b\x46\xd5\x7b\xd1\xbb\xfc\x6f\x51\x3c\xc6\x53\xec\xcd\x68\x4d\x52\x35\xde\xcf\xe3\xd7\x93\x8e\xe4\x72\x70\x09\x9e\x6f\xd3\x77\xfb\x81\x7c\xa1\x77\x1c\x03\x87\xe0\xdd\x9c\x71\xfb\xed\xb6\xef\x1f\x38\xf9\x54\x54\x14\xe8\xf2\xa9\x00\x7a\x09\x66\xc1\xc6\x03\x27\x23\x51\x3c\xb7\x4c\x7f\xdb\x6e\x28\xec\x3e\x81\x2f\xcf\x79\x22\xb9\xfe\xb3\xe2\x79\xe3\xd1\x44\x32\xd2\x23\xb1\x40\xe5\xb6\x46\x7f\xb5\x40\x0e\x4b\x34\x6f\x43\x52\x44\x6d\x5d\x28\x79\x1f\x2c\x63\x17\xfd\x14\xa1\xdd\x73\xb5\x0e\x5f\x48\xf1\x27\x5c\x5b\xa4\x52\x15\x10\x8d\x21\xa0\x22\xb6\xcf\xe3\xc1\xb8\x56\x4a\xe8\xd8\xec\xed\x83\x75\xfa\xf1\x03\x02\xeb\xf0\xc8\xcc\x0c\x98\xaf\xd5\xf2\x15\x82\xbb\xa0\x34\x63\x5c\x55\xe2\x95\x34\x57\x73\xce\x83\x12\x36\x24\x43\xc9\xe7\xf7\xa2\x56\x72\xad\x4c\x9f\x7f\x3c\xb8\xac\xe7\xa7\x5a\xcb\xe8\xe5\xec\xff\x0f\xc3\x9b\x4d\xed\xc0\xdc\xf2\xc8\x26\x7c\x5b\x91\x6b\x24\xdb\xaf\x84\x1d\xe7\xd0\x82\xfd\xfe\xb3\x68\x3b\x70\xf7\x89\x7e\xb1\x2e\x3a\xdf\xec\x8f\x43\xf7\xe3\xa0\x61\x1e\x0a\xff\xa5\x87\x75\x2f\x8f\xda\x8e\x0e\x8a\xa8\xaf\x24\xbb\x41\x26\x66\x60\x5f\xd5\x79\xf1\x37\x1c\x57\x8e\x40\xe8\x14\xaf\x1d\x57\x4f\xa9\x27\x6c\x99\xb9\xe8\x08\x89\xaf\x78\x9d\xcc\x32\x94\x93\x74\x79\xc6\xb9\xad\x6c\xab\x46\x8a\x9a\x8e\x36\x6b\xda\xa2\x15\xe7\x7e\x5c\x75\xf7\x72\x34\x47\xe5\xa0\x6d\x6c\x9d\xce\x37\xb7\x53\xbc\xce\x9c\x30\xcd\x91\xff\xf5\x87\x64\x22\x30\x03\xff\x6b\x2c\x9e\x0f\xc4\x5c\xa0\x2e\x98\x41\xe9\xe4\x20\x5a\x9b\x98\xa2\xcc\x93\x86\x32\x43\x52\xa4\x1f\x94\x97\xcd\xaf\x5d\x48\x57\xf7\x4d\x2b\x4b\xed\xbf\x86\x69\x60\x4e\xc2\xf2\x16\x6b\x8e\xdd\xd1\x65\xbb\x27\x1b\x2b\x67\x24\x82\xed\x23\x0c\xe6\x38\xfc\xf8\xa5\xf8\x5e\xb2\xac\xad\x98\x26\x80\x49\xc3\x76\xf9\x78\x15\x37\x6b\xb2\x51\xd6\xaf\xa3\x77\xb0\xa2\x77\x1b\x93\x4d\xdb\xcf\xea\x6f\xf7\x6f\xc7\x87\x90\xd4\xf0\x1d\xf8\x0f\x1f\x80\xf7\x02\xab\x41\xf6\x15\xa0\x76\xfb\x3c\x50\xf1\xf2\xff\x1a\xb4\xc7\x6a\xc8\xa5\xc0\x20\x24\x13\x34\xd7\x81\x60\xdc\xa6\x6e\xee\xcb\xc5\xf6\xcd\xa5\x81\xee\x5b\xcf\xda\x6d\xb6\x4f\xae\x83\x1d\x2e\x95\x52\xbd\xb9\x58\xf6\x6c\xb1\x2c\x01\x06\xbf\xaf\x6e\xec\x7d\x32\x56\xc1\x8a\x99\xf7\xec\x45\x48\xf3\x62\x33\x69\xa0\xed\x65\x61\x33\xfc\xbf\x01\x00\x00\xff\xff\xde\x4a\xc1\x6a\x07\x13\x00\x00") func templateDialectSqlPredicateTmplBytes() ([]byte, error) { return bindataRead( @@ -756,7 +756,7 @@ func templateDialectSqlPredicateTmpl() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "template/dialect/sql/predicate.tmpl", size: 4776, mode: os.FileMode(420), modTime: time.Unix(1, 0)} + info := bindataFileInfo{name: "template/dialect/sql/predicate.tmpl", size: 4871, mode: os.FileMode(420), modTime: time.Unix(1, 0)} a := &asset{bytes: bytes, info: info} return a, nil } diff --git a/entc/gen/template/dialect/sql/predicate.tmpl b/entc/gen/template/dialect/sql/predicate.tmpl index b1449f606..b543a30f9 100644 --- a/entc/gen/template/dialect/sql/predicate.tmpl +++ b/entc/gen/template/dialect/sql/predicate.tmpl @@ -143,20 +143,24 @@ in the LICENSE file in the root directory of this source tree. {{ define "dialect/sql/predicate/and" -}} func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for _, p := range predicates { - p(s) + p(s1) } + s.Where(s1.P()) } {{- end }} {{ define "dialect/sql/predicate/or" -}} func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for i, p := range predicates { if i > 0 { - s.Or() + s1.Or() } - p(s) + p(s1) } + s.Where(s1.P()) } {{- end }} diff --git a/entc/integration/config/ent/user/where.go b/entc/integration/config/ent/user/where.go index f377914cd..d2f95e256 100644 --- a/entc/integration/config/ent/user/where.go +++ b/entc/integration/config/ent/user/where.go @@ -116,9 +116,11 @@ func IDLTE(id int) predicate.User { func And(predicates ...predicate.User) predicate.User { return predicate.User( func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for _, p := range predicates { - p(s) + p(s1) } + s.Where(s1.P()) }, ) } @@ -127,12 +129,14 @@ func And(predicates ...predicate.User) predicate.User { func Or(predicates ...predicate.User) predicate.User { return predicate.User( func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for i, p := range predicates { if i > 0 { - s.Or() + s1.Or() } - p(s) + p(s1) } + s.Where(s1.P()) }, ) } diff --git a/entc/integration/ent/card/where.go b/entc/integration/ent/card/where.go index 3b74b9a1f..38b1c4ba1 100644 --- a/entc/integration/ent/card/where.go +++ b/entc/integration/ent/card/where.go @@ -807,9 +807,11 @@ func HasOwnerWith(preds ...predicate.User) predicate.Card { func And(predicates ...predicate.Card) predicate.Card { return predicate.CardPerDialect( func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for _, p := range predicates { - p(s) + p(s1) } + s.Where(s1.P()) }, func(tr *dsl.Traversal) { trs := make([]interface{}, 0, len(predicates)) @@ -827,12 +829,14 @@ func And(predicates ...predicate.Card) predicate.Card { func Or(predicates ...predicate.Card) predicate.Card { return predicate.CardPerDialect( func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for i, p := range predicates { if i > 0 { - s.Or() + s1.Or() } - p(s) + p(s1) } + s.Where(s1.P()) }, func(tr *dsl.Traversal) { trs := make([]interface{}, 0, len(predicates)) diff --git a/entc/integration/ent/comment/where.go b/entc/integration/ent/comment/where.go index 02ddf71c1..d88a7309e 100644 --- a/entc/integration/ent/comment/where.go +++ b/entc/integration/ent/comment/where.go @@ -571,9 +571,11 @@ func NillableIntNotNil() predicate.Comment { func And(predicates ...predicate.Comment) predicate.Comment { return predicate.CommentPerDialect( func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for _, p := range predicates { - p(s) + p(s1) } + s.Where(s1.P()) }, func(tr *dsl.Traversal) { trs := make([]interface{}, 0, len(predicates)) @@ -591,12 +593,14 @@ func And(predicates ...predicate.Comment) predicate.Comment { func Or(predicates ...predicate.Comment) predicate.Comment { return predicate.CommentPerDialect( func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for i, p := range predicates { if i > 0 { - s.Or() + s1.Or() } - p(s) + p(s1) } + s.Where(s1.P()) }, func(tr *dsl.Traversal) { trs := make([]interface{}, 0, len(predicates)) diff --git a/entc/integration/ent/fieldtype/where.go b/entc/integration/ent/fieldtype/where.go index 3726e2700..546dc6ea4 100644 --- a/entc/integration/ent/fieldtype/where.go +++ b/entc/integration/ent/fieldtype/where.go @@ -2567,9 +2567,11 @@ func StateNotNil() predicate.FieldType { func And(predicates ...predicate.FieldType) predicate.FieldType { return predicate.FieldTypePerDialect( func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for _, p := range predicates { - p(s) + p(s1) } + s.Where(s1.P()) }, func(tr *dsl.Traversal) { trs := make([]interface{}, 0, len(predicates)) @@ -2587,12 +2589,14 @@ func And(predicates ...predicate.FieldType) predicate.FieldType { func Or(predicates ...predicate.FieldType) predicate.FieldType { return predicate.FieldTypePerDialect( func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for i, p := range predicates { if i > 0 { - s.Or() + s1.Or() } - p(s) + p(s1) } + s.Where(s1.P()) }, func(tr *dsl.Traversal) { trs := make([]interface{}, 0, len(predicates)) diff --git a/entc/integration/ent/file/where.go b/entc/integration/ent/file/where.go index 00bb17d76..47192ed8d 100644 --- a/entc/integration/ent/file/where.go +++ b/entc/integration/ent/file/where.go @@ -901,9 +901,11 @@ func HasTypeWith(preds ...predicate.FileType) predicate.File { func And(predicates ...predicate.File) predicate.File { return predicate.FilePerDialect( func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for _, p := range predicates { - p(s) + p(s1) } + s.Where(s1.P()) }, func(tr *dsl.Traversal) { trs := make([]interface{}, 0, len(predicates)) @@ -921,12 +923,14 @@ func And(predicates ...predicate.File) predicate.File { func Or(predicates ...predicate.File) predicate.File { return predicate.FilePerDialect( func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for i, p := range predicates { if i > 0 { - s.Or() + s1.Or() } - p(s) + p(s1) } + s.Where(s1.P()) }, func(tr *dsl.Traversal) { trs := make([]interface{}, 0, len(predicates)) diff --git a/entc/integration/ent/filetype/where.go b/entc/integration/ent/filetype/where.go index ff20d502e..8dccc84e7 100644 --- a/entc/integration/ent/filetype/where.go +++ b/entc/integration/ent/filetype/where.go @@ -370,9 +370,11 @@ func HasFilesWith(preds ...predicate.File) predicate.FileType { func And(predicates ...predicate.FileType) predicate.FileType { return predicate.FileTypePerDialect( func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for _, p := range predicates { - p(s) + p(s1) } + s.Where(s1.P()) }, func(tr *dsl.Traversal) { trs := make([]interface{}, 0, len(predicates)) @@ -390,12 +392,14 @@ func And(predicates ...predicate.FileType) predicate.FileType { func Or(predicates ...predicate.FileType) predicate.FileType { return predicate.FileTypePerDialect( func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for i, p := range predicates { if i > 0 { - s.Or() + s1.Or() } - p(s) + p(s1) } + s.Where(s1.P()) }, func(tr *dsl.Traversal) { trs := make([]interface{}, 0, len(predicates)) diff --git a/entc/integration/ent/group/where.go b/entc/integration/ent/group/where.go index 544d6ffb9..53250f17b 100644 --- a/entc/integration/ent/group/where.go +++ b/entc/integration/ent/group/where.go @@ -1002,9 +1002,11 @@ func HasInfoWith(preds ...predicate.GroupInfo) predicate.Group { func And(predicates ...predicate.Group) predicate.Group { return predicate.GroupPerDialect( func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for _, p := range predicates { - p(s) + p(s1) } + s.Where(s1.P()) }, func(tr *dsl.Traversal) { trs := make([]interface{}, 0, len(predicates)) @@ -1022,12 +1024,14 @@ func And(predicates ...predicate.Group) predicate.Group { func Or(predicates ...predicate.Group) predicate.Group { return predicate.GroupPerDialect( func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for i, p := range predicates { if i > 0 { - s.Or() + s1.Or() } - p(s) + p(s1) } + s.Where(s1.P()) }, func(tr *dsl.Traversal) { trs := make([]interface{}, 0, len(predicates)) diff --git a/entc/integration/ent/groupinfo/where.go b/entc/integration/ent/groupinfo/where.go index 260f23b08..2ee2de5a0 100644 --- a/entc/integration/ent/groupinfo/where.go +++ b/entc/integration/ent/groupinfo/where.go @@ -498,9 +498,11 @@ func HasGroupsWith(preds ...predicate.Group) predicate.GroupInfo { func And(predicates ...predicate.GroupInfo) predicate.GroupInfo { return predicate.GroupInfoPerDialect( func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for _, p := range predicates { - p(s) + p(s1) } + s.Where(s1.P()) }, func(tr *dsl.Traversal) { trs := make([]interface{}, 0, len(predicates)) @@ -518,12 +520,14 @@ func And(predicates ...predicate.GroupInfo) predicate.GroupInfo { func Or(predicates ...predicate.GroupInfo) predicate.GroupInfo { return predicate.GroupInfoPerDialect( func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for i, p := range predicates { if i > 0 { - s.Or() + s1.Or() } - p(s) + p(s1) } + s.Where(s1.P()) }, func(tr *dsl.Traversal) { trs := make([]interface{}, 0, len(predicates)) diff --git a/entc/integration/ent/item/where.go b/entc/integration/ent/item/where.go index 8fb8f757b..a292a9a6f 100644 --- a/entc/integration/ent/item/where.go +++ b/entc/integration/ent/item/where.go @@ -163,9 +163,11 @@ func IDLTE(id string) predicate.Item { func And(predicates ...predicate.Item) predicate.Item { return predicate.ItemPerDialect( func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for _, p := range predicates { - p(s) + p(s1) } + s.Where(s1.P()) }, func(tr *dsl.Traversal) { trs := make([]interface{}, 0, len(predicates)) @@ -183,12 +185,14 @@ func And(predicates ...predicate.Item) predicate.Item { func Or(predicates ...predicate.Item) predicate.Item { return predicate.ItemPerDialect( func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for i, p := range predicates { if i > 0 { - s.Or() + s1.Or() } - p(s) + p(s1) } + s.Where(s1.P()) }, func(tr *dsl.Traversal) { trs := make([]interface{}, 0, len(predicates)) diff --git a/entc/integration/ent/node/where.go b/entc/integration/ent/node/where.go index bb37c9574..22255f54f 100644 --- a/entc/integration/ent/node/where.go +++ b/entc/integration/ent/node/where.go @@ -393,9 +393,11 @@ func HasNextWith(preds ...predicate.Node) predicate.Node { func And(predicates ...predicate.Node) predicate.Node { return predicate.NodePerDialect( func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for _, p := range predicates { - p(s) + p(s1) } + s.Where(s1.P()) }, func(tr *dsl.Traversal) { trs := make([]interface{}, 0, len(predicates)) @@ -413,12 +415,14 @@ func And(predicates ...predicate.Node) predicate.Node { func Or(predicates ...predicate.Node) predicate.Node { return predicate.NodePerDialect( func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for i, p := range predicates { if i > 0 { - s.Or() + s1.Or() } - p(s) + p(s1) } + s.Where(s1.P()) }, func(tr *dsl.Traversal) { trs := make([]interface{}, 0, len(predicates)) diff --git a/entc/integration/ent/pet/where.go b/entc/integration/ent/pet/where.go index 87d348f28..da6e00320 100644 --- a/entc/integration/ent/pet/where.go +++ b/entc/integration/ent/pet/where.go @@ -397,9 +397,11 @@ func HasOwnerWith(preds ...predicate.User) predicate.Pet { func And(predicates ...predicate.Pet) predicate.Pet { return predicate.PetPerDialect( func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for _, p := range predicates { - p(s) + p(s1) } + s.Where(s1.P()) }, func(tr *dsl.Traversal) { trs := make([]interface{}, 0, len(predicates)) @@ -417,12 +419,14 @@ func And(predicates ...predicate.Pet) predicate.Pet { func Or(predicates ...predicate.Pet) predicate.Pet { return predicate.PetPerDialect( func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for i, p := range predicates { if i > 0 { - s.Or() + s1.Or() } - p(s) + p(s1) } + s.Where(s1.P()) }, func(tr *dsl.Traversal) { trs := make([]interface{}, 0, len(predicates)) diff --git a/entc/integration/ent/user/where.go b/entc/integration/ent/user/where.go index 2281e37a1..9de0cc23d 100644 --- a/entc/integration/ent/user/where.go +++ b/entc/integration/ent/user/where.go @@ -1684,9 +1684,11 @@ func HasParentWith(preds ...predicate.User) predicate.User { func And(predicates ...predicate.User) predicate.User { return predicate.UserPerDialect( func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for _, p := range predicates { - p(s) + p(s1) } + s.Where(s1.P()) }, func(tr *dsl.Traversal) { trs := make([]interface{}, 0, len(predicates)) @@ -1704,12 +1706,14 @@ func And(predicates ...predicate.User) predicate.User { func Or(predicates ...predicate.User) predicate.User { return predicate.UserPerDialect( func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for i, p := range predicates { if i > 0 { - s.Or() + s1.Or() } - p(s) + p(s1) } + s.Where(s1.P()) }, func(tr *dsl.Traversal) { trs := make([]interface{}, 0, len(predicates)) diff --git a/entc/integration/idtype/ent/user/where.go b/entc/integration/idtype/ent/user/where.go index c4cd037d5..7d770a208 100644 --- a/entc/integration/idtype/ent/user/where.go +++ b/entc/integration/idtype/ent/user/where.go @@ -373,9 +373,11 @@ func HasFollowingWith(preds ...predicate.User) predicate.User { func And(predicates ...predicate.User) predicate.User { return predicate.User( func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for _, p := range predicates { - p(s) + p(s1) } + s.Where(s1.P()) }, ) } @@ -384,12 +386,14 @@ func And(predicates ...predicate.User) predicate.User { func Or(predicates ...predicate.User) predicate.User { return predicate.User( func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for i, p := range predicates { if i > 0 { - s.Or() + s1.Or() } - p(s) + p(s1) } + s.Where(s1.P()) }, ) } diff --git a/entc/integration/integration_test.go b/entc/integration/integration_test.go index 13742e74b..441f92b6d 100644 --- a/entc/integration/integration_test.go +++ b/entc/integration/integration_test.go @@ -321,6 +321,28 @@ func Predicate(t *testing.T, client *ent.Client) { AllX(ctx) require.Equal(f1.Name, files[0].Name) require.Equal(f2.Name, files[1].Name) + + match := client.File.Query(). + Where(file.Or(file.Name(f1.Name), file.Name(f2.Name))). + Where(file.Size(f1.Size)). + OnlyX(ctx) + require.Equal(f1.Name, match.Name) + + match = client.File.Query(). + Where(file.Size(f2.Size)). + Where(file.Or(file.Name(f1.Name), file.Name(f2.Name))). + OnlyX(ctx) + require.Equal(f2.Name, match.Name) + + files = client.File.Query(). + Where(file.Or(file.Size(f3.Size), file.Size(f4.Size))). + Where(file.Or(file.Name(f3.Name), file.Name(f4.Name))). + Where(file.Not(file.Or(file.Name(f1.Name), file.Size(f1.Size)))). + Order(ent.Asc(file.FieldName)). + AllX(ctx) + require.Equal(f3.Name, files[0].Name) + require.Equal(f4.Name, files[1].Name) + files = client.File.Query(). Where( file.Or( diff --git a/entc/integration/json/ent/user/where.go b/entc/integration/json/ent/user/where.go index 5029cc365..1a891039e 100644 --- a/entc/integration/json/ent/user/where.go +++ b/entc/integration/json/ent/user/where.go @@ -224,9 +224,11 @@ func StringsNotNil() predicate.User { func And(predicates ...predicate.User) predicate.User { return predicate.User( func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for _, p := range predicates { - p(s) + p(s1) } + s.Where(s1.P()) }, ) } @@ -235,12 +237,14 @@ func And(predicates ...predicate.User) predicate.User { func Or(predicates ...predicate.User) predicate.User { return predicate.User( func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for i, p := range predicates { if i > 0 { - s.Or() + s1.Or() } - p(s) + p(s1) } + s.Where(s1.P()) }, ) } diff --git a/entc/integration/migrate/entv1/user/where.go b/entc/integration/migrate/entv1/user/where.go index ddd776af0..818520c1c 100644 --- a/entc/integration/migrate/entv1/user/where.go +++ b/entc/integration/migrate/entv1/user/where.go @@ -884,9 +884,11 @@ func StateNotNil() predicate.User { func And(predicates ...predicate.User) predicate.User { return predicate.User( func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for _, p := range predicates { - p(s) + p(s1) } + s.Where(s1.P()) }, ) } @@ -895,12 +897,14 @@ func And(predicates ...predicate.User) predicate.User { func Or(predicates ...predicate.User) predicate.User { return predicate.User( func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for i, p := range predicates { if i > 0 { - s.Or() + s1.Or() } - p(s) + p(s1) } + s.Where(s1.P()) }, ) } diff --git a/entc/integration/migrate/entv2/group/where.go b/entc/integration/migrate/entv2/group/where.go index 8bbd9ebf5..57592e5ff 100644 --- a/entc/integration/migrate/entv2/group/where.go +++ b/entc/integration/migrate/entv2/group/where.go @@ -116,9 +116,11 @@ func IDLTE(id int) predicate.Group { func And(predicates ...predicate.Group) predicate.Group { return predicate.Group( func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for _, p := range predicates { - p(s) + p(s1) } + s.Where(s1.P()) }, ) } @@ -127,12 +129,14 @@ func And(predicates ...predicate.Group) predicate.Group { func Or(predicates ...predicate.Group) predicate.Group { return predicate.Group( func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for i, p := range predicates { if i > 0 { - s.Or() + s1.Or() } - p(s) + p(s1) } + s.Where(s1.P()) }, ) } diff --git a/entc/integration/migrate/entv2/pet/where.go b/entc/integration/migrate/entv2/pet/where.go index 2a60fdda6..640ba2603 100644 --- a/entc/integration/migrate/entv2/pet/where.go +++ b/entc/integration/migrate/entv2/pet/where.go @@ -116,9 +116,11 @@ func IDLTE(id int) predicate.Pet { func And(predicates ...predicate.Pet) predicate.Pet { return predicate.Pet( func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for _, p := range predicates { - p(s) + p(s1) } + s.Where(s1.P()) }, ) } @@ -127,12 +129,14 @@ func And(predicates ...predicate.Pet) predicate.Pet { func Or(predicates ...predicate.Pet) predicate.Pet { return predicate.Pet( func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for i, p := range predicates { if i > 0 { - s.Or() + s1.Or() } - p(s) + p(s1) } + s.Where(s1.P()) }, ) } diff --git a/entc/integration/migrate/entv2/user/where.go b/entc/integration/migrate/entv2/user/where.go index b9d3369ac..06787c05e 100644 --- a/entc/integration/migrate/entv2/user/where.go +++ b/entc/integration/migrate/entv2/user/where.go @@ -1131,9 +1131,11 @@ func StateNotNil() predicate.User { func And(predicates ...predicate.User) predicate.User { return predicate.User( func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for _, p := range predicates { - p(s) + p(s1) } + s.Where(s1.P()) }, ) } @@ -1142,12 +1144,14 @@ func And(predicates ...predicate.User) predicate.User { func Or(predicates ...predicate.User) predicate.User { return predicate.User( func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for i, p := range predicates { if i > 0 { - s.Or() + s1.Or() } - p(s) + p(s1) } + s.Where(s1.P()) }, ) } diff --git a/entc/integration/template/ent/group/where.go b/entc/integration/template/ent/group/where.go index 5f708cdc2..97cbed205 100644 --- a/entc/integration/template/ent/group/where.go +++ b/entc/integration/template/ent/group/where.go @@ -217,9 +217,11 @@ func MaxUsersLTE(v int) predicate.Group { func And(predicates ...predicate.Group) predicate.Group { return predicate.Group( func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for _, p := range predicates { - p(s) + p(s1) } + s.Where(s1.P()) }, ) } @@ -228,12 +230,14 @@ func And(predicates ...predicate.Group) predicate.Group { func Or(predicates ...predicate.Group) predicate.Group { return predicate.Group( func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for i, p := range predicates { if i > 0 { - s.Or() + s1.Or() } - p(s) + p(s1) } + s.Where(s1.P()) }, ) } diff --git a/entc/integration/template/ent/pet/where.go b/entc/integration/template/ent/pet/where.go index 1bd87bb8a..4a21a9d7c 100644 --- a/entc/integration/template/ent/pet/where.go +++ b/entc/integration/template/ent/pet/where.go @@ -363,9 +363,11 @@ func HasOwnerWith(preds ...predicate.User) predicate.Pet { func And(predicates ...predicate.Pet) predicate.Pet { return predicate.Pet( func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for _, p := range predicates { - p(s) + p(s1) } + s.Where(s1.P()) }, ) } @@ -374,12 +376,14 @@ func And(predicates ...predicate.Pet) predicate.Pet { func Or(predicates ...predicate.Pet) predicate.Pet { return predicate.Pet( func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for i, p := range predicates { if i > 0 { - s.Or() + s1.Or() } - p(s) + p(s1) } + s.Where(s1.P()) }, ) } diff --git a/entc/integration/template/ent/user/where.go b/entc/integration/template/ent/user/where.go index e68b132fb..1f1504b29 100644 --- a/entc/integration/template/ent/user/where.go +++ b/entc/integration/template/ent/user/where.go @@ -334,9 +334,11 @@ func HasFriendsWith(preds ...predicate.User) predicate.User { func And(predicates ...predicate.User) predicate.User { return predicate.User( func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for _, p := range predicates { - p(s) + p(s1) } + s.Where(s1.P()) }, ) } @@ -345,12 +347,14 @@ func And(predicates ...predicate.User) predicate.User { func Or(predicates ...predicate.User) predicate.User { return predicate.User( func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for i, p := range predicates { if i > 0 { - s.Or() + s1.Or() } - p(s) + p(s1) } + s.Where(s1.P()) }, ) } diff --git a/examples/edgeindex/ent/city/where.go b/examples/edgeindex/ent/city/where.go index 7ece969f1..2fb00f007 100644 --- a/examples/edgeindex/ent/city/where.go +++ b/examples/edgeindex/ent/city/where.go @@ -295,9 +295,11 @@ func HasStreetsWith(preds ...predicate.Street) predicate.City { func And(predicates ...predicate.City) predicate.City { return predicate.City( func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for _, p := range predicates { - p(s) + p(s1) } + s.Where(s1.P()) }, ) } @@ -306,12 +308,14 @@ func And(predicates ...predicate.City) predicate.City { func Or(predicates ...predicate.City) predicate.City { return predicate.City( func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for i, p := range predicates { if i > 0 { - s.Or() + s1.Or() } - p(s) + p(s1) } + s.Where(s1.P()) }, ) } diff --git a/examples/edgeindex/ent/street/where.go b/examples/edgeindex/ent/street/where.go index 5414b85bd..f244794ad 100644 --- a/examples/edgeindex/ent/street/where.go +++ b/examples/edgeindex/ent/street/where.go @@ -287,9 +287,11 @@ func HasCityWith(preds ...predicate.City) predicate.Street { func And(predicates ...predicate.Street) predicate.Street { return predicate.Street( func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for _, p := range predicates { - p(s) + p(s1) } + s.Where(s1.P()) }, ) } @@ -298,12 +300,14 @@ func And(predicates ...predicate.Street) predicate.Street { func Or(predicates ...predicate.Street) predicate.Street { return predicate.Street( func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for i, p := range predicates { if i > 0 { - s.Or() + s1.Or() } - p(s) + p(s1) } + s.Where(s1.P()) }, ) } diff --git a/examples/entcpkg/ent/user/where.go b/examples/entcpkg/ent/user/where.go index 6d8189666..38dc36123 100644 --- a/examples/entcpkg/ent/user/where.go +++ b/examples/entcpkg/ent/user/where.go @@ -116,9 +116,11 @@ func IDLTE(id int) predicate.User { func And(predicates ...predicate.User) predicate.User { return predicate.User( func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for _, p := range predicates { - p(s) + p(s1) } + s.Where(s1.P()) }, ) } @@ -127,12 +129,14 @@ func And(predicates ...predicate.User) predicate.User { func Or(predicates ...predicate.User) predicate.User { return predicate.User( func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for i, p := range predicates { if i > 0 { - s.Or() + s1.Or() } - p(s) + p(s1) } + s.Where(s1.P()) }, ) } diff --git a/examples/m2m2types/ent/group/where.go b/examples/m2m2types/ent/group/where.go index 7caa9d7c3..4ada30074 100644 --- a/examples/m2m2types/ent/group/where.go +++ b/examples/m2m2types/ent/group/where.go @@ -301,9 +301,11 @@ func HasUsersWith(preds ...predicate.User) predicate.Group { func And(predicates ...predicate.Group) predicate.Group { return predicate.Group( func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for _, p := range predicates { - p(s) + p(s1) } + s.Where(s1.P()) }, ) } @@ -312,12 +314,14 @@ func And(predicates ...predicate.Group) predicate.Group { func Or(predicates ...predicate.Group) predicate.Group { return predicate.Group( func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for i, p := range predicates { if i > 0 { - s.Or() + s1.Or() } - p(s) + p(s1) } + s.Where(s1.P()) }, ) } diff --git a/examples/m2m2types/ent/user/where.go b/examples/m2m2types/ent/user/where.go index 6ceb120ae..95d83e41e 100644 --- a/examples/m2m2types/ent/user/where.go +++ b/examples/m2m2types/ent/user/where.go @@ -402,9 +402,11 @@ func HasGroupsWith(preds ...predicate.Group) predicate.User { func And(predicates ...predicate.User) predicate.User { return predicate.User( func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for _, p := range predicates { - p(s) + p(s1) } + s.Where(s1.P()) }, ) } @@ -413,12 +415,14 @@ func And(predicates ...predicate.User) predicate.User { func Or(predicates ...predicate.User) predicate.User { return predicate.User( func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for i, p := range predicates { if i > 0 { - s.Or() + s1.Or() } - p(s) + p(s1) } + s.Where(s1.P()) }, ) } diff --git a/examples/m2mbidi/ent/user/where.go b/examples/m2mbidi/ent/user/where.go index c83d07c39..b03843045 100644 --- a/examples/m2mbidi/ent/user/where.go +++ b/examples/m2mbidi/ent/user/where.go @@ -402,9 +402,11 @@ func HasFriendsWith(preds ...predicate.User) predicate.User { func And(predicates ...predicate.User) predicate.User { return predicate.User( func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for _, p := range predicates { - p(s) + p(s1) } + s.Where(s1.P()) }, ) } @@ -413,12 +415,14 @@ func And(predicates ...predicate.User) predicate.User { func Or(predicates ...predicate.User) predicate.User { return predicate.User( func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for i, p := range predicates { if i > 0 { - s.Or() + s1.Or() } - p(s) + p(s1) } + s.Where(s1.P()) }, ) } diff --git a/examples/m2mrecur/ent/user/where.go b/examples/m2mrecur/ent/user/where.go index 7a19fc9be..2bcf560aa 100644 --- a/examples/m2mrecur/ent/user/where.go +++ b/examples/m2mrecur/ent/user/where.go @@ -441,9 +441,11 @@ func HasFollowingWith(preds ...predicate.User) predicate.User { func And(predicates ...predicate.User) predicate.User { return predicate.User( func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for _, p := range predicates { - p(s) + p(s1) } + s.Where(s1.P()) }, ) } @@ -452,12 +454,14 @@ func And(predicates ...predicate.User) predicate.User { func Or(predicates ...predicate.User) predicate.User { return predicate.User( func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for i, p := range predicates { if i > 0 { - s.Or() + s1.Or() } - p(s) + p(s1) } + s.Where(s1.P()) }, ) } diff --git a/examples/o2m2types/ent/pet/where.go b/examples/o2m2types/ent/pet/where.go index 92325e0fe..3ac267a4d 100644 --- a/examples/o2m2types/ent/pet/where.go +++ b/examples/o2m2types/ent/pet/where.go @@ -287,9 +287,11 @@ func HasOwnerWith(preds ...predicate.User) predicate.Pet { func And(predicates ...predicate.Pet) predicate.Pet { return predicate.Pet( func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for _, p := range predicates { - p(s) + p(s1) } + s.Where(s1.P()) }, ) } @@ -298,12 +300,14 @@ func And(predicates ...predicate.Pet) predicate.Pet { func Or(predicates ...predicate.Pet) predicate.Pet { return predicate.Pet( func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for i, p := range predicates { if i > 0 { - s.Or() + s1.Or() } - p(s) + p(s1) } + s.Where(s1.P()) }, ) } diff --git a/examples/o2m2types/ent/user/where.go b/examples/o2m2types/ent/user/where.go index 2cd8ff6ac..36f4ea661 100644 --- a/examples/o2m2types/ent/user/where.go +++ b/examples/o2m2types/ent/user/where.go @@ -396,9 +396,11 @@ func HasPetsWith(preds ...predicate.Pet) predicate.User { func And(predicates ...predicate.User) predicate.User { return predicate.User( func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for _, p := range predicates { - p(s) + p(s1) } + s.Where(s1.P()) }, ) } @@ -407,12 +409,14 @@ func And(predicates ...predicate.User) predicate.User { func Or(predicates ...predicate.User) predicate.User { return predicate.User( func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for i, p := range predicates { if i > 0 { - s.Or() + s1.Or() } - p(s) + p(s1) } + s.Where(s1.P()) }, ) } diff --git a/examples/o2mrecur/ent/node/where.go b/examples/o2mrecur/ent/node/where.go index 3494f4d88..3294fb997 100644 --- a/examples/o2mrecur/ent/node/where.go +++ b/examples/o2mrecur/ent/node/where.go @@ -275,9 +275,11 @@ func HasChildrenWith(preds ...predicate.Node) predicate.Node { func And(predicates ...predicate.Node) predicate.Node { return predicate.Node( func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for _, p := range predicates { - p(s) + p(s1) } + s.Where(s1.P()) }, ) } @@ -286,12 +288,14 @@ func And(predicates ...predicate.Node) predicate.Node { func Or(predicates ...predicate.Node) predicate.Node { return predicate.Node( func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for i, p := range predicates { if i > 0 { - s.Or() + s1.Or() } - p(s) + p(s1) } + s.Where(s1.P()) }, ) } diff --git a/examples/o2o2types/ent/card/where.go b/examples/o2o2types/ent/card/where.go index 99ec9e085..e97be4d61 100644 --- a/examples/o2o2types/ent/card/where.go +++ b/examples/o2o2types/ent/card/where.go @@ -390,9 +390,11 @@ func HasOwnerWith(preds ...predicate.User) predicate.Card { func And(predicates ...predicate.Card) predicate.Card { return predicate.Card( func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for _, p := range predicates { - p(s) + p(s1) } + s.Where(s1.P()) }, ) } @@ -401,12 +403,14 @@ func And(predicates ...predicate.Card) predicate.Card { func Or(predicates ...predicate.Card) predicate.Card { return predicate.Card( func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for i, p := range predicates { if i > 0 { - s.Or() + s1.Or() } - p(s) + p(s1) } + s.Where(s1.P()) }, ) } diff --git a/examples/o2o2types/ent/user/where.go b/examples/o2o2types/ent/user/where.go index f20c42daa..2366b8e92 100644 --- a/examples/o2o2types/ent/user/where.go +++ b/examples/o2o2types/ent/user/where.go @@ -396,9 +396,11 @@ func HasCardWith(preds ...predicate.Card) predicate.User { func And(predicates ...predicate.User) predicate.User { return predicate.User( func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for _, p := range predicates { - p(s) + p(s1) } + s.Where(s1.P()) }, ) } @@ -407,12 +409,14 @@ func And(predicates ...predicate.User) predicate.User { func Or(predicates ...predicate.User) predicate.User { return predicate.User( func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for i, p := range predicates { if i > 0 { - s.Or() + s1.Or() } - p(s) + p(s1) } + s.Where(s1.P()) }, ) } diff --git a/examples/o2obidi/ent/user/where.go b/examples/o2obidi/ent/user/where.go index 4a06e0919..876c73c71 100644 --- a/examples/o2obidi/ent/user/where.go +++ b/examples/o2obidi/ent/user/where.go @@ -396,9 +396,11 @@ func HasSpouseWith(preds ...predicate.User) predicate.User { func And(predicates ...predicate.User) predicate.User { return predicate.User( func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for _, p := range predicates { - p(s) + p(s1) } + s.Where(s1.P()) }, ) } @@ -407,12 +409,14 @@ func And(predicates ...predicate.User) predicate.User { func Or(predicates ...predicate.User) predicate.User { return predicate.User( func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for i, p := range predicates { if i > 0 { - s.Or() + s1.Or() } - p(s) + p(s1) } + s.Where(s1.P()) }, ) } diff --git a/examples/o2orecur/ent/node/where.go b/examples/o2orecur/ent/node/where.go index ec372f164..6ef6b490e 100644 --- a/examples/o2orecur/ent/node/where.go +++ b/examples/o2orecur/ent/node/where.go @@ -275,9 +275,11 @@ func HasNextWith(preds ...predicate.Node) predicate.Node { func And(predicates ...predicate.Node) predicate.Node { return predicate.Node( func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for _, p := range predicates { - p(s) + p(s1) } + s.Where(s1.P()) }, ) } @@ -286,12 +288,14 @@ func And(predicates ...predicate.Node) predicate.Node { func Or(predicates ...predicate.Node) predicate.Node { return predicate.Node( func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for i, p := range predicates { if i > 0 { - s.Or() + s1.Or() } - p(s) + p(s1) } + s.Where(s1.P()) }, ) } diff --git a/examples/start/ent/car/where.go b/examples/start/ent/car/where.go index 12c0ab2b0..e71a48102 100644 --- a/examples/start/ent/car/where.go +++ b/examples/start/ent/car/where.go @@ -390,9 +390,11 @@ func HasOwnerWith(preds ...predicate.User) predicate.Car { func And(predicates ...predicate.Car) predicate.Car { return predicate.Car( func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for _, p := range predicates { - p(s) + p(s1) } + s.Where(s1.P()) }, ) } @@ -401,12 +403,14 @@ func And(predicates ...predicate.Car) predicate.Car { func Or(predicates ...predicate.Car) predicate.Car { return predicate.Car( func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for i, p := range predicates { if i > 0 { - s.Or() + s1.Or() } - p(s) + p(s1) } + s.Where(s1.P()) }, ) } diff --git a/examples/start/ent/group/where.go b/examples/start/ent/group/where.go index ad64201a4..ba9bf14ac 100644 --- a/examples/start/ent/group/where.go +++ b/examples/start/ent/group/where.go @@ -301,9 +301,11 @@ func HasUsersWith(preds ...predicate.User) predicate.Group { func And(predicates ...predicate.Group) predicate.Group { return predicate.Group( func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for _, p := range predicates { - p(s) + p(s1) } + s.Where(s1.P()) }, ) } @@ -312,12 +314,14 @@ func And(predicates ...predicate.Group) predicate.Group { func Or(predicates ...predicate.Group) predicate.Group { return predicate.Group( func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for i, p := range predicates { if i > 0 { - s.Or() + s1.Or() } - p(s) + p(s1) } + s.Where(s1.P()) }, ) } diff --git a/examples/start/ent/user/where.go b/examples/start/ent/user/where.go index 2c4cc03c3..b3f121eb1 100644 --- a/examples/start/ent/user/where.go +++ b/examples/start/ent/user/where.go @@ -435,9 +435,11 @@ func HasGroupsWith(preds ...predicate.Group) predicate.User { func And(predicates ...predicate.User) predicate.User { return predicate.User( func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for _, p := range predicates { - p(s) + p(s1) } + s.Where(s1.P()) }, ) } @@ -446,12 +448,14 @@ func And(predicates ...predicate.User) predicate.User { func Or(predicates ...predicate.User) predicate.User { return predicate.User( func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for i, p := range predicates { if i > 0 { - s.Or() + s1.Or() } - p(s) + p(s1) } + s.Where(s1.P()) }, ) } diff --git a/examples/traversal/ent/group/where.go b/examples/traversal/ent/group/where.go index 769741f3c..94e7cef14 100644 --- a/examples/traversal/ent/group/where.go +++ b/examples/traversal/ent/group/where.go @@ -326,9 +326,11 @@ func HasAdminWith(preds ...predicate.User) predicate.Group { func And(predicates ...predicate.Group) predicate.Group { return predicate.Group( func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for _, p := range predicates { - p(s) + p(s1) } + s.Where(s1.P()) }, ) } @@ -337,12 +339,14 @@ func And(predicates ...predicate.Group) predicate.Group { func Or(predicates ...predicate.Group) predicate.Group { return predicate.Group( func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for i, p := range predicates { if i > 0 { - s.Or() + s1.Or() } - p(s) + p(s1) } + s.Where(s1.P()) }, ) } diff --git a/examples/traversal/ent/pet/where.go b/examples/traversal/ent/pet/where.go index e4aa73dd4..cfba7ebb2 100644 --- a/examples/traversal/ent/pet/where.go +++ b/examples/traversal/ent/pet/where.go @@ -326,9 +326,11 @@ func HasOwnerWith(preds ...predicate.User) predicate.Pet { func And(predicates ...predicate.Pet) predicate.Pet { return predicate.Pet( func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for _, p := range predicates { - p(s) + p(s1) } + s.Where(s1.P()) }, ) } @@ -337,12 +339,14 @@ func And(predicates ...predicate.Pet) predicate.Pet { func Or(predicates ...predicate.Pet) predicate.Pet { return predicate.Pet( func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for i, p := range predicates { if i > 0 { - s.Or() + s1.Or() } - p(s) + p(s1) } + s.Where(s1.P()) }, ) } diff --git a/examples/traversal/ent/user/where.go b/examples/traversal/ent/user/where.go index ef8a9ba06..d4dc31fd1 100644 --- a/examples/traversal/ent/user/where.go +++ b/examples/traversal/ent/user/where.go @@ -507,9 +507,11 @@ func HasManageWith(preds ...predicate.Group) predicate.User { func And(predicates ...predicate.User) predicate.User { return predicate.User( func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for _, p := range predicates { - p(s) + p(s1) } + s.Where(s1.P()) }, ) } @@ -518,12 +520,14 @@ func And(predicates ...predicate.User) predicate.User { func Or(predicates ...predicate.User) predicate.User { return predicate.User( func(s *sql.Selector) { + s1 := s.Clone().SetP(nil) for i, p := range predicates { if i > 0 { - s.Or() + s1.Or() } - p(s) + p(s1) } + s.Where(s1.P()) }, ) }