From 764eaf643e323b92a616fc8e6a193855bb43d905 Mon Sep 17 00:00:00 2001 From: Stefan Majewsky Date: Fri, 22 May 2026 14:01:24 +0200 Subject: bring back support for LastInsertId-based INSERT As the remaining TODO noted, this really is much more memory-efficient than QueryRow when we can use it, since it does not allocate an *sql.Rows instance inside the *sql.Row instance where we call Scan(). --- plan_test.go | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) (limited to 'plan_test.go') diff --git a/plan_test.go b/plan_test.go index f8b4fac..6c42f7a 100644 --- a/plan_test.go +++ b/plan_test.go @@ -74,10 +74,12 @@ func TestQueryConstructionBasic(t *testing.T) { if err != nil { t.Error(err) } + assert.Equal(t, plan.InsertUsesQueryRow, false) + assert.Equal(t, plan.LastInsertIdIsUnsigned, false) assert.Equal(t, plan.Select.Query, "SELECT `ID`, `Description`, `CreatedAt` FROM `basic_records` WHERE ") assert.DeepEqual(t, plan.Select.ArgumentIndexes, nil) assert.DeepEqual(t, plan.Select.ScanIndexes, [][]int{{0}, {1}, {2}}) - assert.Equal(t, plan.Insert.Query, "INSERT INTO `basic_records` (`Description`, `CreatedAt`) VALUES (?, ?) RETURNING `ID`") + 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, "") @@ -96,6 +98,7 @@ func TestQueryConstructionBasic(t *testing.T) { if err != nil { t.Error(err) } + assert.Equal(t, plan.InsertUsesQueryRow, true) assert.Equal(t, plan.Select.Query, `SELECT "ID", "Description", "CreatedAt" FROM "basic_records" WHERE `) assert.DeepEqual(t, plan.Select.ArgumentIndexes, nil) assert.DeepEqual(t, plan.Select.ScanIndexes, [][]int{{0}, {1}, {2}}) @@ -118,10 +121,12 @@ func TestQueryConstructionBasic(t *testing.T) { if err != nil { t.Error(err) } + assert.Equal(t, plan.InsertUsesQueryRow, false) + assert.Equal(t, plan.LastInsertIdIsUnsigned, false) assert.Equal(t, plan.Select.Query, `SELECT "ID", "Description", "CreatedAt" FROM "basic_records" WHERE `) assert.DeepEqual(t, plan.Select.ArgumentIndexes, nil) assert.DeepEqual(t, plan.Select.ScanIndexes, [][]int{{0}, {1}, {2}}) - assert.Equal(t, plan.Insert.Query, `INSERT INTO "basic_records" ("Description", "CreatedAt") VALUES (?, ?) RETURNING "ID"`) + 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, "") @@ -151,6 +156,7 @@ func TestQueryConstructionWithOnlyPrimaryKey(t *testing.T) { if err != nil { t.Error(err) } + assert.Equal(t, plan.InsertUsesQueryRow, false) assert.Equal(t, plan.Select.Query, "SELECT `foo_id`, `bar_id` FROM `foo_bar_relations` WHERE ") assert.DeepEqual(t, plan.Select.ArgumentIndexes, nil) assert.DeepEqual(t, plan.Select.ScanIndexes, [][]int{{0}, {1}}) @@ -173,6 +179,7 @@ func TestQueryConstructionWithOnlyPrimaryKey(t *testing.T) { if err != nil { t.Error(err) } + assert.Equal(t, plan.InsertUsesQueryRow, false) assert.Equal(t, plan.Select.Query, `SELECT "foo_id", "bar_id" FROM "foo_bar_relations" WHERE `) assert.DeepEqual(t, plan.Select.ArgumentIndexes, nil) assert.DeepEqual(t, plan.Select.ScanIndexes, [][]int{{0}, {1}}) @@ -195,6 +202,7 @@ func TestQueryConstructionWithOnlyPrimaryKey(t *testing.T) { if err != nil { t.Error(err) } + assert.Equal(t, plan.InsertUsesQueryRow, false) assert.Equal(t, plan.Select.Query, `SELECT "foo_id", "bar_id" FROM "foo_bar_relations" WHERE `) assert.DeepEqual(t, plan.Select.ArgumentIndexes, nil) assert.DeepEqual(t, plan.Select.ScanIndexes, [][]int{{0}, {1}}) @@ -227,6 +235,7 @@ func TestQueryConstructionWithoutPrimaryKey(t *testing.T) { if err != nil { t.Error(err) } + assert.Equal(t, plan.InsertUsesQueryRow, false) assert.Equal(t, plan.Select.Query, "SELECT `foo_id`, `bar_id` FROM `foo_bar_relations` WHERE ") assert.DeepEqual(t, plan.Select.ArgumentIndexes, nil) assert.DeepEqual(t, plan.Select.ScanIndexes, [][]int{{0}, {1}}) @@ -249,6 +258,7 @@ func TestQueryConstructionWithoutPrimaryKey(t *testing.T) { if err != nil { t.Error(err) } + assert.Equal(t, plan.InsertUsesQueryRow, false) assert.Equal(t, plan.Select.Query, `SELECT "foo_id", "bar_id" FROM "foo_bar_relations" WHERE `) assert.DeepEqual(t, plan.Select.ArgumentIndexes, nil) assert.DeepEqual(t, plan.Select.ScanIndexes, [][]int{{0}, {1}}) @@ -271,6 +281,7 @@ func TestQueryConstructionWithoutPrimaryKey(t *testing.T) { if err != nil { t.Error(err) } + assert.Equal(t, plan.InsertUsesQueryRow, false) assert.Equal(t, plan.Select.Query, `SELECT "foo_id", "bar_id" FROM "foo_bar_relations" WHERE `) assert.DeepEqual(t, plan.Select.ArgumentIndexes, nil) assert.DeepEqual(t, plan.Select.ScanIndexes, [][]int{{0}, {1}}) @@ -342,6 +353,7 @@ func TestQueryConstructionWithMultiplePrimaryKeyColumns(t *testing.T) { if err != nil { t.Error(err) } + assert.Equal(t, plan.InsertUsesQueryRow, false) assert.Equal(t, plan.Select.Query, "SELECT `group_id`, `name`, `created_at` FROM `complex_records` WHERE ") assert.DeepEqual(t, plan.Select.ArgumentIndexes, nil) assert.DeepEqual(t, plan.Select.ScanIndexes, [][]int{{0}, {1}, {2}}) @@ -364,6 +376,7 @@ func TestQueryConstructionWithMultiplePrimaryKeyColumns(t *testing.T) { if err != nil { t.Error(err) } + assert.Equal(t, plan.InsertUsesQueryRow, false) assert.Equal(t, plan.Select.Query, `SELECT "group_id", "name", "created_at" FROM "complex_records" WHERE `) assert.DeepEqual(t, plan.Select.ArgumentIndexes, nil) assert.DeepEqual(t, plan.Select.ScanIndexes, [][]int{{0}, {1}, {2}}) @@ -386,6 +399,7 @@ func TestQueryConstructionWithMultiplePrimaryKeyColumns(t *testing.T) { if err != nil { t.Error(err) } + assert.Equal(t, plan.InsertUsesQueryRow, false) assert.Equal(t, plan.Select.Query, `SELECT "group_id", "name", "created_at" FROM "complex_records" WHERE `) assert.DeepEqual(t, plan.Select.ArgumentIndexes, nil) assert.DeepEqual(t, plan.Select.ScanIndexes, [][]int{{0}, {1}, {2}}) @@ -420,6 +434,7 @@ func TestQueryConstructionWithMultipleAutoColumns(t *testing.T) { if err != nil { t.Error(err) } + assert.Equal(t, plan.InsertUsesQueryRow, true) assert.Equal(t, plan.Select.Query, "SELECT `id`, `name`, `created_at` FROM `autogenerated_records` WHERE ") assert.DeepEqual(t, plan.Select.ArgumentIndexes, nil) assert.DeepEqual(t, plan.Select.ScanIndexes, [][]int{{0}, {1}, {2}}) @@ -442,6 +457,7 @@ func TestQueryConstructionWithMultipleAutoColumns(t *testing.T) { if err != nil { t.Error(err) } + assert.Equal(t, plan.InsertUsesQueryRow, true) assert.Equal(t, plan.Select.Query, `SELECT "id", "name", "created_at" FROM "autogenerated_records" WHERE `) assert.DeepEqual(t, plan.Select.ArgumentIndexes, nil) assert.DeepEqual(t, plan.Select.ScanIndexes, [][]int{{0}, {1}, {2}}) @@ -464,6 +480,7 @@ func TestQueryConstructionWithMultipleAutoColumns(t *testing.T) { if err != nil { t.Error(err) } + assert.Equal(t, plan.InsertUsesQueryRow, true) assert.Equal(t, plan.Select.Query, `SELECT "id", "name", "created_at" FROM "autogenerated_records" WHERE `) assert.DeepEqual(t, plan.Select.ArgumentIndexes, nil) assert.DeepEqual(t, plan.Select.ScanIndexes, [][]int{{0}, {1}, {2}}) -- cgit v1.2.3