From 7daf1915a5b2d71d97dc18e3bcd186a953edd4a9 Mon Sep 17 00:00:00 2001 From: Sebastiaan de Schaetzen Date: Fri, 9 May 2025 10:54:42 +0200 Subject: [PATCH] Fix yet another pointer --- query.go | 4 ++++ query_test.go | 20 ++++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/query.go b/query.go index 6d763a6..0c50659 100644 --- a/query.go +++ b/query.go @@ -50,6 +50,10 @@ func (q *Query) bindInto(into *int, args ...any) *Query { } v := reflect.ValueOf(arg) if v.Kind() == reflect.Ptr { + if v.IsNil() { + q.stmt.BindNull(*into) + continue + } arg = v.Elem().Interface() } if asString, ok := arg.(string); ok { diff --git a/query_test.go b/query_test.go index 71cd9b8..24fbd6f 100644 --- a/query_test.go +++ b/query_test.go @@ -122,6 +122,26 @@ func TestUpdateQueryWithPointerValue(t *testing.T) { require.Equal(t, "ipsum", value) } +func TestUpdateQueryWithSetPointerValue(t *testing.T) { + type S struct { + value *string + } + db := openTestDb(t) + func() { + tx := db.MustBegin() + defer tx.MustRollback() + tx.Query("insert into mytable(key, value) values ('lorem', 'bar')").MustExec() + s := S{nil} + key := "lorem" + tx.Query("update mytable set value = ? where key = ?").Bind(s.value, key).MustExec() + tx.MustCommit() + }() + + var value *string + db.Query("select value from mytable where key = 'lorem'").MustScanSingle(&value) + require.Equal(t, (*string)(nil), value) +} + func TestUpdateQueryWithNullValue(t *testing.T) { db := openTestDb(t) func() {