Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 50 additions & 0 deletions internal/dbtest/query_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1945,6 +1945,56 @@ func TestQuery(t *testing.T) {
}))
},
},
{
id: 205,
query: func(db *bun.DB) schema.QueryAppender {
return db.NewSelect().Model(new(SoftDelete1)).
Where("id = 1").
WhereOr("id = 2")
},
},
{
id: 206,
query: func(db *bun.DB) schema.QueryAppender {
return db.NewSelect().Model(new(SoftDelete1)).
WhereOr("id = 1").
WhereOr("id = 2")
},
},
{
id: 207,
query: func(db *bun.DB) schema.QueryAppender {
return db.NewSelect().Model(new(SoftDelete1)).
Where("id = 1").
WhereOr("id = 2").
WhereDeleted()
},
},
{
id: 208,
query: func(db *bun.DB) schema.QueryAppender {
return db.NewSelect().Model(new(SoftDelete1)).
Where("id = 1").
Where("id = 2")
},
},
{
id: 209,
query: func(db *bun.DB) schema.QueryAppender {
return db.NewDelete().Model(new(SoftDelete1)).
Where("id = 1").
WhereOr("id = 2")
},
},
{
id: 210,
query: func(db *bun.DB) schema.QueryAppender {
return db.NewUpdate().Model(new(SoftDelete1)).
Set("id = id").
Where("id = 1").
WhereOr("id = 2")
},
},
}

