diff options
| author | Stefan Majewsky <majewsky@gmx.net> | 2026-04-10 20:59:46 +0200 |
|---|---|---|
| committer | Stefan Majewsky <majewsky@gmx.net> | 2026-04-10 20:59:46 +0200 |
| commit | 5f27af0eef5eb46a43e714aaed8bc7807f6d5ca7 (patch) | |
| tree | 82f4c5b81a2e17230b4642d1560157c15c5587a4 /internal/plan_test.go | |
| parent | 293e2a52e0b45065db12ff27f89f1adebe4bf4d2 (diff) | |
| download | go-oblast-5f27af0eef5eb46a43e714aaed8bc7807f6d5ca7.tar.gz | |
generate INSERT/UPDATE/DELETE queries during BuildPlan
Diffstat (limited to 'internal/plan_test.go')
| -rw-r--r-- | internal/plan_test.go | 46 |
1 files changed, 34 insertions, 12 deletions
diff --git a/internal/plan_test.go b/internal/plan_test.go index 827c6e4..570833c 100644 --- a/internal/plan_test.go +++ b/internal/plan_test.go @@ -19,8 +19,9 @@ func TestPlanFieldTraversal(t *testing.T) { info.PrimaryKeyIs `db:"id"` ID int64 `db:"id,auto"` CreatedAt time.Time `db:"created_at"` - Message string `db:"message"` - private1 bool `db:"private1"` //nolint:unused + Message string + private1 bool `db:"private1"` //nolint:unused + Ignored any `db:"-"` } // assert on interface implementations @@ -31,24 +32,40 @@ func TestPlanFieldTraversal(t *testing.T) { // check that the plan for Log: // 1. has no IndexByColumnName entries for marker types - // 2. ignores "private1" because it cannot be written through reflection - // 3. recognizes "id" as an autofilled column + // 2. uses the field name as a column name for "Message" + // 3. ignores "private1" because it cannot be written through reflection + // 4. ignores "Ignored" because its column name is "-" + // 5. recognizes "id" as an autofilled column plan, err := internal.BuildPlan(reflect.TypeFor[Log](), internal.PostgresDialect{}) if err != nil { t.Error(err) } assert.Equal(t, plan.TableName, "log_entries") - assert.DeepEqual(t, plan.PrimaryKeyColumns, []string{"id"}) - assert.DeepEqual(t, plan.AutoColumns, []string{"id"}) + assert.DeepEqual(t, plan.AllColumnNames, []string{"id", "created_at", "Message"}) + assert.DeepEqual(t, plan.PrimaryKeyColumnNames, []string{"id"}) + assert.DeepEqual(t, plan.AutoColumnNames, []string{"id"}) assert.DeepEqual(t, plan.IndexByColumnName, map[string][]int{ "id": {2}, "created_at": {3}, - "message": {4}, + "Message": {4}, }) + assert.Equal(t, plan.Insert.Query, + `INSERT INTO "log_entries" ("created_at", "Message") VALUES ($1, $2) RETURNING "id"`, + ) + assert.DeepEqual(t, plan.Insert.ArgumentIndexes, [][]int{{3}, {4}}) + assert.Equal(t, plan.Update.Query, + `UPDATE "log_entries" SET "created_at" = $1, "Message" = $2 WHERE "id" = $3`, + ) + assert.DeepEqual(t, plan.Update.ArgumentIndexes, [][]int{{3}, {4}, {2}}) + assert.Equal(t, plan.Delete.Query, + `DELETE FROM "log_entries" WHERE "id" = $1`, + ) + assert.DeepEqual(t, plan.Delete.ArgumentIndexes, [][]int{{2}}) + type record struct { Log - Keks bool `db:"keks"` + Foo bool `db:"foo"` private2 bool `db:"private2"` //nolint:unused } @@ -61,12 +78,17 @@ func TestPlanFieldTraversal(t *testing.T) { t.Error(err) } assert.Equal(t, plan.TableName, "") - assert.DeepEqual(t, plan.PrimaryKeyColumns, nil) - assert.DeepEqual(t, plan.AutoColumns, []string{"id"}) // this is okay, it does not bear significance in practice since no queries are generated + assert.DeepEqual(t, plan.AllColumnNames, []string{"id", "created_at", "Message", "foo"}) + assert.DeepEqual(t, plan.PrimaryKeyColumnNames, nil) + assert.DeepEqual(t, plan.AutoColumnNames, []string{"id"}) // this is okay, it does not bear significance in practice since no queries are generated assert.DeepEqual(t, plan.IndexByColumnName, map[string][]int{ "id": {0, 2}, "created_at": {0, 3}, - "message": {0, 4}, - "keks": {1}, + "Message": {0, 4}, + "foo": {1}, }) + + assert.Equal(t, plan.Insert.Query, "") + assert.Equal(t, plan.Update.Query, "") + assert.Equal(t, plan.Delete.Query, "") } |
