aboutsummaryrefslogtreecommitdiff
path: root/internal/plan_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/plan_test.go')
-rw-r--r--internal/plan_test.go46
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, "")
}