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 2cb2533977..b472522d84 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 da0314cf97..2a9205697d 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 7c8ff8d7ec..3f1572eccc 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