Skip to content

Commit 1b69175

Browse files
kyleconroyclaude
andcommitted
Add alias support to VariableTableReference
Support table variable aliases in FROM clause: @var AS alias Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1 parent dd42f28 commit 1b69175

3 files changed

Lines changed: 20 additions & 2 deletions

File tree

ast/variable_table_reference.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package ast
33
// VariableTableReference represents a table variable reference (@var).
44
type VariableTableReference struct {
55
Variable *VariableReference `json:"Variable,omitempty"`
6+
Alias *Identifier `json:"Alias,omitempty"`
67
ForPath bool `json:"ForPath"`
78
}
89

parser/marshal.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9913,6 +9913,9 @@ func variableTableReferenceToJSON(v *ast.VariableTableReference) jsonNode {
99139913
}
99149914
node["Variable"] = varNode
99159915
}
9916+
if v.Alias != nil {
9917+
node["Alias"] = identifierToJSON(v.Alias)
9918+
}
99169919
node["ForPath"] = v.ForPath
99179920
return node
99189921
}

parser/parse_select.go

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2449,10 +2449,24 @@ func (p *Parser) parseSingleTableReference() (ast.TableReference, error) {
24492449
}, nil
24502450
}
24512451

2452-
return &ast.VariableTableReference{
2452+
// Parse optional alias for variable table reference
2453+
varRef := &ast.VariableTableReference{
24532454
Variable: &ast.VariableReference{Name: name},
24542455
ForPath: false,
2455-
}, nil
2456+
}
2457+
if p.curTok.Type == TokenAs {
2458+
p.nextToken()
2459+
varRef.Alias = p.parseIdentifier()
2460+
} else if p.curTok.Type == TokenIdent {
2461+
upper := strings.ToUpper(p.curTok.Literal)
2462+
if upper != "WHERE" && upper != "GROUP" && upper != "HAVING" && upper != "WINDOW" && upper != "ORDER" &&
2463+
upper != "OPTION" && upper != "GO" && upper != "WITH" && upper != "ON" &&
2464+
upper != "JOIN" && upper != "INNER" && upper != "LEFT" && upper != "RIGHT" &&
2465+
upper != "FULL" && upper != "CROSS" && upper != "OUTER" && upper != "FOR" {
2466+
varRef.Alias = p.parseIdentifier()
2467+
}
2468+
}
2469+
return varRef, nil
24562470
}
24572471

24582472
// Check for table-valued function (identifier followed by parentheses that's not a table hint)

0 commit comments

Comments
 (0)