Skip to content

Commit 88b10e2

Browse files
committed
fix error in same name column reference "id" is ambiguous
example: CREATE TABLE IF NOT EXISTS `app` ( `id` INT NOT NULL AUTO_INCREMENT, `parent_app_id` INT NOT NULL DEFAULT 0 COMMENT '合并父应用id', PRIMARY KEY (`id`) USING BTREE ) AUTO_INCREMENT = 105 COMMENT = 'API所属的应用信息'; CREATE TABLE IF NOT EXISTS `user_account` ( `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键id', `name` VARCHAR(255) COMMENT '账号名称', PRIMARY KEY (`id`) USING BTREE ) AUTO_INCREMENT = 1 COMMENT='账号表,存储账号的基本信息和安全评分'; -- name: GetUserAccountAllChildIDs :exec WITH app_user_account_id AS ( SELECT tua.id, tua.name, CAST(IFNULL(tb.id, ta.id) AS SIGNED) AS parent_app_id FROM user_account AS tua LEFT JOIN app AS ta ON ta.id = tua.app_id LEFT JOIN app as tb ON ta.parent_app_id = tb.id WHERE tua.masked_sign = 1 AND tua.deleted_sign = 1 AND ta.masked_sign = 1 AND ta.deleted_sign = 1 ) SELECT a.name FROM app_user_account_id AS a LEFT JOIN app_user_account_id AS b ON b.id IN (sqlc.slice('account_id_set')) AND a.name = b.name AND a.parent_app_id = b.parent_app_id;
1 parent 60f1b88 commit 88b10e2

File tree

2 files changed

+42
-1
lines changed

2 files changed

+42
-1
lines changed

internal/compiler/query_catalog.go

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

33
import (
44
"fmt"
5+
"strings"
56

67
"github.com/sqlc-dev/sqlc/internal/sql/ast"
78
"github.com/sqlc-dev/sqlc/internal/sql/catalog"
@@ -77,6 +78,35 @@ func ConvertColumn(rel *ast.TableName, c *catalog.Column) *Column {
7778
}
7879
}
7980

81+
func RevertConvertColumn(c *Column) *catalog.Column {
82+
out := &catalog.Column{
83+
Name: c.Name,
84+
IsNotNull: c.NotNull,
85+
IsUnsigned: c.Unsigned,
86+
IsArray: c.IsArray,
87+
ArrayDims: c.ArrayDims,
88+
Length: c.Length,
89+
}
90+
if c.Type != nil {
91+
out.Type = *c.Type
92+
}
93+
dataTypes := strings.Split(c.DataType, ".")
94+
if len(dataTypes) == 1 {
95+
out.Type.Name = dataTypes[0]
96+
} else if len(dataTypes) == 2 {
97+
out.Type.Schema = dataTypes[0]
98+
out.Type.Name = dataTypes[1]
99+
}
100+
return out
101+
}
102+
103+
func RevertConvertColumns(columns []*Column) (out []*catalog.Column) {
104+
for i := range columns {
105+
out = append(out, RevertConvertColumn(columns[i]))
106+
}
107+
return
108+
}
109+
80110
func (qc QueryCatalog) GetTable(rel *ast.TableName) (*Table, error) {
81111
cte, exists := qc.ctes[rel.Name]
82112
if exists {

internal/compiler/resolve.go

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,9 +67,20 @@ func (comp *Compiler) resolveCatalogRefs(qc *QueryCatalog, rvs []*ast.RangeVar,
6767
continue
6868
}
6969
// If the table name doesn't exist, first check if it's a CTE
70-
if _, qcerr := qc.GetTable(fqn); qcerr != nil {
70+
cteTable, qcerr := qc.GetTable(fqn)
71+
if qcerr != nil {
7172
return nil, err
7273
}
74+
err = indexTable(catalog.Table{
75+
Rel: cteTable.Rel,
76+
Columns: RevertConvertColumns(cteTable.Columns),
77+
})
78+
if err != nil {
79+
return nil, err
80+
}
81+
if rv.Alias != nil {
82+
aliasMap[*rv.Alias.Aliasname] = fqn
83+
}
7384
continue
7485
}
7586
err = indexTable(table)

0 commit comments

Comments
 (0)