diff --git a/internal/compiler/resolve.go b/internal/compiler/resolve.go index 1cce33a5d5..e00b070dfe 100644 --- a/internal/compiler/resolve.go +++ b/internal/compiler/resolve.go @@ -204,7 +204,8 @@ func resolveCatalogRefs(c *catalog.Catalog, qc *QueryCatalog, rvs []*ast.RangeVa var key string if ref, ok := n.Expr.(*ast.ColumnRef); ok { - if str, ok := ref.Fields.Items[0].(*ast.String); ok { + itemsCount := len(ref.Fields.Items) + if str, ok := ref.Fields.Items[itemsCount-1].(*ast.String); ok { key = str.Str } } diff --git a/internal/endtoend/testdata/between_args/mysql/go/query.sql.go b/internal/endtoend/testdata/between_args/mysql/go/query.sql.go index dc8bcdb5f6..e98362d225 100644 --- a/internal/endtoend/testdata/between_args/mysql/go/query.sql.go +++ b/internal/endtoend/testdata/between_args/mysql/go/query.sql.go @@ -40,3 +40,71 @@ func (q *Queries) GetBetweenPrices(ctx context.Context, arg GetBetweenPricesPara } return items, nil } + +const getBetweenPricesTable = `-- name: GetBetweenPricesTable :many +SELECT id, name, price +FROM products +WHERE products.price BETWEEN ? AND ? +` + +type GetBetweenPricesTableParams struct { + Price int32 + Price_2 int32 +} + +func (q *Queries) GetBetweenPricesTable(ctx context.Context, arg GetBetweenPricesTableParams) ([]Product, error) { + rows, err := q.db.QueryContext(ctx, getBetweenPricesTable, arg.Price, arg.Price_2) + if err != nil { + return nil, err + } + defer rows.Close() + var items []Product + for rows.Next() { + var i Product + if err := rows.Scan(&i.ID, &i.Name, &i.Price); 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 +} + +const getBetweenPricesTableAlias = `-- name: GetBetweenPricesTableAlias :many +SELECT id, name, price +FROM products as p +WHERE p.price BETWEEN ? AND ? +` + +type GetBetweenPricesTableAliasParams struct { + Price int32 + Price_2 int32 +} + +func (q *Queries) GetBetweenPricesTableAlias(ctx context.Context, arg GetBetweenPricesTableAliasParams) ([]Product, error) { + rows, err := q.db.QueryContext(ctx, getBetweenPricesTableAlias, arg.Price, arg.Price_2) + if err != nil { + return nil, err + } + defer rows.Close() + var items []Product + for rows.Next() { + var i Product + if err := rows.Scan(&i.ID, &i.Name, &i.Price); 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/between_args/mysql/query.sql b/internal/endtoend/testdata/between_args/mysql/query.sql index 971576926c..1e38765622 100644 --- a/internal/endtoend/testdata/between_args/mysql/query.sql +++ b/internal/endtoend/testdata/between_args/mysql/query.sql @@ -9,3 +9,13 @@ CREATE TABLE products ( SELECT * FROM products WHERE price BETWEEN ? AND ?; + +-- name: GetBetweenPricesTable :many +SELECT * +FROM products +WHERE products.price BETWEEN ? AND ?; + +-- name: GetBetweenPricesTableAlias :many +SELECT * +FROM products as p +WHERE p.price BETWEEN ? AND ?; diff --git a/internal/endtoend/testdata/between_args/mysql/sqlc.json b/internal/endtoend/testdata/between_args/mysql/sqlc.json index 8506488772..9bb6e56fd0 100644 --- a/internal/endtoend/testdata/between_args/mysql/sqlc.json +++ b/internal/endtoend/testdata/between_args/mysql/sqlc.json @@ -1,12 +1,12 @@ { "version": "1", "packages": [ - { - "path": "go", - "engine": "mysql", - "name": "querytest", - "schema": "query.sql", - "queries": "query.sql" - } + { + "path": "go", + "engine": "mysql", + "name": "querytest", + "schema": "query.sql", + "queries": "query.sql" + } ] }