Skip to content

Commit

Permalink
Add FINAL processing to SELECT and fixed conversion of SELECT express…
Browse files Browse the repository at this point in the history
…ion to string (#34)
  • Loading branch information
Dolso authored Jan 30, 2024
1 parent 0d0aad2 commit 9ef9ef7
Show file tree
Hide file tree
Showing 16 changed files with 64 additions and 21 deletions.
8 changes: 8 additions & 0 deletions parser/ast.go
Original file line number Diff line number Diff line change
Expand Up @@ -2480,6 +2480,7 @@ type TableExpr struct {
TableEnd Pos
Alias *AliasExpr
Expr Expr
HasFinal bool
}

func (t *TableExpr) Pos() Pos {
Expand All @@ -2497,6 +2498,9 @@ func (t *TableExpr) String(level int) string {
builder.WriteByte(' ')
builder.WriteString(t.Alias.String(level + 1))
}
if t.HasFinal {
builder.WriteString(" FINAL")
}
return builder.String()
}

Expand Down Expand Up @@ -3139,6 +3143,10 @@ func (s *SelectQuery) String(level int) string { // nolint: funlen
builder.WriteString(NewLine(level))
builder.WriteString(s.LimitBy.String(level))
}
if s.Limit != nil {
builder.WriteString(NewLine(level))
builder.WriteString(s.Limit.String(level))
}
if s.Settings != nil {
builder.WriteString(NewLine(level))
builder.WriteString(s.Settings.String(level))
Expand Down
14 changes: 14 additions & 0 deletions parser/parser_query.go
Original file line number Diff line number Diff line change
Expand Up @@ -264,10 +264,24 @@ func (p *Parser) parseTableExpr(pos Pos) (*TableExpr, error) {
}
tableEnd = expr.End()
}

isFinalExist := false
if asToken := p.tryConsumeKeyword(KeywordFinal); asToken != nil {
switch expr.(type) {
case *TableFunctionExpr:
return nil, errors.New("tablefunction doesn't support FINAL")
case *SelectQuery:
return nil, errors.New("subquery doesn't support FINAL")
}
isFinalExist = true
tableEnd = expr.End()
}

return &TableExpr{
TablePos: pos,
TableEnd: tableEnd,
Expr: expr,
HasFinal: isFinalExist,
}, nil
}

Expand Down
3 changes: 2 additions & 1 deletion parser/testdata/ddl/output/bug_001.sql.golden.json
Original file line number Diff line number Diff line change
Expand Up @@ -450,7 +450,8 @@
"NamePos": 600,
"NameEnd": 605
}
}
},
"HasFinal": false
}
},
"ArrayJoin": null,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,8 @@
"NamePos": 93,
"NameEnd": 101
}
}
},
"HasFinal": false
}
},
"ArrayJoin": null,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -347,7 +347,8 @@
"NamePos": 370,
"NameEnd": 371
}
}
},
"HasFinal": false
}
},
"ArrayJoin": null,
Expand Down Expand Up @@ -433,7 +434,8 @@
"NamePos": 444,
"NameEnd": 447
}
}
},
"HasFinal": false
}
},
"ArrayJoin": null,
Expand Down
3 changes: 2 additions & 1 deletion parser/testdata/ddl/output/create_view_basic.sql.golden.json
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,8 @@
"NamePos": 96,
"NameEnd": 104
}
}
},
"HasFinal": false
}
},
"ArrayJoin": null,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,8 @@
"NamePos": 185,
"NameEnd": 199
}
}
},
"HasFinal": false
}
},
"ArrayJoin": null,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,8 @@
"NamePos": 97,
"NameEnd": 103
}
}
},
"HasFinal": false
}
},
"ArrayJoin": null,
Expand Down
3 changes: 2 additions & 1 deletion parser/testdata/query/output/select_simple.sql.golden.json
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,8 @@
"NamePos": 107,
"NameEnd": 119
}
}
},
"HasFinal": false
}
},
"ArrayJoin": null,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,8 @@
"NamePos": 53,
"NameEnd": 58
}
}
},
"HasFinal": false
}
},
"ArrayJoin": null,
Expand Down Expand Up @@ -178,7 +179,8 @@
"NamePos": 129,
"NameEnd": 133
}
}
},
"HasFinal": false
}
},
"ArrayJoin": null,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,8 @@
"NamePos": 24,
"NameEnd": 36
}
}
},
"HasFinal": false
}
},
"ArrayJoin": null,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,8 @@
"NamePos": 35,
"NameEnd": 47
}
}
},
"HasFinal": false
}
},
"ArrayJoin": null,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,8 @@
"NamePos": 35,
"NameEnd": 47
}
}
},
"HasFinal": false
}
},
"ArrayJoin": null,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,8 @@
"NamePos": 29,
"NameEnd": 38
}
}
},
"HasFinal": false
}
},
"ArrayJoin": null,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,8 @@
"NamePos": 33,
"NameEnd": 35
}
}
},
"HasFinal": false
}
},
"ArrayJoin": null,
Expand Down Expand Up @@ -105,7 +106,8 @@
"NamePos": 66,
"NameEnd": 68
}
}
},
"HasFinal": false
}
},
"ArrayJoin": null,
Expand Down Expand Up @@ -195,7 +197,8 @@
"NamePos": 122,
"NameEnd": 124
}
}
},
"HasFinal": false
},
"Right": {
"JoinPos": 125,
Expand All @@ -211,7 +214,8 @@
"NamePos": 125,
"NameEnd": 129
}
}
},
"HasFinal": false
},
"Right": {
"TablePos": 130,
Expand All @@ -225,7 +229,8 @@
"NamePos": 130,
"NameEnd": 134
}
}
},
"HasFinal": false
},
"JoinType": "",
"SampleRatio": null,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,8 @@
"NamePos": 32,
"NameEnd": 43
}
}
},
"HasFinal": false
}
},
"ArrayJoin": null,
Expand Down Expand Up @@ -88,7 +89,8 @@
"NamePos": 91,
"NameEnd": 109
}
}
},
"HasFinal": false
}
},
"ArrayJoin": null,
Expand Down

0 comments on commit 9ef9ef7

Please sign in to comment.