timeRE := regexp.MustCompile(`'2\d{3}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}(\.\d+)?(\+\d{2}:\d{2})?'`)
Expand Down
2 changes: 1 addition & 1 deletion internal/dbtest/testdata/snapshots/TestQuery-mariadb-118
Original file line number Diff line number Diff line change
@@ -1 +1 @@
UPDATE `soft_deletes` AS `soft_delete` SET `deleted_at` = DEFAULT WHERE ((a = 1) AND (b = 1)) OR ((a = 2) AND (b = 2)) AND `soft_delete`.`deleted_at` IS NULL AND (`soft_delete`.`id` = NULL)
UPDATE `soft_deletes` AS `soft_delete` SET `deleted_at` = DEFAULT WHERE (((a = 1) AND (b = 1)) OR ((a = 2) AND (b = 2))) AND `soft_delete`.`deleted_at` IS NULL AND (`soft_delete`.`id` = NULL)
2 changes: 1 addition & 1 deletion internal/dbtest/testdata/snapshots/TestQuery-mariadb-124
Original file line number Diff line number Diff line change
@@ -1 +1 @@
UPDATE `soft_deletes` AS `soft_delete` SET `soft_delete`.`deleted_at` = [TIME] WHERE ((a = 1) AND (b = 1)) OR ((a = 2) AND (b = 2)) AND `soft_delete`.`deleted_at` IS NULL AND (`soft_delete`.`id` = NULL)
UPDATE `soft_deletes` AS `soft_delete` SET `soft_delete`.`deleted_at` = [TIME] WHERE (((a = 1) AND (b = 1)) OR ((a = 2) AND (b = 2))) AND `soft_delete`.`deleted_at` IS NULL AND (`soft_delete`.`id` = NULL)
1 change: 1 addition & 0 deletions internal/dbtest/testdata/snapshots/TestQuery-mariadb-205
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
SELECT `soft_delete`.`id`, `soft_delete`.`deleted_at` FROM `soft_deletes` AS `soft_delete` WHERE ((id = 1) OR (id = 2)) AND `soft_delete`.`deleted_at` IS NULL
1 change: 1 addition & 0 deletions internal/dbtest/testdata/snapshots/TestQuery-mariadb-206
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
SELECT `soft_delete`.`id`, `soft_delete`.`deleted_at` FROM `soft_deletes` AS `soft_delete` WHERE ((id = 1) OR (id = 2)) AND `soft_delete`.`deleted_at` IS NULL
1 change: 1 addition & 0 deletions internal/dbtest/testdata/snapshots/TestQuery-mariadb-207
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
SELECT `soft_delete`.`id`, `soft_delete`.`deleted_at` FROM `soft_deletes` AS `soft_delete` WHERE ((id = 1) OR (id = 2)) AND `soft_delete`.`deleted_at` IS NOT NULL
1 change: 1 addition & 0 deletions internal/dbtest/testdata/snapshots/TestQuery-mariadb-208
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
SELECT `soft_delete`.`id`, `soft_delete`.`deleted_at` FROM `soft_deletes` AS `soft_delete` WHERE (id = 1) AND (id = 2) AND `soft_delete`.`deleted_at` IS NULL
1 change: 1 addition & 0 deletions internal/dbtest/testdata/snapshots/TestQuery-mariadb-209
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
UPDATE `soft_deletes` AS `soft_delete` SET `soft_delete`.`deleted_at` = [TIME] WHERE ((id = 1) OR (id = 2)) AND `soft_delete`.`deleted_at` IS NULL
1 change: 1 addition & 0 deletions internal/dbtest/testdata/snapshots/TestQuery-mariadb-210
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
UPDATE `soft_deletes` AS `soft_delete` SET id = id WHERE ((id = 1) OR (id = 2)) AND `soft_delete`.`deleted_at` IS NULL
2 changes: 1 addition & 1 deletion internal/dbtest/testdata/snapshots/TestQuery-mssql2019-118
Original file line number Diff line number Diff line change
@@ -1 +1 @@
UPDATE "soft_deletes" SET "deleted_at" = DEFAULT WHERE ((a = 1) AND (b = 1)) OR ((a = 2) AND (b = 2)) AND "soft_deletes"."deleted_at" IS NULL AND ("id" = NULL)
UPDATE "soft_deletes" SET "deleted_at" = DEFAULT WHERE (((a = 1) AND (b = 1)) OR ((a = 2) AND (b = 2))) AND "soft_deletes"."deleted_at" IS NULL AND ("id" = NULL)
2 changes: 1 addition & 1 deletion internal/dbtest/testdata/snapshots/TestQuery-mssql2019-124
Original file line number Diff line number Diff line change
@@ -1 +1 @@
UPDATE "soft_deletes" SET "deleted_at" = [TIME] WHERE ((a = 1) AND (b = 1)) OR ((a = 2) AND (b = 2)) AND "soft_deletes"."deleted_at" IS NULL AND ("id" = NULL)
UPDATE "soft_deletes" SET "deleted_at" = [TIME] WHERE (((a = 1) AND (b = 1)) OR ((a = 2) AND (b = 2))) AND "soft_deletes"."deleted_at" IS NULL AND ("id" = NULL)
1 change: 1 addition & 0 deletions internal/dbtest/testdata/snapshots/TestQuery-mssql2019-205
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
SELECT "soft_delete"."id", "soft_delete"."deleted_at" FROM "soft_deletes" AS "soft_delete" WHERE ((id = 1) OR (id = 2)) AND "soft_delete"."deleted_at" IS NULL
1 change: 1 addition & 0 deletions internal/dbtest/testdata/snapshots/TestQuery-mssql2019-206
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
SELECT "soft_delete"."id", "soft_delete"."deleted_at" FROM "soft_deletes" AS "soft_delete" WHERE ((id = 1) OR (id = 2)) AND "soft_delete"."deleted_at" IS NULL
1 change: 1 addition & 0 deletions internal/dbtest/testdata/snapshots/TestQuery-mssql2019-207
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
SELECT "soft_delete"."id", "soft_delete"."deleted_at" FROM "soft_deletes" AS "soft_delete" WHERE ((id = 1) OR (id = 2)) AND "soft_delete"."deleted_at" IS NOT NULL
1 change: 1 addition & 0 deletions internal/dbtest/testdata/snapshots/TestQuery-mssql2019-208
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
SELECT "soft_delete"."id", "soft_delete"."deleted_at" FROM "soft_deletes" AS "soft_delete" WHERE (id = 1) AND (id = 2) AND "soft_delete"."deleted_at" IS NULL
1 change: 1 addition & 0 deletions internal/dbtest/testdata/snapshots/TestQuery-mssql2019-209
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
UPDATE "soft_deletes" SET "deleted_at" = [TIME] WHERE ((id = 1) OR (id = 2)) AND "soft_deletes"."deleted_at" IS NULL
1 change: 1 addition & 0 deletions internal/dbtest/testdata/snapshots/TestQuery-mssql2019-210
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
UPDATE "soft_deletes" SET id = id WHERE ((id = 1) OR (id = 2)) AND "soft_deletes"."deleted_at" IS NULL
2 changes: 1 addition & 1 deletion internal/dbtest/testdata/snapshots/TestQuery-mysql5-118
Original file line number Diff line number Diff line change
@@ -1 +1 @@
UPDATE `soft_deletes` AS `soft_delete` SET `deleted_at` = DEFAULT WHERE ((a = 1) AND (b = 1)) OR ((a = 2) AND (b = 2)) AND `soft_delete`.`deleted_at` IS NULL AND (`soft_delete`.`id` = NULL)
UPDATE `soft_deletes` AS `soft_delete` SET `deleted_at` = DEFAULT WHERE (((a = 1) AND (b = 1)) OR ((a = 2) AND (b = 2))) AND `soft_delete`.`deleted_at` IS NULL AND (`soft_delete`.`id` = NULL)
2 changes: 1 addition & 1 deletion internal/dbtest/testdata/snapshots/TestQuery-mysql5-124
Original file line number Diff line number Diff line change
@@ -1 +1 @@
UPDATE `soft_deletes` AS `soft_delete` SET `soft_delete`.`deleted_at` = [TIME] WHERE ((a = 1) AND (b = 1)) OR ((a = 2) AND (b = 2)) AND `soft_delete`.`deleted_at` IS NULL AND (`soft_delete`.`id` = NULL)
UPDATE `soft_deletes` AS `soft_delete` SET `soft_delete`.`deleted_at` = [TIME] WHERE (((a = 1) AND (b = 1)) OR ((a = 2) AND (b = 2))) AND `soft_delete`.`deleted_at` IS NULL AND (`soft_delete`.`id` = NULL)
1 change: 1 addition & 0 deletions internal/dbtest/testdata/snapshots/TestQuery-mysql5-205
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
SELECT `soft_delete`.`id`, `soft_delete`.`deleted_at` FROM `soft_deletes` AS `soft_delete` WHERE ((id = 1) OR (id = 2)) AND `soft_delete`.`deleted_at` IS NULL
1 change: 1 addition & 0 deletions internal/dbtest/testdata/snapshots/TestQuery-mysql5-206
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
SELECT `soft_delete`.`id`, `soft_delete`.`deleted_at` FROM `soft_deletes` AS `soft_delete` WHERE ((id = 1) OR (id = 2)) AND `soft_delete`.`deleted_at` IS NULL
1 change: 1 addition & 0 deletions internal/dbtest/testdata/snapshots/TestQuery-mysql5-207
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
SELECT `soft_delete`.`id`, `soft_delete`.`deleted_at` FROM `soft_deletes` AS `soft_delete` WHERE ((id = 1) OR (id = 2)) AND `soft_delete`.`deleted_at` IS NOT NULL
1 change: 1 addition & 0 deletions internal/dbtest/testdata/snapshots/TestQuery-mysql5-208
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
SELECT `soft_delete`.`id`, `soft_delete`.`deleted_at` FROM `soft_deletes` AS `soft_delete` WHERE (id = 1) AND (id = 2) AND `soft_delete`.`deleted_at` IS NULL
1 change: 1 addition & 0 deletions internal/dbtest/testdata/snapshots/TestQuery-mysql5-209
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
UPDATE `soft_deletes` AS `soft_delete` SET `soft_delete`.`deleted_at` = [TIME] WHERE ((id = 1) OR (id = 2)) AND `soft_delete`.`deleted_at` IS NULL
1 change: 1 addition & 0 deletions internal/dbtest/testdata/snapshots/TestQuery-mysql5-210
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
UPDATE `soft_deletes` AS `soft_delete` SET id = id WHERE ((id = 1) OR (id = 2)) AND `soft_delete`.`deleted_at` IS NULL
2 changes: 1 addition & 1 deletion internal/dbtest/testdata/snapshots/TestQuery-mysql8-118
Original file line number Diff line number Diff line change
@@ -1 +1 @@
UPDATE `soft_deletes` AS `soft_delete` SET `deleted_at` = DEFAULT WHERE ((a = 1) AND (b = 1)) OR ((a = 2) AND (b = 2)) AND `soft_delete`.`deleted_at` IS NULL AND (`soft_delete`.`id` = NULL)
UPDATE `soft_deletes` AS `soft_delete` SET `deleted_at` = DEFAULT WHERE (((a = 1) AND (b = 1)) OR ((a = 2) AND (b = 2))) AND `soft_delete`.`deleted_at` IS NULL AND (`soft_delete`.`id` = NULL)
2 changes: 1 addition & 1 deletion internal/dbtest/testdata/snapshots/TestQuery-mysql8-124
Original file line number Diff line number Diff line change
@@ -1 +1 @@
UPDATE `soft_deletes` AS `soft_delete` SET `soft_delete`.`deleted_at` = [TIME] WHERE ((a = 1) AND (b = 1)) OR ((a = 2) AND (b = 2)) AND `soft_delete`.`deleted_at` IS NULL AND (`soft_delete`.`id` = NULL)
UPDATE `soft_deletes` AS `soft_delete` SET `soft_delete`.`deleted_at` = [TIME] WHERE (((a = 1) AND (b = 1)) OR ((a = 2) AND (b = 2))) AND `soft_delete`.`deleted_at` IS NULL AND (`soft_delete`.`id` = NULL)
1 change: 1 addition & 0 deletions internal/dbtest/testdata/snapshots/TestQuery-mysql8-205
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
SELECT `soft_delete`.`id`, `soft_delete`.`deleted_at` FROM `soft_deletes` AS `soft_delete` WHERE ((id = 1) OR (id = 2)) AND `soft_delete`.`deleted_at` IS NULL
1 change: 1 addition & 0 deletions internal/dbtest/testdata/snapshots/TestQuery-mysql8-206
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
SELECT `soft_delete`.`id`, `soft_delete`.`deleted_at` FROM `soft_deletes` AS `soft_delete` WHERE ((id = 1) OR (id = 2)) AND `soft_delete`.`deleted_at` IS NULL
1 change: 1 addition & 0 deletions internal/dbtest/testdata/snapshots/TestQuery-mysql8-207
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
SELECT `soft_delete`.`id`, `soft_delete`.`deleted_at` FROM `soft_deletes` AS `soft_delete` WHERE ((id = 1) OR (id = 2)) AND `soft_delete`.`deleted_at` IS NOT NULL
1 change: 1 addition & 0 deletions internal/dbtest/testdata/snapshots/TestQuery-mysql8-208
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
SELECT `soft_delete`.`id`, `soft_delete`.`deleted_at` FROM `soft_deletes` AS `soft_delete` WHERE (id = 1) AND (id = 2) AND `soft_delete`.`deleted_at` IS NULL
1 change: 1 addition & 0 deletions internal/dbtest/testdata/snapshots/TestQuery-mysql8-209
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
UPDATE `soft_deletes` AS `soft_delete` SET `soft_delete`.`deleted_at` = [TIME] WHERE ((id = 1) OR (id = 2)) AND `soft_delete`.`deleted_at` IS NULL
1 change: 1 addition & 0 deletions internal/dbtest/testdata/snapshots/TestQuery-mysql8-210
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
UPDATE `soft_deletes` AS `soft_delete` SET id = id WHERE ((id = 1) OR (id = 2)) AND `soft_delete`.`deleted_at` IS NULL
2 changes: 1 addition & 1 deletion internal/dbtest/testdata/snapshots/TestQuery-pg-118
Original file line number Diff line number Diff line change
@@ -1 +1 @@
UPDATE "soft_deletes" AS "soft_delete" SET "deleted_at" = DEFAULT WHERE ((a = 1) AND (b = 1)) OR ((a = 2) AND (b = 2)) AND "soft_delete"."deleted_at" IS NULL AND ("soft_delete"."id" = NULL)
UPDATE "soft_deletes" AS "soft_delete" SET "deleted_at" = DEFAULT WHERE (((a = 1) AND (b = 1)) OR ((a = 2) AND (b = 2))) AND "soft_delete"."deleted_at" IS NULL AND ("soft_delete"."id" = NULL)
2 changes: 1 addition & 1 deletion internal/dbtest/testdata/snapshots/TestQuery-pg-124
Original file line number Diff line number Diff line change
@@ -1 +1 @@
UPDATE "soft_deletes" AS "soft_delete" SET "deleted_at" = [TIME] WHERE ((a = 1) AND (b = 1)) OR ((a = 2) AND (b = 2)) AND "soft_delete"."deleted_at" IS NULL AND ("soft_delete"."id" = NULL)
UPDATE "soft_deletes" AS "soft_delete" SET "deleted_at" = [TIME] WHERE (((a = 1) AND (b = 1)) OR ((a = 2) AND (b = 2))) AND "soft_delete"."deleted_at" IS NULL AND ("soft_delete"."id" = NULL)
1 change: 1 addition & 0 deletions internal/dbtest/testdata/snapshots/TestQuery-pg-205
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
SELECT "soft_delete"."id", "soft_delete"."deleted_at" FROM "soft_deletes" AS "soft_delete" WHERE ((id = 1) OR (id = 2)) AND "soft_delete"."deleted_at" IS NULL
1 change: 1 addition & 0 deletions internal/dbtest/testdata/snapshots/TestQuery-pg-206
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
SELECT "soft_delete"."id", "soft_delete"."deleted_at" FROM "soft_deletes" AS "soft_delete" WHERE ((id = 1) OR (id = 2)) AND "soft_delete"."deleted_at" IS NULL
1 change: 1 addition & 0 deletions internal/dbtest/testdata/snapshots/TestQuery-pg-207
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
SELECT "soft_delete"."id", "soft_delete"."deleted_at" FROM "soft_deletes" AS "soft_delete" WHERE ((id = 1) OR (id = 2)) AND "soft_delete"."deleted_at" IS NOT NULL
1 change: 1 addition & 0 deletions internal/dbtest/testdata/snapshots/TestQuery-pg-208
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
SELECT "soft_delete"."id", "soft_delete"."deleted_at" FROM "soft_deletes" AS "soft_delete" WHERE (id = 1) AND (id = 2) AND "soft_delete"."deleted_at" IS NULL
1 change: 1 addition & 0 deletions internal/dbtest/testdata/snapshots/TestQuery-pg-209
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
UPDATE "soft_deletes" AS "soft_delete" SET "deleted_at" = [TIME] WHERE ((id = 1) OR (id = 2)) AND "soft_delete"."deleted_at" IS NULL
1 change: 1 addition & 0 deletions internal/dbtest/testdata/snapshots/TestQuery-pg-210
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
UPDATE "soft_deletes" AS "soft_delete" SET id = id WHERE ((id = 1) OR (id = 2)) AND "soft_delete"."deleted_at" IS NULL
2 changes: 1 addition & 1 deletion internal/dbtest/testdata/snapshots/TestQuery-pgx-118
Original file line number Diff line number Diff line change
@@ -1 +1 @@
UPDATE "soft_deletes" AS "soft_delete" SET "deleted_at" = DEFAULT WHERE ((a = 1) AND (b = 1)) OR ((a = 2) AND (b = 2)) AND "soft_delete"."deleted_at" IS NULL AND ("soft_delete"."id" = NULL)
UPDATE "soft_deletes" AS "soft_delete" SET "deleted_at" = DEFAULT WHERE (((a = 1) AND (b = 1)) OR ((a = 2) AND (b = 2))) AND "soft_delete"."deleted_at" IS NULL AND ("soft_delete"."id" = NULL)
2 changes: 1 addition & 1 deletion internal/dbtest/testdata/snapshots/TestQuery-pgx-124
Original file line number Diff line number Diff line change
@@ -1 +1 @@
UPDATE "soft_deletes" AS "soft_delete" SET "deleted_at" = [TIME] WHERE ((a = 1) AND (b = 1)) OR ((a = 2) AND (b = 2)) AND "soft_delete"."deleted_at" IS NULL AND ("soft_delete"."id" = NULL)
UPDATE "soft_deletes" AS "soft_delete" SET "deleted_at" = [TIME] WHERE (((a = 1) AND (b = 1)) OR ((a = 2) AND (b = 2))) AND "soft_delete"."deleted_at" IS NULL AND ("soft_delete"."id" = NULL)
1 change: 1 addition & 0 deletions internal/dbtest/testdata/snapshots/TestQuery-pgx-205
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
SELECT "soft_delete"."id", "soft_delete"."deleted_at" FROM "soft_deletes" AS "soft_delete" WHERE ((id = 1) OR (id = 2)) AND "soft_delete"."deleted_at" IS NULL
1 change: 1 addition & 0 deletions internal/dbtest/testdata/snapshots/TestQuery-pgx-206
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
SELECT "soft_delete"."id", "soft_delete"."deleted_at" FROM "soft_deletes" AS "soft_delete" WHERE ((id = 1) OR (id = 2)) AND "soft_delete"."deleted_at" IS NULL
1 change: 1 addition & 0 deletions internal/dbtest/testdata/snapshots/TestQuery-pgx-207
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
SELECT "soft_delete"."id", "soft_delete"."deleted_at" FROM "soft_deletes" AS "soft_delete" WHERE ((id = 1) OR (id = 2)) AND "soft_delete"."deleted_at" IS NOT NULL
1 change: 1 addition & 0 deletions internal/dbtest/testdata/snapshots/TestQuery-pgx-208
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
SELECT "soft_delete"."id", "soft_delete"."deleted_at" FROM "soft_deletes" AS "soft_delete" WHERE (id = 1) AND (id = 2) AND "soft_delete"."deleted_at" IS NULL
1 change: 1 addition & 0 deletions internal/dbtest/testdata/snapshots/TestQuery-pgx-209
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
UPDATE "soft_deletes" AS "soft_delete" SET "deleted_at" = [TIME] WHERE ((id = 1) OR (id = 2)) AND "soft_delete"."deleted_at" IS NULL
1 change: 1 addition & 0 deletions internal/dbtest/testdata/snapshots/TestQuery-pgx-210
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
UPDATE "soft_deletes" AS "soft_delete" SET id = id WHERE ((id = 1) OR (id = 2)) AND "soft_delete"."deleted_at" IS NULL
2 changes: 1 addition & 1 deletion internal/dbtest/testdata/snapshots/TestQuery-sqlite-118
Original file line number Diff line number Diff line change
@@ -1 +1 @@
UPDATE "soft_deletes" AS "soft_delete" SET "deleted_at" = NULL WHERE ((a = 1) AND (b = 1)) OR ((a = 2) AND (b = 2)) AND "soft_delete"."deleted_at" IS NULL AND ("soft_delete"."id" = NULL)
UPDATE "soft_deletes" AS "soft_delete" SET "deleted_at" = NULL WHERE (((a = 1) AND (b = 1)) OR ((a = 2) AND (b = 2))) AND "soft_delete"."deleted_at" IS NULL AND ("soft_delete"."id" = NULL)
2 changes: 1 addition & 1 deletion internal/dbtest/testdata/snapshots/TestQuery-sqlite-124
Original file line number Diff line number Diff line change
@@ -1 +1 @@
UPDATE "soft_deletes" AS "soft_delete" SET "deleted_at" = [TIME] WHERE ((a = 1) AND (b = 1)) OR ((a = 2) AND (b = 2)) AND "soft_delete"."deleted_at" IS NULL AND ("soft_delete"."id" = NULL)
UPDATE "soft_deletes" AS "soft_delete" SET "deleted_at" = [TIME] WHERE (((a = 1) AND (b = 1)) OR ((a = 2) AND (b = 2))) AND "soft_delete"."deleted_at" IS NULL AND ("soft_delete"."id" = NULL)
1 change: 1 addition & 0 deletions internal/dbtest/testdata/snapshots/TestQuery-sqlite-205
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
SELECT "soft_delete"."id", "soft_delete"."deleted_at" FROM "soft_deletes" AS "soft_delete" WHERE ((id = 1) OR (id = 2)) AND "soft_delete"."deleted_at" IS NULL
1 change: 1 addition & 0 deletions internal/dbtest/testdata/snapshots/TestQuery-sqlite-206
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
SELECT "soft_delete"."id", "soft_delete"."deleted_at" FROM "soft_deletes" AS "soft_delete" WHERE ((id = 1) OR (id = 2)) AND "soft_delete"."deleted_at" IS NULL
1 change: 1 addition & 0 deletions internal/dbtest/testdata/snapshots/TestQuery-sqlite-207
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
SELECT "soft_delete"."id", "soft_delete"."deleted_at" FROM "soft_deletes" AS "soft_delete" WHERE ((id = 1) OR (id = 2)) AND "soft_delete"."deleted_at" IS NOT NULL
1 change: 1 addition & 0 deletions internal/dbtest/testdata/snapshots/TestQuery-sqlite-208
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
SELECT "soft_delete"."id", "soft_delete"."deleted_at" FROM "soft_deletes" AS "soft_delete" WHERE (id = 1) AND (id = 2) AND "soft_delete"."deleted_at" IS NULL
1 change: 1 addition & 0 deletions internal/dbtest/testdata/snapshots/TestQuery-sqlite-209
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
UPDATE "soft_deletes" AS "soft_delete" SET "deleted_at" = [TIME] WHERE ((id = 1) OR (id = 2)) AND "soft_delete"."deleted_at" IS NULL
1 change: 1 addition & 0 deletions internal/dbtest/testdata/snapshots/TestQuery-sqlite-210
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
UPDATE "soft_deletes" AS "soft_delete" SET id = id WHERE ((id = 1) OR (id = 2)) AND "soft_delete"."deleted_at" IS NULL
12 changes: 12 additions & 0 deletions query_base.go
Original file line number Diff line number Diff line change
Expand Up @@ -772,9 +772,13 @@ type whereBaseQuery struct {

where []schema.QueryWithSep
whereFields []*schema.Field
whereHasOr bool
}

