Skip to content

Commit 8aa23ee

Browse files
authored
MySQL: Prevent Panic when WHERE clause contains parenthesis. (#531)
* add test that causes panic * Add fix * Regen tests Co-authored-by: Jessica Bellon <10819486+JessTheBell@users.noreply.github.com>
1 parent dcf1a6c commit 8aa23ee

File tree

3 files changed

+50
-0
lines changed

3 files changed

+50
-0
lines changed

internal/endtoend/testdata/mysql_param/go/query.sql.go

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

internal/endtoend/testdata/mysql_param/query.sql

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,3 +25,9 @@ select first_name, id FROM users LIMIT sqlc.arg(UsersLimit);
2525

2626
/* name: InsertNewUser :exec */
2727
INSERT INTO users (first_name, last_name) VALUES (?, sqlc.arg(user_last_name));
28+
29+
/* name: ListUserParenExpr :many */
30+
SELECT * FROM users WHERE (job_status = 'APPLIED' OR job_status = 'PENDING')
31+
AND id > :lastID
32+
ORDER BY id
33+
LIMIT :usersLimit;

internal/mysql/param.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,12 @@ func (pGen PackageGenerator) paramsInWhereExpr(e sqlparser.SQLNode, tableAliasMa
110110
case *sqlparser.IsExpr:
111111
// TODO: see if there is a use case for params in IS expressions
112112
return []*Param{}, nil
113+
case *sqlparser.ParenExpr:
114+
expr, err := pGen.paramsInWhereExpr(v.Expr, tableAliasMap, defaultTable)
115+
if err != nil {
116+
return nil, err
117+
}
118+
params = append(params, expr...)
113119
default:
114120
panic(fmt.Sprintf("Failed to handle %T in where", v))
115121
}

0 commit comments

Comments
 (0)