Skip to content

Commit 3d23cd9

Browse files
authored
Generate valid code for MySQL named parameters (#805)
1 parent db397b7 commit 3d23cd9

File tree

5 files changed

+61
-12
lines changed

5 files changed

+61
-12
lines changed

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

Lines changed: 1 addition & 1 deletion
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: 49 additions & 8 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,13 @@
1-
/* name: SelectUserArg :many */
1+
/* name: SelectUserByID :many */
22
SELECT first_name from
33
users where (sqlc.arg(id) = id OR sqlc.arg(id) = 0);
44

5+
/* name: SelectUserByName :many */
6+
SELECT first_name
7+
FROM users
8+
WHERE first_name = sqlc.arg(name)
9+
OR last_name = sqlc.arg(name);
10+
511
/* name: SelectUserQuestion :many */
612
SELECT first_name from
713
users where (? = id OR ? = 0);
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
CREATE TABLE users (
22
id integer NOT NULL AUTO_INCREMENT PRIMARY KEY,
3-
first_name varchar(255) NOT NULL,
3+
first_name varchar(255),
44
last_name varchar(255)
55
) ENGINE=InnoDB;

internal/sql/rewrite/parameters.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@ func NamedParameters(engine config.Engine, raw *ast.RawStmt) (*ast.RawStmt, map[
4848
return raw, map[int]string{}, nil
4949
}
5050

51+
hasNamedParameterSupport := engine != config.EngineMySQL
52+
5153
args := map[string]int{}
5254
argn := 0
5355
var edits []source.Edit
@@ -58,7 +60,7 @@ func NamedParameters(engine config.Engine, raw *ast.RawStmt) (*ast.RawStmt, map[
5860
case named.IsParamFunc(node):
5961
fun := node.(*ast.FuncCall)
6062
param, isConst := flatten(fun.Args)
61-
if num, ok := args[param]; ok {
63+
if num, ok := args[param]; ok && hasNamedParameterSupport {
6264
cr.Replace(&ast.ParamRef{
6365
Number: num,
6466
Location: fun.Location,

0 commit comments

Comments
 (0)