Skip to content

Commit 2ad9a8e

Browse files
authored
parser: Generate correct types for SELECT EXISTS (#411)
1 parent 3520e03 commit 2ad9a8e

File tree

6 files changed

+100
-0
lines changed

6 files changed

+100
-0
lines changed

internal/dinosql/parser.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -439,6 +439,8 @@ func parseQuery(c core.Catalog, stmt nodes.Node, source string, rewriteParameter
439439
return nil, errUnsupportedStatementType
440440
}
441441

442+
// spew.Dump(stmt)
443+
442444
rawSQL, err := pluckQuery(source, raw)
443445
if err != nil {
444446
return nil, err
@@ -942,6 +944,18 @@ func outputColumns(qc *QueryCatalog, node nodes.Node) ([]core.Column, error) {
942944
cols = append(cols, core.Column{Name: name, DataType: "any"})
943945
}
944946

947+
case nodes.SubLink:
948+
name := "exists"
949+
if res.Name != nil {
950+
name = *res.Name
951+
}
952+
switch n.SubLinkType {
953+
case nodes.EXISTS_SUBLINK:
954+
cols = append(cols, core.Column{Name: name, DataType: "bool", NotNull: true})
955+
default:
956+
cols = append(cols, core.Column{Name: name, DataType: "any", NotNull: false})
957+
}
958+
945959
case nodes.TypeCast:
946960
if n.TypeName == nil {
947961
return nil, errors.New("no type name type cast")

internal/endtoend/testdata/select_exists/go/db.go

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

internal/endtoend/testdata/select_exists/go/models.go

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

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

Lines changed: 27 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
CREATE TABLE bar (id serial not null);
2+
3+
-- name: BarExists :one
4+
SELECT
5+
EXISTS (
6+
SELECT
7+
1
8+
FROM
9+
bar
10+
where
11+
id = $1
12+
);
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{
2+
"version": "1",
3+
"packages": [{
4+
"path": "go",
5+
"name": "querytest",
6+
"schema": "query.sql",
7+
"queries": "query.sql"
8+
}]
9+
}

0 commit comments

Comments
 (0)