From 500df8a3f4994d6062ea6af83587b66ec9625274 Mon Sep 17 00:00:00 2001 From: Kyle Conroy Date: Thu, 28 Mar 2024 10:43:37 -0700 Subject: [PATCH] fix(codegen/golang): Use int8 for MySQL TINYINT --- internal/codegen/golang/mysql_type.go | 16 ++++++++++++---- .../testdata/datatype/mysql/go/models.go | 6 +++--- .../endtoend/testdata/json/mysql/go/copyfrom.go | 2 +- .../testdata/vet_explain/mysql/db/models.go | 2 +- .../testdata/vet_explain/mysql/db/query.sql.go | 2 +- 5 files changed, 18 insertions(+), 10 deletions(-) diff --git a/internal/codegen/golang/mysql_type.go b/internal/codegen/golang/mysql_type.go index 7029ca9615..b8e8aa43c7 100644 --- a/internal/codegen/golang/mysql_type.go +++ b/internal/codegen/golang/mysql_type.go @@ -31,14 +31,22 @@ func mysqlType(req *plugin.GenerateRequest, options *opts.Options, col *plugin.C } else { if notNull { if unsigned { - return "uint32" + return "uint8" } - return "int32" + return "int8" } - return "sql.NullInt32" + // The database/sql package does not have a sql.NullInt8 type, so we + // use the smallest type they have which is NullInt16 + return "sql.NullInt16" } - case "smallint", "year": + case "year": + if notNull { + return "int16" + } + return "sql.NullInt16" + + case "smallint": if notNull { if unsigned { return "uint16" diff --git a/internal/endtoend/testdata/datatype/mysql/go/models.go b/internal/endtoend/testdata/datatype/mysql/go/models.go index d5ed3a1d58..8786b1e494 100644 --- a/internal/endtoend/testdata/datatype/mysql/go/models.go +++ b/internal/endtoend/testdata/datatype/mysql/go/models.go @@ -54,7 +54,7 @@ type DtDatetimeNotNull struct { type DtNumeric struct { A sql.NullInt32 B sql.NullInt32 - C sql.NullInt32 + C sql.NullInt16 D sql.NullInt16 E sql.NullInt32 F sql.NullInt64 @@ -69,7 +69,7 @@ type DtNumeric struct { type DtNumericNotNull struct { A int32 B int32 - C int32 + C int8 D int16 E int32 F int64 @@ -84,7 +84,7 @@ type DtNumericNotNull struct { type DtNumericUnsigned struct { A sql.NullInt32 B sql.NullInt32 - C sql.NullInt32 + C sql.NullInt16 D sql.NullInt16 E sql.NullInt32 F sql.NullInt64 diff --git a/internal/endtoend/testdata/json/mysql/go/copyfrom.go b/internal/endtoend/testdata/json/mysql/go/copyfrom.go index ca4140873c..a1623cdca2 100644 --- a/internal/endtoend/testdata/json/mysql/go/copyfrom.go +++ b/internal/endtoend/testdata/json/mysql/go/copyfrom.go @@ -1,6 +1,6 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.24.0 +// sqlc v1.25.0 // source: copyfrom.go package querytest diff --git a/internal/endtoend/testdata/vet_explain/mysql/db/models.go b/internal/endtoend/testdata/vet_explain/mysql/db/models.go index 9dc6afbadc..ad4e29bba6 100644 --- a/internal/endtoend/testdata/vet_explain/mysql/db/models.go +++ b/internal/endtoend/testdata/vet_explain/mysql/db/models.go @@ -110,7 +110,7 @@ type Debug struct { Cdouble float64 Cdec string Cfixed string - Ctinyint int32 + Ctinyint int8 Cbool bool Cmediumint int32 Cbit interface{} diff --git a/internal/endtoend/testdata/vet_explain/mysql/db/query.sql.go b/internal/endtoend/testdata/vet_explain/mysql/db/query.sql.go index 14704b9c93..62b083c9a0 100644 --- a/internal/endtoend/testdata/vet_explain/mysql/db/query.sql.go +++ b/internal/endtoend/testdata/vet_explain/mysql/db/query.sql.go @@ -376,7 +376,7 @@ SELECT id FROM debug WHERE Ctinyint = ? LIMIT 1 ` -func (q *Queries) SelectByCtinyint(ctx context.Context, ctinyint int32) (int64, error) { +func (q *Queries) SelectByCtinyint(ctx context.Context, ctinyint int8) (int64, error) { row := q.db.QueryRowContext(ctx, selectByCtinyint, ctinyint) var id int64 err := row.Scan(&id)