From 0c7f66311d225f06102135b8c884709107b81cd8 Mon Sep 17 00:00:00 2001 From: Jille Timmermans Date: Wed, 21 Jun 2023 23:18:16 +0200 Subject: [PATCH] Fix type overrides on columns for parameters inside an IN clause --- internal/compiler/resolve.go | 1 + .../overrides_go_types/mysql/go/query.sql.go | 50 +++++++++++++++++++ .../overrides_go_types/mysql/query.sql | 3 +- 3 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 internal/endtoend/testdata/overrides_go_types/mysql/go/query.sql.go diff --git a/internal/compiler/resolve.go b/internal/compiler/resolve.go index ca0aa66bc0..547effc9e0 100644 --- a/internal/compiler/resolve.go +++ b/internal/compiler/resolve.go @@ -553,6 +553,7 @@ func (comp *Compiler) resolveCatalogRefs(qc *QueryCatalog, rvs []*ast.RangeVar, Number: number, Column: &Column{ Name: p.Name(), + OriginalName: c.Name, DataType: dataType(&c.Type), NotNull: c.IsNotNull, Unsigned: c.IsUnsigned, diff --git a/internal/endtoend/testdata/overrides_go_types/mysql/go/query.sql.go b/internal/endtoend/testdata/overrides_go_types/mysql/go/query.sql.go new file mode 100644 index 0000000000..74768fbedc --- /dev/null +++ b/internal/endtoend/testdata/overrides_go_types/mysql/go/query.sql.go @@ -0,0 +1,50 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.18.0 +// source: query.sql + +package override + +import ( + "context" + "strings" + + "github.com/kyleconroy/sqlc-testdata/pkg" +) + +const testIN = `-- name: TestIN :many +SELECT other, total, retyped FROM foo WHERE retyped IN (/*SLICE:paramname*/?) +` + +func (q *Queries) TestIN(ctx context.Context, paramname []pkg.CustomType) ([]Foo, error) { + query := testIN + var queryParams []interface{} + if len(paramname) > 0 { + for _, v := range paramname { + queryParams = append(queryParams, v) + } + query = strings.Replace(query, "/*SLICE:paramname*/?", strings.Repeat(",?", len(paramname))[1:], 1) + } else { + query = strings.Replace(query, "/*SLICE:paramname*/?", "NULL", 1) + } + rows, err := q.db.QueryContext(ctx, query, queryParams...) + if err != nil { + return nil, err + } + defer rows.Close() + var items []Foo + for rows.Next() { + var i Foo + if err := rows.Scan(&i.Other, &i.Total, &i.Retyped); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/internal/endtoend/testdata/overrides_go_types/mysql/query.sql b/internal/endtoend/testdata/overrides_go_types/mysql/query.sql index e0ac49d1ec..6b6fb8634d 100644 --- a/internal/endtoend/testdata/overrides_go_types/mysql/query.sql +++ b/internal/endtoend/testdata/overrides_go_types/mysql/query.sql @@ -1 +1,2 @@ -SELECT 1; +-- name: TestIN :many +SELECT * FROM foo WHERE retyped IN (sqlc.slice(paramName));