func (q *whereBaseQuery) addWhere(where schema.QueryWithSep) {
if strings.Contains(where.Sep, "OR") {
q.whereHasOr = true
}
q.where = append(q.where, where)
}

Expand Down Expand Up @@ -844,11 +848,19 @@ func (q *whereBaseQuery) appendWhere(
b = append(b, " WHERE "...)
startLen := len(b)

needsExtraCondition := q.isSoftDelete() || q.whereFields != nil
if len(q.where) > 0 {
wrapParens := needsExtraCondition && q.whereHasOr
if wrapParens {
b = append(b, '(')
}
b, err = appendWhere(gen, b, q.where)
if err != nil {
return nil, err
}
if wrapParens {
b = append(b, ')')
}
}

if q.isSoftDelete() {
Expand Down
6 changes: 3 additions & 3 deletions query_delete.go
Original file line number Diff line number Diff line change
Expand Up @@ -109,13 +109,13 @@ func (q *DeleteQuery) WhereOr(query string, args ...any) *DeleteQuery {
}

func (q *DeleteQuery) WhereGroup(sep string, fn func(*DeleteQuery) *DeleteQuery) *DeleteQuery {
saved := q.where
q.where = nil
saved, savedHasOr := q.where, q.whereHasOr
q.where, q.whereHasOr = nil, false

q = fn(q)

where := q.where
q.where = saved
q.where, q.whereHasOr = saved, savedHasOr

q.addWhereGroup(sep, where)

Expand Down
6 changes: 3 additions & 3 deletions query_select.go
Original file line number Diff line number Diff line change
Expand Up @@ -173,13 +173,13 @@ func (q *SelectQuery) WhereOr(query string, args ...any) *SelectQuery {

// WhereGroup groups WHERE conditions with the given separator (AND/OR).
func (q *SelectQuery) WhereGroup(sep string, fn func(*SelectQuery) *SelectQuery) *SelectQuery {
saved := q.where
q.where = nil
saved, savedHasOr := q.where, q.whereHasOr
q.where, q.whereHasOr = nil, false

q = fn(q)

where := q.where
q.where = saved
q.where, q.whereHasOr = saved, savedHasOr

q.addWhereGroup(sep, where)

Expand Down
6 changes: 3 additions & 3 deletions query_update.go
Original file line number Diff line number Diff line change
Expand Up @@ -185,13 +185,13 @@ func (q *UpdateQuery) WhereOr(query string, args ...any) *UpdateQuery {
}

func (q *UpdateQuery) WhereGroup(sep string, fn func(*UpdateQuery) *UpdateQuery) *UpdateQuery {
saved := q.where
q.where = nil
saved, savedHasOr := q.where, q.whereHasOr
q.where, q.whereHasOr = nil, false

q = fn(q)

where := q.where
q.where = saved
q.where, q.whereHasOr = saved, savedHasOr

q.addWhereGroup(sep, where)

Expand Down
Loading