From 8ead6bb84012709403277ce88dfab12097ecf273 Mon Sep 17 00:00:00 2001 From: Kazuki Onishi Date: Mon, 29 Apr 2024 17:49:17 +0900 Subject: [PATCH] fix(mysql): Handle null MySQL JSON values (#129) --- internal/codegen/golang/mysql_type.go | 5 ++++- internal/endtoend/testdata/json/mysql/go/copyfrom.go | 2 +- internal/endtoend/testdata/json/mysql/go/models.go | 2 +- internal/endtoend/testdata/json/mysql/go/query.sql.go | 2 +- 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/internal/codegen/golang/mysql_type.go b/internal/codegen/golang/mysql_type.go index b8e8aa43c7..19fefa5600 100644 --- a/internal/codegen/golang/mysql_type.go +++ b/internal/codegen/golang/mysql_type.go @@ -108,7 +108,10 @@ func mysqlType(req *plugin.GenerateRequest, options *opts.Options, col *plugin.C return "sql.NullBool" case "json": - return "json.RawMessage" + if notNull { + return "json.RawMessage" + } + return "*json.RawMessage" case "any": return "interface{}" diff --git a/internal/endtoend/testdata/json/mysql/go/copyfrom.go b/internal/endtoend/testdata/json/mysql/go/copyfrom.go index 3bd87e68c3..ae71e40379 100644 --- a/internal/endtoend/testdata/json/mysql/go/copyfrom.go +++ b/internal/endtoend/testdata/json/mysql/go/copyfrom.go @@ -21,7 +21,7 @@ func convertRowsForBulkInsert(w *io.PipeWriter, arg []BulkInsertParams) { e := mysqltsv.NewEncoder(w, 2, nil) for _, row := range arg { e.AppendBytes(row.A) - e.AppendBytes(row.B) + e.AppendValue(row.B) } w.CloseWithError(e.Close()) } diff --git a/internal/endtoend/testdata/json/mysql/go/models.go b/internal/endtoend/testdata/json/mysql/go/models.go index 152aae123b..18806d5b4e 100644 --- a/internal/endtoend/testdata/json/mysql/go/models.go +++ b/internal/endtoend/testdata/json/mysql/go/models.go @@ -10,5 +10,5 @@ import ( type Foo struct { A json.RawMessage - B json.RawMessage + B *json.RawMessage } diff --git a/internal/endtoend/testdata/json/mysql/go/query.sql.go b/internal/endtoend/testdata/json/mysql/go/query.sql.go index 96e24968a8..441e9fdb0d 100644 --- a/internal/endtoend/testdata/json/mysql/go/query.sql.go +++ b/internal/endtoend/testdata/json/mysql/go/query.sql.go @@ -16,7 +16,7 @@ INSERT INTO foo (a, b) VALUES (?, ?) type BulkInsertParams struct { A json.RawMessage - B json.RawMessage + B *json.RawMessage } const selectFoo = `-- name: SelectFoo :exec