Skip to content

Commit 178e449

Browse files
committed
Bugfixes in handling unnamed subqueries
1 parent 7d1b0c6 commit 178e449

File tree

4 files changed

+48
-7
lines changed

4 files changed

+48
-7
lines changed

internal/compiler/output_columns.go

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package compiler
33
import (
44
"errors"
55
"fmt"
6+
"math/rand"
67

78
"github.com/sqlc-dev/sqlc/internal/sql/ast"
89
"github.com/sqlc-dev/sqlc/internal/sql/astutils"
@@ -596,10 +597,14 @@ func (c *Compiler) sourceTables(qc *QueryCatalog, node ast.Node) ([]*Table, erro
596597
if err != nil {
597598
return nil, err
598599
}
600+
rel := &ast.TableName{}
601+
if n.Alias != nil && n.Alias.Aliasname != nil {
602+
rel.Name = *n.Alias.Aliasname
603+
} else {
604+
rel.Name = fmt.Sprintf("unnamed_subquery_%d", rand.Int63())
605+
}
599606
tables = append(tables, &Table{
600-
Rel: &ast.TableName{
601-
Name: *n.Alias.Aliasname,
602-
},
607+
Rel: rel,
603608
Columns: cols,
604609
})
605610

internal/compiler/query_catalog.go

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package compiler
22

33
import (
44
"fmt"
5+
"math/rand"
56

67
"github.com/sqlc-dev/sqlc/internal/sql/ast"
78
"github.com/sqlc-dev/sqlc/internal/sql/catalog"
@@ -78,7 +79,7 @@ func (comp *Compiler) buildQueryCatalog(c *catalog.Catalog, node ast.Node, embed
7879
return nil, err
7980
}
8081
var names []string
81-
if rs.Alias.Colnames != nil {
82+
if rs.Alias != nil && rs.Alias.Colnames != nil {
8283
for _, item := range rs.Alias.Colnames.Items {
8384
if val, ok := item.(*ast.String); ok {
8485
names = append(names, val.Str)
@@ -87,14 +88,19 @@ func (comp *Compiler) buildQueryCatalog(c *catalog.Catalog, node ast.Node, embed
8788
}
8889
}
8990
}
90-
rel := &ast.TableName{Name: *rs.Alias.Aliasname}
91+
rel := &ast.TableName{}
92+
if rs.Alias != nil && rs.Alias.Aliasname != nil {
93+
rel.Name = *rs.Alias.Aliasname
94+
} else {
95+
rel.Name = fmt.Sprintf("unaliased_table_%d", rand.Int63())
96+
}
9197
for i := range cols {
9298
cols[i].Table = rel
9399
if len(names) > i {
94100
cols[i].Name = names[i]
95101
}
96102
}
97-
qc.fromClauses[*rs.Alias.Aliasname] = &Table{
103+
qc.fromClauses[rel.Name] = &Table{
98104
Rel: rel,
99105
Columns: cols,
100106
}

internal/endtoend/testdata/join_alias/mysql/go/query.sql.go

Lines changed: 28 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/endtoend/testdata/join_alias/mysql/query.sql

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,7 @@ WHERE f.id = ?;
1414
SELECT * FROM (SELECT 1 AS n) AS x WHERE x.n <= ?;
1515

1616
-- name: ColumnAlias :many
17+
SELECT * FROM (SELECT 1 AS n) WHERE n <= ?;
18+
19+
-- name: ColumnAndQueryAlias :many
1720
SELECT * FROM (SELECT 1 AS n) AS x WHERE n <= ?;

0 commit comments

Comments
 (0)