Skip to content

Commit eaf39a1

Browse files
committed
Add support of MATERIALIZED|ALIAS expr for the column def
1 parent b823617 commit eaf39a1

20 files changed

+470
-275
lines changed

parser/ast.go

Lines changed: 26 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -2461,35 +2461,6 @@ func (o *ClusterClause) Accept(visitor ASTVisitor) error {
24612461
return visitor.VisitOnClusterExpr(o)
24622462
}
24632463

2464-
type DefaultExpr struct {
2465-
DefaultPos Pos
2466-
Expr Expr
2467-
}
2468-
2469-
func (d *DefaultExpr) Pos() Pos {
2470-
return d.DefaultPos
2471-
}
2472-
2473-
func (d *DefaultExpr) End() Pos {
2474-
return d.Expr.End()
2475-
}
2476-
2477-
func (d *DefaultExpr) String(level int) string {
2478-
var builder strings.Builder
2479-
builder.WriteString("DEFAULT ")
2480-
builder.WriteString(d.Expr.String(level + 1))
2481-
return builder.String()
2482-
}
2483-
2484-
func (d *DefaultExpr) Accept(visitor ASTVisitor) error {
2485-
visitor.enter(d)
2486-
defer visitor.leave(d)
2487-
if err := d.Expr.Accept(visitor); err != nil {
2488-
return err
2489-
}
2490-
return visitor.VisitDefaultExpr(d)
2491-
}
2492-
24932464
type PartitionClause struct {
24942465
PartitionPos Pos
24952466
Expr Expr
@@ -3015,7 +2986,9 @@ type ColumnExpr struct {
30152986
NotNull *NotNullLiteral
30162987
Nullable *NullLiteral
30172988

3018-
Property Expr
2989+
DefaultExpr Expr
2990+
MaterializedExpr Expr
2991+
AliasExpr Expr
30192992

30202993
Codec *CompressionCodec
30212994
TTL Expr
@@ -3044,9 +3017,17 @@ func (c *ColumnExpr) String(level int) string {
30443017
} else if c.Nullable != nil {
30453018
builder.WriteString(" NULL")
30463019
}
3047-
if c.Property != nil {
3048-
builder.WriteByte(' ')
3049-
builder.WriteString(c.Property.String(level))
3020+
if c.DefaultExpr != nil {
3021+
builder.WriteString(" DEFAULT ")
3022+
builder.WriteString(c.DefaultExpr.String(level))
3023+
}
3024+
if c.MaterializedExpr != nil {
3025+
builder.WriteString(" MATERIALIZED ")
3026+
builder.WriteString(c.MaterializedExpr.String(level))
3027+
}
3028+
if c.AliasExpr != nil {
3029+
builder.WriteString(" ALIAS ")
3030+
builder.WriteString(c.AliasExpr.String(level))
30503031
}
30513032
if c.Codec != nil {
30523033
builder.WriteByte(' ')
@@ -3084,8 +3065,18 @@ func (c *ColumnExpr) Accept(visitor ASTVisitor) error {
30843065
return err
30853066
}
30863067
}
3087-
if c.Property != nil {
3088-
if err := c.Property.Accept(visitor); err != nil {
3068+
if c.DefaultExpr != nil {
3069+
if err := c.DefaultExpr.Accept(visitor); err != nil {
3070+
return err
3071+
}
3072+
}
3073+
if c.MaterializedExpr != nil {
3074+
if err := c.MaterializedExpr.Accept(visitor); err != nil {
3075+
return err
3076+
}
3077+
}
3078+
if c.AliasExpr != nil {
3079+
if err := c.AliasExpr.Accept(visitor); err != nil {
30893080
return err
30903081
}
30913082
}

parser/ast_visitor.go

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,6 @@ type ASTVisitor interface {
5454
VisitTableArgListExpr(expr *TableArgListExpr) error
5555
VisitTableFunctionExpr(expr *TableFunctionExpr) error
5656
VisitOnClusterExpr(expr *ClusterClause) error
57-
VisitDefaultExpr(expr *DefaultExpr) error
5857
VisitPartitionExpr(expr *PartitionClause) error
5958
VisitPartitionByExpr(expr *PartitionByClause) error
6059
VisitPrimaryKeyExpr(expr *PrimaryKeyClause) error
@@ -541,13 +540,6 @@ func (v *DefaultASTVisitor) VisitOnClusterExpr(expr *ClusterClause) error {
541540
return nil
542541
}
543542

544-
func (v *DefaultASTVisitor) VisitDefaultExpr(expr *DefaultExpr) error {
545-
if v.Visit != nil {
546-
return v.Visit(expr)
547-
}
548-
return nil
549-
}
550-
551543
func (v *DefaultASTVisitor) VisitPartitionExpr(expr *PartitionClause) error {
552544
if v.Visit != nil {
553545
return v.Visit(expr)

parser/parser_column.go

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -368,16 +368,6 @@ func (p *Parser) parseColumnExpr(pos Pos) (Expr, error) { //nolint:funlen
368368
}
369369
}
370370

371-
func (p *Parser) tryParseTableColumnPropertyExpr(pos Pos) (Expr, error) {
372-
switch {
373-
case p.matchKeyword(KeywordDefault):
374-
return p.parseDefaultExpr(pos)
375-
case p.matchKeyword(KeywordMaterialized):
376-
case p.matchKeyword(KeywordAlias):
377-
}
378-
return nil, nil // nolint
379-
}
380-
381371
func (p *Parser) parseColumnCastExpr(pos Pos) (Expr, error) {
382372
if err := p.consumeKeyword(KeywordCast); err != nil {
383373
return nil, err

parser/parser_table.go

Lines changed: 11 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -435,13 +435,20 @@ func (p *Parser) parseTableColumnExpr(pos Pos) (*ColumnExpr, error) {
435435
columnEnd = notNull.End()
436436
}
437437

438-
property, err := p.tryParseTableColumnPropertyExpr(p.Pos())
438+
switch {
439+
case p.tryConsumeKeyword(KeywordDefault) != nil:
440+
column.DefaultExpr, err = p.parseExpr(p.Pos())
441+
columnEnd = column.DefaultExpr.End()
442+
case p.tryConsumeKeyword(KeywordMaterialized) != nil:
443+
column.MaterializedExpr, err = p.parseExpr(p.Pos())
444+
columnEnd = column.MaterializedExpr.End()
445+
case p.tryConsumeKeyword(KeywordAlias) != nil:
446+
column.AliasExpr, err = p.parseExpr(p.Pos())
447+
columnEnd = column.AliasExpr.End()
448+
}
439449
if err != nil {
440450
return nil, err
441451
}
442-
if property != nil {
443-
columnEnd = property.End()
444-
}
445452

446453
comment, err := p.tryParseColumnComment(p.Pos())
447454
if err != nil {
@@ -464,7 +471,6 @@ func (p *Parser) parseTableColumnExpr(pos Pos) (*ColumnExpr, error) {
464471
column.Codec = codec
465472
column.Nullable = nullable
466473
column.NotNull = notNull
467-
column.Property = property
468474
return column, nil
469475
}
470476

@@ -802,20 +808,6 @@ func (p *Parser) parseSettingsExprList(pos Pos) (*SettingExprList, error) {
802808
}, nil
803809
}
804810

805-
func (p *Parser) parseDefaultExpr(pos Pos) (Expr, error) {
806-
if err := p.consumeKeyword(KeywordDefault); err != nil {
807-
return nil, err
808-
}
809-
expr, err := p.parseExpr(pos)
810-
if err != nil {
811-
return nil, err
812-
}
813-
return &DefaultExpr{
814-
DefaultPos: pos,
815-
Expr: expr,
816-
}, nil
817-
}
818-
819811
func (p *Parser) parseDestinationClause(pos Pos) (*DestinationClause, error) {
820812
if err := p.consumeKeyword(KeywordTo); err != nil {
821813
return nil, err

parser/testdata/ddl/create_table_basic.sql

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,9 @@ CREATE TABLE IF NOT EXISTS test.events_local (
1919
f74 Int64,
2020
f75 String
2121
),
22-
f8 Datetime DEFAULT now()
22+
f8 Datetime DEFAULT now(),
23+
f9 String MATERIALIZED toString(f7['f70']),
24+
f10 String ALIAS f11,
2325
) ENGINE = MergeTree
2426
PRIMARY KEY (f0, f1, f2)
2527
PARTITION BY toYYYYMMDD(f3)

parser/testdata/ddl/format/create_table_basic.sql

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,9 @@ CREATE TABLE IF NOT EXISTS test.events_local (
2020
f74 Int64,
2121
f75 String
2222
),
23-
f8 Datetime DEFAULT now()
23+
f8 Datetime DEFAULT now(),
24+
f9 String MATERIALIZED toString(f7['f70']),
25+
f10 String ALIAS f11,
2426
) ENGINE = MergeTree
2527
PRIMARY KEY (f0, f1, f2)
2628
PARTITION BY toYYYYMMDD(f3)
@@ -44,7 +46,9 @@ CREATE TABLE IF NOT EXISTS test.events_local
4446
f73 Int64,
4547
f74 Int64,
4648
f75 String),
47-
f8 Datetime DEFAULT now()
49+
f8 Datetime DEFAULT now(),
50+
f9 String MATERIALIZED toString(f7['f70']),
51+
f10 String ALIAS f11
4852
)
4953
ENGINE = MergeTree
5054
PRIMARY KEY (f0, f1, f2)

parser/testdata/ddl/output/alter_table_add_column.sql.golden.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,9 @@
5050
},
5151
"NotNull": null,
5252
"Nullable": null,
53-
"Property": null,
53+
"DefaultExpr": null,
54+
"MaterializedExpr": null,
55+
"AliasExpr": null,
5456
"Codec": null,
5557
"TTL": null,
5658
"Comment": null,

parser/testdata/ddl/output/alter_table_modify_column.sql.golden.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,9 @@
3939
},
4040
"NotNull": null,
4141
"Nullable": null,
42-
"Property": null,
42+
"DefaultExpr": null,
43+
"MaterializedExpr": null,
44+
"AliasExpr": null,
4345
"Codec": null,
4446
"TTL": null,
4547
"Comment": {

parser/testdata/ddl/output/alter_table_modify_column_remove.sql.golden.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,9 @@
3232
"Type": null,
3333
"NotNull": null,
3434
"Nullable": null,
35-
"Property": null,
35+
"DefaultExpr": null,
36+
"MaterializedExpr": null,
37+
"AliasExpr": null,
3638
"Codec": null,
3739
"TTL": null,
3840
"Comment": null,

parser/testdata/ddl/output/attach_table_basic.sql.golden.json

Lines changed: 39 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,9 @@
5252
},
5353
"NotNull": null,
5454
"Nullable": null,
55-
"Property": null,
55+
"DefaultExpr": null,
56+
"MaterializedExpr": null,
57+
"AliasExpr": null,
5658
"Codec": null,
5759
"TTL": null,
5860
"Comment": null,
@@ -80,7 +82,9 @@
8082
},
8183
"NotNull": null,
8284
"Nullable": null,
83-
"Property": null,
85+
"DefaultExpr": null,
86+
"MaterializedExpr": null,
87+
"AliasExpr": null,
8488
"Codec": null,
8589
"TTL": null,
8690
"Comment": null,
@@ -108,7 +112,9 @@
108112
},
109113
"NotNull": null,
110114
"Nullable": null,
111-
"Property": null,
115+
"DefaultExpr": null,
116+
"MaterializedExpr": null,
117+
"AliasExpr": null,
112118
"Codec": null,
113119
"TTL": null,
114120
"Comment": null,
@@ -136,7 +142,9 @@
136142
},
137143
"NotNull": null,
138144
"Nullable": null,
139-
"Property": null,
145+
"DefaultExpr": null,
146+
"MaterializedExpr": null,
147+
"AliasExpr": null,
140148
"Codec": null,
141149
"TTL": null,
142150
"Comment": null,
@@ -164,7 +172,9 @@
164172
},
165173
"NotNull": null,
166174
"Nullable": null,
167-
"Property": null,
175+
"DefaultExpr": null,
176+
"MaterializedExpr": null,
177+
"AliasExpr": null,
168178
"Codec": null,
169179
"TTL": null,
170180
"Comment": null,
@@ -212,7 +222,9 @@
212222
},
213223
"NotNull": null,
214224
"Nullable": null,
215-
"Property": null,
225+
"DefaultExpr": null,
226+
"MaterializedExpr": null,
227+
"AliasExpr": null,
216228
"Codec": null,
217229
"TTL": null,
218230
"Comment": null,
@@ -240,7 +252,9 @@
240252
},
241253
"NotNull": null,
242254
"Nullable": null,
243-
"Property": null,
255+
"DefaultExpr": null,
256+
"MaterializedExpr": null,
257+
"AliasExpr": null,
244258
"Codec": null,
245259
"TTL": null,
246260
"Comment": null,
@@ -268,28 +282,27 @@
268282
},
269283
"NotNull": null,
270284
"Nullable": null,
271-
"Property": {
272-
"DefaultPos": 213,
273-
"Expr": {
274-
"Name": {
275-
"Name": "now",
276-
"QuoteType": 1,
277-
"NamePos": 221,
278-
"NameEnd": 224
285+
"DefaultExpr": {
286+
"Name": {
287+
"Name": "now",
288+
"QuoteType": 1,
289+
"NamePos": 221,
290+
"NameEnd": 224
291+
},
292+
"Params": {
293+
"LeftParenPos": 224,
294+
"RightParenPos": 225,
295+
"Items": {
296+
"ListPos": 225,
297+
"ListEnd": 225,
298+
"HasDistinct": false,
299+
"Items": []
279300
},
280-
"Params": {
281-
"LeftParenPos": 224,
282-
"RightParenPos": 225,
283-
"Items": {
284-
"ListPos": 225,
285-
"ListEnd": 225,
286-
"HasDistinct": false,
287-
"Items": []
288-
},
289-
"ColumnArgList": null
290-
}
301+
"ColumnArgList": null
291302
}
292303
},
304+
"MaterializedExpr": null,
305+
"AliasExpr": null,
293306
"Codec": null,
294307
"TTL": null,
295308
"Comment": null,

0 commit comments

Comments
 (0)