Skip to content

Commit 4112af5

Browse files
authored
fix(engine/sqlite): added function to convert cast node (#2470)
* fix(engine/sqlite): added function to convert cast node fix #2424 * test: add endtoend
1 parent dfe6aaa commit 4112af5

File tree

6 files changed

+124
-0
lines changed

6 files changed

+124
-0
lines changed

internal/endtoend/testdata/cast_param/sqlite/go/db.go

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

internal/endtoend/testdata/cast_param/sqlite/go/models.go

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

internal/endtoend/testdata/cast_param/sqlite/go/query.sql.go

Lines changed: 39 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
create table my_table
2+
(
3+
invalid boolean,
4+
foo varchar
5+
);
6+
7+
-- name: GetData :many
8+
select *
9+
from my_table
10+
where (cast(sqlc.arg(allow_invalid) as boolean) or not invalid);
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{
2+
"version": "1",
3+
"packages": [
4+
{
5+
"path": "go",
6+
"engine": "sqlite",
7+
"schema": "query.sql",
8+
"queries": "query.sql",
9+
"name": "querytest"
10+
}
11+
]
12+
}

internal/engine/sqlite/convert.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -887,6 +887,21 @@ func (c *cc) convertBetweenExpr(n *parser.Expr_betweenContext) ast.Node {
887887
}
888888
}
889889

890+
func (c *cc) convertCastExpr(n *parser.Expr_castContext) ast.Node {
891+
name := n.Type_name().GetText()
892+
return &ast.TypeCast{
893+
Arg: c.convert(n.Expr()),
894+
TypeName: &ast.TypeName{
895+
Name: name,
896+
Names: &ast.List{Items: []ast.Node{
897+
NewIdentifer(name),
898+
}},
899+
ArrayBounds: &ast.List{},
900+
},
901+
Location: n.GetStart().GetStart(),
902+
}
903+
}
904+
890905
func (c *cc) convert(node node) ast.Node {
891906
switch n := node.(type) {
892907

@@ -966,6 +981,9 @@ func (c *cc) convert(node node) ast.Node {
966981
case *parser.Update_stmt_limitedContext:
967982
return c.convertUpdate_stmtContext(n)
968983

984+
case *parser.Expr_castContext:
985+
return c.convertCastExpr(n)
986+
969987
default:
970988
return todo("convert(case=default)", n)
971989
}

0 commit comments

Comments
 (0)