Skip to content

Commit 0c9db97

Browse files
committed
compiler: support UNION query
This commit adds support for UNION query in the compiler. It adds test cases for UNION in a SELECT and in a recursive CTE. It fixes #568, #723 and #778.
1 parent 9207cae commit 0c9db97

File tree

11 files changed

+212
-0
lines changed

11 files changed

+212
-0
lines changed

internal/compiler/output_columns.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,11 @@ func outputColumns(qc *QueryCatalog, node ast.Node) ([]*Column, error) {
3737
targets = n.ReturningList
3838
case *ast.SelectStmt:
3939
targets = n.TargetList
40+
// For UNION queries, targets is empty and we need to look for the
41+
// columns in Largs.
42+
if len(targets.Items) == 0 && n.Larg != nil {
43+
return outputColumns(qc, n.Larg)
44+
}
4045
case *ast.TruncateStmt:
4146
targets = &ast.List{}
4247
case *ast.UpdateStmt:
@@ -199,6 +204,7 @@ func outputColumns(qc *QueryCatalog, node ast.Node) ([]*Column, error) {
199204

200205
}
201206
}
207+
202208
return cols, nil
203209
}
204210

internal/endtoend/testdata/cte_recursive/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/cte_recursive/go/models.go

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

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

Lines changed: 48 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
CREATE TABLE bar (id INT NOT NULL, parent_id INT);
2+
3+
-- name: CTERecursive :many
4+
WITH RECURSIVE cte AS (
5+
SELECT b.* FROM bar AS b
6+
WHERE b.id = $1
7+
UNION ALL
8+
SELECT b.*
9+
FROM bar AS b, cte AS c
10+
WHERE b.parent_id = c.id
11+
) SELECT * FROM cte;
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{
2+
"version": "1",
3+
"packages": [
4+
{
5+
"path": "go",
6+
"name": "querytest",
7+
"schema": "query.sql",
8+
"queries": "query.sql"
9+
}
10+
]
11+
}

internal/endtoend/testdata/select_union/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_union/go/models.go

Lines changed: 12 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_union/go/query.sql.go

Lines changed: 37 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
CREATE TABLE foo (a text, b text);
2+
3+
-- name: SelectUnion :many
4+
SELECT * FROM foo
5+
UNION
6+
SELECT * FROM foo;
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{
2+
"version": "1",
3+
"packages": [
4+
{
5+
"path": "go",
6+
"name": "querytest",
7+
"schema": "query.sql",
8+
"queries": "query.sql"
9+
}
10+
]
11+
}

0 commit comments

Comments
 (0)