Skip to content

Commit

Permalink
fix(mysql): Handle simplified CASE statements (#2852)
Browse files Browse the repository at this point in the history
MySQL and PostgreSQL now have the same behavior, generating a nullable string parameter. That behavior isn't right, as we'd expect the parameter to be a boolean. This can be fixed by using a type case or the new annotations in #2800.

Fixes #2847
  • Loading branch information
kyleconroy committed Oct 13, 2023
1 parent 3ae9e3c commit 9313007
Show file tree
Hide file tree
Showing 14 changed files with 169 additions and 0 deletions.
1 change: 1 addition & 0 deletions internal/endtoend/testdata/case_value_param/issue.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
https://github.com/sqlc-dev/sqlc/issues/2847
31 changes: 31 additions & 0 deletions internal/endtoend/testdata/case_value_param/mysql/go/db.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

14 changes: 14 additions & 0 deletions internal/endtoend/testdata/case_value_param/mysql/go/models.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

21 changes: 21 additions & 0 deletions internal/endtoend/testdata/case_value_param/mysql/go/query.sql.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions internal/endtoend/testdata/case_value_param/mysql/query.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
-- name: Update :exec
UPDATE testing
SET value = CASE ? WHEN true THEN 'Hello' WHEN false THEN 'Goodbye' ELSE value END;
4 changes: 4 additions & 0 deletions internal/endtoend/testdata/case_value_param/mysql/schema.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
CREATE TABLE testing (
id int PRIMARY KEY,
value text
);
9 changes: 9 additions & 0 deletions internal/endtoend/testdata/case_value_param/mysql/sqlc.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
version: "2"
sql:
- engine: "mysql"
schema: "schema.sql"
queries: "query.sql"
gen:
go:
package: "querytest"
out: "go"
32 changes: 32 additions & 0 deletions internal/endtoend/testdata/case_value_param/postgresql/go/db.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
-- name: Update :exec
UPDATE testing
SET value = CASE $1 WHEN true THEN 'Hello' WHEN false THEN 'Goodbye' ELSE value END;
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
CREATE TABLE testing (
id int PRIMARY KEY,
value text
);
10 changes: 10 additions & 0 deletions internal/endtoend/testdata/case_value_param/postgresql/sqlc.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
version: "2"
sql:
- engine: "postgresql"
schema: "schema.sql"
queries: "query.sql"
gen:
go:
package: "querytest"
out: "go"
sql_package: "pgx/v5"
1 change: 1 addition & 0 deletions internal/engine/dolphin/convert.go
Original file line number Diff line number Diff line change
Expand Up @@ -745,6 +745,7 @@ func (c *cc) convertCaseExpr(n *pcast.CaseExpr) ast.Node {
list.Items = append(list.Items, c.convertWhenClause(n))
}
return &ast.CaseExpr{
Arg: c.convert(n.Value),
Args: list,
Defresult: c.convert(n.ElseClause),
Location: n.OriginTextPosition(),
Expand Down

0 comments on commit 9313007

Please sign in to comment.