dialect/sql: support passing selectors to basic predicates

Closed https://github.com/ent/ent/issues/2236
This commit is contained in:
Ariel Mashraki
2021-12-25 14:49:53 +02:00
committed by Ariel Mashraki
parent d9cdec1094
commit deb63d0292
2 changed files with 43 additions and 6 deletions

View File

@@ -411,6 +411,31 @@ func TestBuilder(t *testing.T) {
wantQuery: "UPDATE `users` SET `name` = ?, `age` = ? WHERE `name` = ?",
wantArgs: []interface{}{"foo", 10, "foo"},
},
{
input: Dialect(dialect.Postgres).
Update("users").
Add("rank", 10).
Where(
Or(
EQ("rank", Select("rank").From(Table("ranks")).Where(EQ("name", "foo"))),
GT("score", Select("score").From(Table("scores")).Where(GT("count", 0))),
),
),
wantQuery: `UPDATE "users" SET "rank" = COALESCE("users"."rank", 0) + $1 WHERE "rank" = (SELECT "rank" FROM "ranks" WHERE "name" = $2) OR "score" > (SELECT "score" FROM "scores" WHERE "count" > $3)`,
wantArgs: []interface{}{10, "foo", 0},
},
{
input: Update("users").
Add("rank", 10).
Where(
Or(
EQ("rank", Select("rank").From(Table("ranks")).Where(EQ("name", "foo"))),
GT("score", Select("score").From(Table("scores")).Where(GT("count", 0))),
),
),
wantQuery: "UPDATE `users` SET `rank` = COALESCE(`users`.`rank`, 0) + ? WHERE `rank` = (SELECT `rank` FROM `ranks` WHERE `name` = ?) OR `score` > (SELECT `score` FROM `scores` WHERE `count` > ?)",
wantArgs: []interface{}{10, "foo", 0},
},
{
input: Dialect(dialect.Postgres).
Update("users").