Skip to content

Commit 244a90b

Browse files
authored
Dedupe sqlc.arg parameters wrapped in a type cast for MySQL (#4384)
1 parent 3f41c61 commit 244a90b

File tree

5 files changed

+43
-2
lines changed

5 files changed

+43
-2
lines changed

internal/compiler/resolve.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -513,10 +513,11 @@ func (comp *Compiler) resolveCatalogRefs(qc *QueryCatalog, rvs []*ast.RangeVar,
513513
}
514514
col := toColumn(n.TypeName)
515515
defaultP := named.NewInferredParam(col.Name, col.NotNull)
516-
p, _ := params.FetchMerge(ref.ref.Number, defaultP)
516+
p, isNamed := params.FetchMerge(ref.ref.Number, defaultP)
517517

518518
col.Name = p.Name()
519519
col.NotNull = p.NotNull()
520+
col.IsNamedParam = isNamed
520521
a = append(a, Parameter{
521522
Number: ref.ref.Number,
522523
Column: col,

internal/endtoend/testdata/params_duplicate/mysql/go/models.go

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/endtoend/testdata/params_duplicate/mysql/go/query.sql.go

Lines changed: 33 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/endtoend/testdata/params_duplicate/mysql/query.sql

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,8 @@ WHERE first_name = sqlc.arg(name)
1111
/* name: SelectUserQuestion :many */
1212
SELECT first_name from
1313
users where (? = id OR ? = 0);
14+
15+
/* name: SelectUserByAgeCast :many */
16+
SELECT first_name FROM users
17+
WHERE age > CAST(sqlc.arg(threshold) AS SIGNED)
18+
OR age < CAST(sqlc.arg(threshold) AS SIGNED);
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
CREATE TABLE users (
22
id integer NOT NULL AUTO_INCREMENT PRIMARY KEY,
33
first_name varchar(255),
4-
last_name varchar(255)
4+
last_name varchar(255),
5+
age int
56
) ENGINE=InnoDB;

0 commit comments

Comments
 (0)