Skip to content

Commit 1ce23c5

Browse files
committed
CR
1 parent 60d421b commit 1ce23c5

6 files changed

Lines changed: 52 additions & 50 deletions

File tree

parser/ast.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5201,7 +5201,7 @@ func (s *SelectQuery) Accept(visitor ASTVisitor) error {
52015201
}
52025202

52035203
type DistinctOn struct {
5204-
Exprs []Expr
5204+
Idents []*NestedIdentifier
52055205
DistinctOnPos Pos
52065206
DistinctOnEnd Pos
52075207
}
@@ -5217,8 +5217,8 @@ func (s *DistinctOn) End() Pos {
52175217
func (s *DistinctOn) Accept(visitor ASTVisitor) error {
52185218
visitor.Enter(s)
52195219
defer visitor.Leave(s)
5220-
for _, expr := range s.Exprs {
5221-
if err := expr.Accept(visitor); err != nil {
5220+
for _, ident := range s.Idents {
5221+
if err := ident.Accept(visitor); err != nil {
52225222
return err
52235223
}
52245224
}

parser/format.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1344,11 +1344,11 @@ func (d *DictionarySourceClause) FormatSQL(formatter *Formatter) {
13441344

13451345
func (s *DistinctOn) FormatSQL(formatter *Formatter) {
13461346
formatter.WriteString("ON (")
1347-
for i, expr := range s.Exprs {
1347+
for i, ident := range s.Idents {
13481348
if i > 0 {
13491349
formatter.WriteString(", ")
13501350
}
1351-
formatter.WriteExpr(expr)
1351+
formatter.WriteExpr(ident)
13521352
}
13531353
formatter.WriteByte(')')
13541354
}

parser/parser_query.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -89,28 +89,28 @@ func (p *Parser) parseDistinctOn(pos Pos) (*DistinctOn, error) {
8989
return nil, err
9090
}
9191

92-
expr, err := p.parseExpr(p.Pos())
92+
col, err := p.ParseNestedIdentifier(p.Pos())
9393
if err != nil {
9494
return nil, err
9595
}
96-
exprs := []Expr{expr}
96+
idents := []*NestedIdentifier{col}
9797

9898
for p.matchTokenKind(TokenKindComma) {
9999
_ = p.lexer.consumeToken()
100100

101-
expr, err = p.parseExpr(p.Pos())
101+
col, err = p.ParseNestedIdentifier(p.Pos())
102102
if err != nil {
103103
return nil, err
104104
}
105-
exprs = append(exprs, expr)
105+
idents = append(idents, col)
106106
}
107107

108108
if err := p.expectTokenKind(TokenKindRParen); err != nil {
109109
return nil, err
110110
}
111111

112112
return &DistinctOn{
113-
Exprs: exprs,
113+
Idents: idents,
114114
DistinctOnPos: pos,
115115
DistinctOnEnd: p.Pos(),
116116
}, nil

parser/testdata/query/output/select_with_distinct_on_dotted_columns.sql.golden.json

Lines changed: 25 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -6,38 +6,34 @@
66
"Top": null,
77
"HasDistinct": true,
88
"DistinctOn": {
9-
"Exprs": [
9+
"Idents": [
1010
{
11-
"Fields": [
12-
{
13-
"Name": "t",
14-
"QuoteType": 1,
15-
"NamePos": 20,
16-
"NameEnd": 21
17-
},
18-
{
19-
"Name": "id",
20-
"QuoteType": 1,
21-
"NamePos": 22,
22-
"NameEnd": 24
23-
}
24-
]
11+
"Ident": {
12+
"Name": "t",
13+
"QuoteType": 1,
14+
"NamePos": 20,
15+
"NameEnd": 21
16+
},
17+
"DotIdent": {
18+
"Name": "id",
19+
"QuoteType": 1,
20+
"NamePos": 22,
21+
"NameEnd": 24
22+
}
2523
},
2624
{
27-
"Fields": [
28-
{
29-
"Name": "t",
30-
"QuoteType": 1,
31-
"NamePos": 26,
32-
"NameEnd": 27
33-
},
34-
{
35-
"Name": "name",
36-
"QuoteType": 1,
37-
"NamePos": 28,
38-
"NameEnd": 32
39-
}
40-
]
25+
"Ident": {
26+
"Name": "t",
27+
"QuoteType": 1,
28+
"NamePos": 26,
29+
"NameEnd": 27
30+
},
31+
"DotIdent": {
32+
"Name": "name",
33+
"QuoteType": 1,
34+
"NamePos": 28,
35+
"NameEnd": 32
36+
}
4137
}
4238
],
4339
"DistinctOnPos": 16,

parser/testdata/query/output/select_with_distinct_on_keyword.sql.golden.json

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,24 @@
66
"Top": null,
77
"HasDistinct": true,
88
"DistinctOn": {
9-
"Exprs": [
9+
"Idents": [
1010
{
11-
"Name": "album",
12-
"QuoteType": 1,
13-
"NamePos": 19,
14-
"NameEnd": 24
11+
"Ident": {
12+
"Name": "album",
13+
"QuoteType": 1,
14+
"NamePos": 19,
15+
"NameEnd": 24
16+
},
17+
"DotIdent": null
1518
},
1619
{
17-
"Name": "artist",
18-
"QuoteType": 1,
19-
"NamePos": 25,
20-
"NameEnd": 31
20+
"Ident": {
21+
"Name": "artist",
22+
"QuoteType": 1,
23+
"NamePos": 25,
24+
"NameEnd": 31
25+
},
26+
"DotIdent": null
2127
}
2228
],
2329
"DistinctOnPos": 16,

parser/walk.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1503,8 +1503,8 @@ func Walk(node Expr, fn WalkFunc) bool {
15031503
return false
15041504
}
15051505
case *DistinctOn:
1506-
for _, expr := range n.Exprs {
1507-
if !Walk(expr, fn) {
1506+
for _, ident := range n.Idents {
1507+
if !Walk(ident, fn) {
15081508
return false
15091509
}
15101510
}

0 commit comments

Comments
 (0)