diff options
| author | Stefan Majewsky <majewsky@gmx.net> | 2026-04-23 16:26:22 +0200 |
|---|---|---|
| committer | Stefan Majewsky <majewsky@gmx.net> | 2026-04-23 16:26:22 +0200 |
| commit | 9749eb317d39caa794cc27ef954656167cac487a (patch) | |
| tree | 27e2ca38a755442cf65e087fb5d6f8a0d35e8e1d /plan_test.go | |
| parent | e4c744843e740e74b824c43950b1961736ccb8ad (diff) | |
| download | go-oblast-9749eb317d39caa794cc27ef954656167cac487a.tar.gz | |
add query planning for Upsert()
Diffstat (limited to 'plan_test.go')
| -rw-r--r-- | plan_test.go | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/plan_test.go b/plan_test.go index 772c14a..08c7252 100644 --- a/plan_test.go +++ b/plan_test.go @@ -80,6 +80,9 @@ func TestQueryConstructionBasic(t *testing.T) { assert.Equal(t, plan.Insert.Query, "INSERT INTO `basic_records` (`Description`, `CreatedAt`) VALUES (?, ?)") assert.DeepEqual(t, plan.Insert.ArgumentIndexes, [][]int{{1}, {2}}) assert.DeepEqual(t, plan.Insert.ScanIndexes, [][]int{{0}}) + assert.Equal(t, plan.Upsert.Query, "") + assert.DeepEqual(t, plan.Upsert.ArgumentIndexes, nil) + assert.DeepEqual(t, plan.Upsert.ScanIndexes, nil) assert.Equal(t, plan.Update.Query, "UPDATE `basic_records` SET `Description` = ?, `CreatedAt` = ? WHERE `ID` = ?") assert.DeepEqual(t, plan.Update.ArgumentIndexes, [][]int{{1}, {2}, {0}}) assert.DeepEqual(t, plan.Update.ScanIndexes, nil) @@ -99,6 +102,9 @@ func TestQueryConstructionBasic(t *testing.T) { assert.Equal(t, plan.Insert.Query, `INSERT INTO "basic_records" ("Description", "CreatedAt") VALUES ($1, $2) RETURNING "ID"`) assert.DeepEqual(t, plan.Insert.ArgumentIndexes, [][]int{{1}, {2}}) assert.DeepEqual(t, plan.Insert.ScanIndexes, [][]int{{0}}) + assert.Equal(t, plan.Upsert.Query, "") + assert.DeepEqual(t, plan.Upsert.ArgumentIndexes, nil) + assert.DeepEqual(t, plan.Upsert.ScanIndexes, nil) assert.Equal(t, plan.Update.Query, `UPDATE "basic_records" SET "Description" = $1, "CreatedAt" = $2 WHERE "ID" = $3`) assert.DeepEqual(t, plan.Update.ArgumentIndexes, [][]int{{1}, {2}, {0}}) assert.DeepEqual(t, plan.Update.ScanIndexes, nil) @@ -118,6 +124,9 @@ func TestQueryConstructionBasic(t *testing.T) { assert.Equal(t, plan.Insert.Query, `INSERT INTO "basic_records" ("Description", "CreatedAt") VALUES (?, ?)`) assert.DeepEqual(t, plan.Insert.ArgumentIndexes, [][]int{{1}, {2}}) assert.DeepEqual(t, plan.Insert.ScanIndexes, [][]int{{0}}) + assert.Equal(t, plan.Upsert.Query, "") + assert.DeepEqual(t, plan.Upsert.ArgumentIndexes, nil) + assert.DeepEqual(t, plan.Upsert.ScanIndexes, nil) assert.Equal(t, plan.Update.Query, `UPDATE "basic_records" SET "Description" = ?, "CreatedAt" = ? WHERE "ID" = ?`) assert.DeepEqual(t, plan.Update.ArgumentIndexes, [][]int{{1}, {2}, {0}}) assert.DeepEqual(t, plan.Update.ScanIndexes, nil) @@ -148,6 +157,9 @@ func TestQueryConstructionWithOnlyPrimaryKey(t *testing.T) { assert.Equal(t, plan.Insert.Query, "INSERT INTO `foo_bar_relations` (`foo_id`, `bar_id`) VALUES (?, ?)") assert.DeepEqual(t, plan.Insert.ArgumentIndexes, [][]int{{0}, {1}}) assert.DeepEqual(t, plan.Insert.ScanIndexes, nil) + assert.Equal(t, plan.Upsert.Query, "INSERT INTO `foo_bar_relations` (`foo_id`, `bar_id`) VALUES (?, ?) ON DUPLICATE KEY UPDATE `foo_id` = VALUES(`foo_id`)") + assert.DeepEqual(t, plan.Upsert.ArgumentIndexes, [][]int{{0}, {1}}) + assert.DeepEqual(t, plan.Upsert.ScanIndexes, nil) assert.Equal(t, plan.Update.Query, "") assert.DeepEqual(t, plan.Update.ArgumentIndexes, nil) assert.DeepEqual(t, plan.Update.ScanIndexes, nil) @@ -167,6 +179,9 @@ func TestQueryConstructionWithOnlyPrimaryKey(t *testing.T) { assert.Equal(t, plan.Insert.Query, `INSERT INTO "foo_bar_relations" ("foo_id", "bar_id") VALUES ($1, $2)`) assert.DeepEqual(t, plan.Insert.ArgumentIndexes, [][]int{{0}, {1}}) assert.DeepEqual(t, plan.Insert.ScanIndexes, nil) + assert.Equal(t, plan.Upsert.Query, `INSERT INTO "foo_bar_relations" ("foo_id", "bar_id") VALUES ($1, $2) ON CONFLICT ("foo_id", "bar_id") DO NOTHING`) + assert.DeepEqual(t, plan.Upsert.ArgumentIndexes, [][]int{{0}, {1}}) + assert.DeepEqual(t, plan.Upsert.ScanIndexes, nil) assert.Equal(t, plan.Update.Query, "") assert.DeepEqual(t, plan.Update.ArgumentIndexes, nil) assert.DeepEqual(t, plan.Update.ScanIndexes, nil) @@ -186,6 +201,9 @@ func TestQueryConstructionWithOnlyPrimaryKey(t *testing.T) { assert.Equal(t, plan.Insert.Query, `INSERT INTO "foo_bar_relations" ("foo_id", "bar_id") VALUES (?, ?)`) assert.DeepEqual(t, plan.Insert.ArgumentIndexes, [][]int{{0}, {1}}) assert.DeepEqual(t, plan.Insert.ScanIndexes, nil) + assert.Equal(t, plan.Upsert.Query, `INSERT INTO "foo_bar_relations" ("foo_id", "bar_id") VALUES (?, ?) ON CONFLICT ("foo_id", "bar_id") DO NOTHING`) + assert.DeepEqual(t, plan.Upsert.ArgumentIndexes, [][]int{{0}, {1}}) + assert.DeepEqual(t, plan.Upsert.ScanIndexes, nil) assert.Equal(t, plan.Update.Query, "") assert.DeepEqual(t, plan.Update.ArgumentIndexes, nil) assert.DeepEqual(t, plan.Update.ScanIndexes, nil) @@ -215,6 +233,9 @@ func TestQueryConstructionWithoutPrimaryKey(t *testing.T) { assert.Equal(t, plan.Insert.Query, "INSERT INTO `foo_bar_relations` (`foo_id`, `bar_id`) VALUES (?, ?)") assert.DeepEqual(t, plan.Insert.ArgumentIndexes, [][]int{{0}, {1}}) assert.DeepEqual(t, plan.Insert.ScanIndexes, nil) + assert.Equal(t, plan.Upsert.Query, "") + assert.DeepEqual(t, plan.Upsert.ArgumentIndexes, nil) + assert.DeepEqual(t, plan.Upsert.ScanIndexes, nil) assert.Equal(t, plan.Update.Query, "") assert.DeepEqual(t, plan.Update.ArgumentIndexes, nil) assert.DeepEqual(t, plan.Update.ScanIndexes, nil) @@ -234,6 +255,9 @@ func TestQueryConstructionWithoutPrimaryKey(t *testing.T) { assert.Equal(t, plan.Insert.Query, `INSERT INTO "foo_bar_relations" ("foo_id", "bar_id") VALUES ($1, $2)`) assert.DeepEqual(t, plan.Insert.ArgumentIndexes, [][]int{{0}, {1}}) assert.DeepEqual(t, plan.Insert.ScanIndexes, nil) + assert.Equal(t, plan.Upsert.Query, "") + assert.DeepEqual(t, plan.Upsert.ArgumentIndexes, nil) + assert.DeepEqual(t, plan.Upsert.ScanIndexes, nil) assert.Equal(t, plan.Update.Query, "") assert.DeepEqual(t, plan.Update.ArgumentIndexes, nil) assert.DeepEqual(t, plan.Update.ScanIndexes, nil) @@ -253,6 +277,9 @@ func TestQueryConstructionWithoutPrimaryKey(t *testing.T) { assert.Equal(t, plan.Insert.Query, `INSERT INTO "foo_bar_relations" ("foo_id", "bar_id") VALUES (?, ?)`) assert.DeepEqual(t, plan.Insert.ArgumentIndexes, [][]int{{0}, {1}}) assert.DeepEqual(t, plan.Insert.ScanIndexes, nil) + assert.Equal(t, plan.Upsert.Query, "") + assert.DeepEqual(t, plan.Upsert.ArgumentIndexes, nil) + assert.DeepEqual(t, plan.Upsert.ScanIndexes, nil) assert.Equal(t, plan.Update.Query, "") assert.DeepEqual(t, plan.Update.ArgumentIndexes, nil) assert.DeepEqual(t, plan.Update.ScanIndexes, nil) @@ -282,6 +309,9 @@ func TestQueryConstructionImpossble(t *testing.T) { assert.Equal(t, plan.Insert.Query, "") assert.DeepEqual(t, plan.Insert.ArgumentIndexes, nil) assert.DeepEqual(t, plan.Insert.ScanIndexes, nil) + assert.Equal(t, plan.Upsert.Query, "") + assert.DeepEqual(t, plan.Upsert.ArgumentIndexes, nil) + assert.DeepEqual(t, plan.Upsert.ScanIndexes, nil) assert.Equal(t, plan.Update.Query, "") assert.DeepEqual(t, plan.Update.ArgumentIndexes, nil) assert.DeepEqual(t, plan.Update.ScanIndexes, nil) @@ -318,6 +348,9 @@ func TestQueryConstructionWithMultiplePrimaryKeyColumns(t *testing.T) { assert.Equal(t, plan.Insert.Query, "INSERT INTO `complex_records` (`group_id`, `name`, `created_at`) VALUES (?, ?, ?)") assert.DeepEqual(t, plan.Insert.ArgumentIndexes, [][]int{{0}, {1}, {2}}) assert.DeepEqual(t, plan.Insert.ScanIndexes, nil) + assert.Equal(t, plan.Upsert.Query, "INSERT INTO `complex_records` (`group_id`, `name`, `created_at`) VALUES (?, ?, ?) ON DUPLICATE KEY UPDATE `created_at` = VALUES(`created_at`)") + assert.DeepEqual(t, plan.Upsert.ArgumentIndexes, [][]int{{0}, {1}, {2}}) + assert.DeepEqual(t, plan.Upsert.ScanIndexes, nil) assert.Equal(t, plan.Update.Query, "UPDATE `complex_records` SET `created_at` = ? WHERE `group_id` = ? AND `name` = ?") assert.DeepEqual(t, plan.Update.ArgumentIndexes, [][]int{{2}, {0}, {1}}) assert.DeepEqual(t, plan.Update.ScanIndexes, nil) @@ -337,6 +370,9 @@ func TestQueryConstructionWithMultiplePrimaryKeyColumns(t *testing.T) { assert.Equal(t, plan.Insert.Query, `INSERT INTO "complex_records" ("group_id", "name", "created_at") VALUES ($1, $2, $3)`) assert.DeepEqual(t, plan.Insert.ArgumentIndexes, [][]int{{0}, {1}, {2}}) assert.DeepEqual(t, plan.Insert.ScanIndexes, nil) + assert.Equal(t, plan.Upsert.Query, `INSERT INTO "complex_records" ("group_id", "name", "created_at") VALUES ($1, $2, $3) ON CONFLICT ("group_id", "name") DO UPDATE SET "created_at" = EXCLUDED."created_at"`) + assert.DeepEqual(t, plan.Upsert.ArgumentIndexes, [][]int{{0}, {1}, {2}}) + assert.DeepEqual(t, plan.Upsert.ScanIndexes, nil) assert.Equal(t, plan.Update.Query, `UPDATE "complex_records" SET "created_at" = $1 WHERE "group_id" = $2 AND "name" = $3`) assert.DeepEqual(t, plan.Update.ArgumentIndexes, [][]int{{2}, {0}, {1}}) assert.DeepEqual(t, plan.Update.ScanIndexes, nil) @@ -356,6 +392,9 @@ func TestQueryConstructionWithMultiplePrimaryKeyColumns(t *testing.T) { assert.Equal(t, plan.Insert.Query, `INSERT INTO "complex_records" ("group_id", "name", "created_at") VALUES (?, ?, ?)`) assert.DeepEqual(t, plan.Insert.ArgumentIndexes, [][]int{{0}, {1}, {2}}) assert.DeepEqual(t, plan.Insert.ScanIndexes, nil) + assert.Equal(t, plan.Upsert.Query, `INSERT INTO "complex_records" ("group_id", "name", "created_at") VALUES (?, ?, ?) ON CONFLICT ("group_id", "name") DO UPDATE SET "created_at" = EXCLUDED."created_at"`) + assert.DeepEqual(t, plan.Upsert.ArgumentIndexes, [][]int{{0}, {1}, {2}}) + assert.DeepEqual(t, plan.Upsert.ScanIndexes, nil) assert.Equal(t, plan.Update.Query, `UPDATE "complex_records" SET "created_at" = ? WHERE "group_id" = ? AND "name" = ?`) assert.DeepEqual(t, plan.Update.ArgumentIndexes, [][]int{{2}, {0}, {1}}) assert.DeepEqual(t, plan.Update.ScanIndexes, nil) @@ -392,6 +431,9 @@ func TestQueryConstructionWithMultipleAutoColumns(t *testing.T) { assert.Equal(t, plan.Insert.Query, `INSERT INTO "autogenerated_records" ("name") VALUES ($1) RETURNING "id", "created_at"`) assert.DeepEqual(t, plan.Insert.ArgumentIndexes, [][]int{{1}}) assert.DeepEqual(t, plan.Insert.ScanIndexes, [][]int{{0}, {2}}) + assert.Equal(t, plan.Upsert.Query, "") + assert.DeepEqual(t, plan.Upsert.ArgumentIndexes, nil) + assert.DeepEqual(t, plan.Upsert.ScanIndexes, nil) assert.Equal(t, plan.Update.Query, `UPDATE "autogenerated_records" SET "name" = $1, "created_at" = $2 WHERE "id" = $3`) assert.DeepEqual(t, plan.Update.ArgumentIndexes, [][]int{{1}, {2}, {0}}) assert.DeepEqual(t, plan.Update.ScanIndexes, nil) |
