Skip to content

Commit 19dda2b

Browse files
authored
parser: Support columns from subselect statements (#489)
Fixes #467
1 parent 37af47f commit 19dda2b

File tree

6 files changed

+105
-2
lines changed

6 files changed

+105
-2
lines changed

internal/dinosql/parser.go

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -755,8 +755,12 @@ func sourceTables(qc *QueryCatalog, node nodes.Node) ([]core.Table, error) {
755755
}
756756
case nodes.SelectStmt:
757757
list = search(n.FromClause, func(node nodes.Node) bool {
758-
_, ok := node.(nodes.RangeVar)
759-
return ok
758+
switch node.(type) {
759+
case nodes.RangeVar, nodes.RangeSubselect:
760+
return true
761+
default:
762+
return false
763+
}
760764
})
761765
case nodes.TruncateStmt:
762766
list = search(n.Relations, func(node nodes.Node) bool {
@@ -774,6 +778,16 @@ func sourceTables(qc *QueryCatalog, node nodes.Node) ([]core.Table, error) {
774778
var tables []core.Table
775779
for _, item := range list.Items {
776780
switch n := item.(type) {
781+
case nodes.RangeSubselect:
782+
cols, err := outputColumns(qc, n.Subquery)
783+
if err != nil {
784+
return nil, err
785+
}
786+
tables = append(tables, core.Table{
787+
Name: *n.Alias.Aliasname,
788+
Columns: cols,
789+
})
790+
777791
case nodes.RangeVar:
778792
fqn, err := catalog.ParseRange(&n)
779793
if err != nil {

internal/endtoend/testdata/subquery_calculated_column/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/subquery_calculated_column/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/subquery_calculated_column/go/query.sql.go

Lines changed: 35 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
CREATE TABLE foo (a int, b int);
2+
3+
-- name: SubqueryCalcColumn :many
4+
SELECT sum FROM (SELECT a + b AS sum FROM foo) AS f;
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)