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