@@ -28,13 +28,17 @@ type SelectItem struct {
28
28
Expr Expr
29
29
// Please refer: https://clickhouse.com/docs/en/sql-reference/statements/select#select-modifiers
30
30
Modifiers []* FunctionExpr
31
+ Alias * Ident
31
32
}
32
33
33
34
func (s * SelectItem ) Pos () Pos {
34
35
return s .Expr .Pos ()
35
36
}
36
37
37
38
func (s * SelectItem ) End () Pos {
39
+ if s .Alias != nil {
40
+ return s .Alias .End ()
41
+ }
38
42
if len (s .Modifiers ) > 0 {
39
43
return s .Modifiers [len (s .Modifiers )- 1 ].End ()
40
44
}
@@ -48,6 +52,10 @@ func (s *SelectItem) String() string {
48
52
builder .WriteByte (' ' )
49
53
builder .WriteString (modifier .String ())
50
54
}
55
+ if s .Alias != nil {
56
+ builder .WriteString (" AS " )
57
+ builder .WriteString (s .Alias .String ())
58
+ }
51
59
return builder .String ()
52
60
}
53
61
@@ -62,6 +70,11 @@ func (s *SelectItem) Accept(visitor ASTVisitor) error {
62
70
return err
63
71
}
64
72
}
73
+ if s .Alias != nil {
74
+ if err := s .Alias .Accept (visitor ); err != nil {
75
+ return err
76
+ }
77
+ }
65
78
return visitor .VisitSelectItem (s )
66
79
}
67
80
@@ -552,7 +565,7 @@ type AlterTableAddColumn struct {
552
565
AddPos Pos
553
566
StatementEnd Pos
554
567
555
- Column * ColumnExpr
568
+ Column * ColumnDef
556
569
IfNotExists bool
557
570
After * NestedIdentifier
558
571
}
@@ -1190,7 +1203,7 @@ type AlterTableModifyColumn struct {
1190
1203
StatementEnd Pos
1191
1204
1192
1205
IfExists bool
1193
- Column * ColumnExpr
1206
+ Column * ColumnDef
1194
1207
RemovePropertyType * RemovePropertyType
1195
1208
}
1196
1209
@@ -1306,7 +1319,7 @@ type TableIndex struct {
1306
1319
IndexPos Pos
1307
1320
1308
1321
Name * NestedIdentifier
1309
- ColumnExpr Expr
1322
+ ColumnExpr * ColumnExpr
1310
1323
ColumnType Expr
1311
1324
Granularity * NumberLiteral
1312
1325
}
@@ -1324,9 +1337,9 @@ func (a *TableIndex) String() string {
1324
1337
builder .WriteString ("INDEX" )
1325
1338
builder .WriteByte (' ' )
1326
1339
builder .WriteString (a .Name .String ())
1327
- // a.ColumnExpr = *Ident --- e.g. INDEX idx column TYPE ...
1328
- // a.ColumnExpr = *ParamExprList --- e.g. INDEX idx(column) TYPE ...
1329
- if _ , ok := a .ColumnExpr .(* Ident ); ok {
1340
+ // a.ColumnDef = *Ident --- e.g. INDEX idx column TYPE ...
1341
+ // a.ColumnDef = *ParamExprList --- e.g. INDEX idx(column) TYPE ...
1342
+ if _ , ok := a .ColumnExpr .Expr . (* Ident ); ok {
1330
1343
builder .WriteByte (' ' )
1331
1344
}
1332
1345
builder .WriteString (a .ColumnExpr .String ())
@@ -1475,7 +1488,7 @@ type CreateTable struct {
1475
1488
OnCluster * ClusterClause
1476
1489
TableSchema * TableSchemaClause
1477
1490
Engine * EngineExpr
1478
- SubQuery * SubQueryClause
1491
+ SubQuery * SubQuery
1479
1492
HasTemporary bool
1480
1493
}
1481
1494
@@ -1518,6 +1531,7 @@ func (c *CreateTable) String() string {
1518
1531
builder .WriteString (c .Engine .String ())
1519
1532
}
1520
1533
if c .SubQuery != nil {
1534
+ builder .WriteString (" AS " )
1521
1535
builder .WriteString (c .SubQuery .String ())
1522
1536
}
1523
1537
return builder .String ()
@@ -1562,7 +1576,7 @@ type CreateMaterializedView struct {
1562
1576
OnCluster * ClusterClause
1563
1577
Engine * EngineExpr
1564
1578
Destination * DestinationClause
1565
- SubQuery * SubQueryClause
1579
+ SubQuery * SubQuery
1566
1580
Populate bool
1567
1581
}
1568
1582
@@ -1604,6 +1618,7 @@ func (c *CreateMaterializedView) String() string {
1604
1618
builder .WriteString (" POPULATE " )
1605
1619
}
1606
1620
if c .SubQuery != nil {
1621
+ builder .WriteString (" AS " )
1607
1622
builder .WriteString (c .SubQuery .String ())
1608
1623
}
1609
1624
return builder .String ()
@@ -1651,7 +1666,7 @@ type CreateView struct {
1651
1666
UUID * UUID
1652
1667
OnCluster * ClusterClause
1653
1668
TableSchema * TableSchemaClause
1654
- SubQuery * SubQueryClause
1669
+ SubQuery * SubQuery
1655
1670
}
1656
1671
1657
1672
func (c * CreateView ) Pos () Pos {
@@ -1689,6 +1704,7 @@ func (c *CreateView) String() string {
1689
1704
}
1690
1705
1691
1706
if c .SubQuery != nil {
1707
+ builder .WriteString (" AS " )
1692
1708
builder .WriteString (c .SubQuery .String ())
1693
1709
}
1694
1710
return builder .String ()
@@ -2697,6 +2713,7 @@ func (t *TTLClause) Accept(visitor ASTVisitor) error {
2697
2713
type OrderExpr struct {
2698
2714
OrderPos Pos
2699
2715
Expr Expr
2716
+ Alias * Ident
2700
2717
Direction OrderDirection
2701
2718
}
2702
2719
@@ -2705,12 +2722,19 @@ func (o *OrderExpr) Pos() Pos {
2705
2722
}
2706
2723
2707
2724
func (o * OrderExpr ) End () Pos {
2725
+ if o .Alias != nil {
2726
+ return o .Alias .End ()
2727
+ }
2708
2728
return o .Expr .End ()
2709
2729
}
2710
2730
2711
2731
func (o * OrderExpr ) String () string {
2712
2732
var builder strings.Builder
2713
2733
builder .WriteString (o .Expr .String ())
2734
+ if o .Alias != nil {
2735
+ builder .WriteString (" AS " )
2736
+ builder .WriteString (o .Alias .String ())
2737
+ }
2714
2738
if o .Direction != OrderDirectionNone {
2715
2739
builder .WriteByte (' ' )
2716
2740
builder .WriteString (string (o .Direction ))
@@ -2724,6 +2748,11 @@ func (o *OrderExpr) Accept(visitor ASTVisitor) error {
2724
2748
if err := o .Expr .Accept (visitor ); err != nil {
2725
2749
return err
2726
2750
}
2751
+ if o .Alias != nil {
2752
+ if err := o .Alias .Accept (visitor ); err != nil {
2753
+ return err
2754
+ }
2755
+ }
2727
2756
return visitor .VisitOrderByExpr (o )
2728
2757
}
2729
2758
@@ -3099,6 +3128,46 @@ func (w *WindowFunctionExpr) Accept(visitor ASTVisitor) error {
3099
3128
}
3100
3129
3101
3130
type ColumnExpr struct {
3131
+ Expr Expr
3132
+ Alias * Ident
3133
+ }
3134
+
3135
+ func (c * ColumnExpr ) Pos () Pos {
3136
+ return c .Expr .Pos ()
3137
+ }
3138
+
3139
+ func (c * ColumnExpr ) End () Pos {
3140
+ if c .Alias != nil {
3141
+ return c .Alias .NameEnd
3142
+ }
3143
+ return c .Expr .End ()
3144
+ }
3145
+
3146
+ func (c * ColumnExpr ) String () string {
3147
+ var builder strings.Builder
3148
+ builder .WriteString (c .Expr .String ())
3149
+ if c .Alias != nil {
3150
+ builder .WriteString (" AS " )
3151
+ builder .WriteString (c .Alias .String ())
3152
+ }
3153
+ return builder .String ()
3154
+ }
3155
+
3156
+ func (c * ColumnExpr ) Accept (visitor ASTVisitor ) error {
3157
+ visitor .enter (c )
3158
+ defer visitor .leave (c )
3159
+ if err := c .Expr .Accept (visitor ); err != nil {
3160
+ return err
3161
+ }
3162
+ if c .Alias != nil {
3163
+ if err := c .Alias .Accept (visitor ); err != nil {
3164
+ return err
3165
+ }
3166
+ }
3167
+ return visitor .VisitColumnExpr (c )
3168
+ }
3169
+
3170
+ type ColumnDef struct {
3102
3171
NamePos Pos
3103
3172
ColumnEnd Pos
3104
3173
Name * NestedIdentifier
@@ -3117,15 +3186,15 @@ type ColumnExpr struct {
3117
3186
CompressionCodec * Ident
3118
3187
}
3119
3188
3120
- func (c * ColumnExpr ) Pos () Pos {
3189
+ func (c * ColumnDef ) Pos () Pos {
3121
3190
return c .Name .Pos ()
3122
3191
}
3123
3192
3124
- func (c * ColumnExpr ) End () Pos {
3193
+ func (c * ColumnDef ) End () Pos {
3125
3194
return c .ColumnEnd
3126
3195
}
3127
3196
3128
- func (c * ColumnExpr ) String () string {
3197
+ func (c * ColumnDef ) String () string {
3129
3198
var builder strings.Builder
3130
3199
builder .WriteString (c .Name .String ())
3131
3200
if c .Type != nil {
@@ -3164,7 +3233,7 @@ func (c *ColumnExpr) String() string {
3164
3233
return builder .String ()
3165
3234
}
3166
3235
3167
- func (c * ColumnExpr ) Accept (visitor ASTVisitor ) error {
3236
+ func (c * ColumnDef ) Accept (visitor ASTVisitor ) error {
3168
3237
visitor .enter (c )
3169
3238
defer visitor .leave (c )
3170
3239
if err := c .Name .Accept (visitor ); err != nil {
@@ -3215,7 +3284,7 @@ func (c *ColumnExpr) Accept(visitor ASTVisitor) error {
3215
3284
return err
3216
3285
}
3217
3286
}
3218
- return visitor .VisitColumn (c )
3287
+ return visitor .VisitColumnDef (c )
3219
3288
}
3220
3289
3221
3290
type ScalarTypeExpr struct {
@@ -4113,7 +4182,7 @@ type CreateLiveView struct {
4113
4182
Destination * DestinationClause
4114
4183
TableSchema * TableSchemaClause
4115
4184
WithTimeout * WithTimeoutClause
4116
- SubQuery * SubQueryClause
4185
+ SubQuery * SubQuery
4117
4186
}
4118
4187
4119
4188
func (c * CreateLiveView ) Type () string {
@@ -4157,6 +4226,7 @@ func (c *CreateLiveView) String() string {
4157
4226
}
4158
4227
4159
4228
if c .SubQuery != nil {
4229
+ builder .WriteString (" AS " )
4160
4230
builder .WriteString (c .SubQuery .String ())
4161
4231
}
4162
4232
@@ -4942,31 +5012,32 @@ func (f *WindowFrameExtendExpr) Accept(visitor ASTVisitor) error {
4942
5012
return visitor .VisitWindowFrameExtendExpr (f )
4943
5013
}
4944
5014
4945
- type WindowFrameRangeClause struct {
4946
- BetweenPos Pos
4947
- Between Expr
4948
- AndPos Pos
4949
- And Expr
5015
+ type BetweenClause struct {
5016
+ Expr Expr
5017
+ Between Expr
5018
+ AndPos Pos
5019
+ And Expr
4950
5020
}
4951
5021
4952
- func (f * WindowFrameRangeClause ) Pos () Pos {
4953
- return f .BetweenPos
5022
+ func (f * BetweenClause ) Pos () Pos {
5023
+ return f .Expr . Pos ()
4954
5024
}
4955
5025
4956
- func (f * WindowFrameRangeClause ) End () Pos {
5026
+ func (f * BetweenClause ) End () Pos {
4957
5027
return f .And .End ()
4958
5028
}
4959
5029
4960
- func (f * WindowFrameRangeClause ) String () string {
5030
+ func (f * BetweenClause ) String () string {
4961
5031
var builder strings.Builder
4962
- builder .WriteString ("BETWEEN " )
5032
+ builder .WriteString (f .Expr .String ())
5033
+ builder .WriteString (" BETWEEN " )
4963
5034
builder .WriteString (f .Between .String ())
4964
5035
builder .WriteString (" AND " )
4965
5036
builder .WriteString (f .And .String ())
4966
5037
return builder .String ()
4967
5038
}
4968
5039
4969
- func (f * WindowFrameRangeClause ) Accept (visitor ASTVisitor ) error {
5040
+ func (f * BetweenClause ) Accept (visitor ASTVisitor ) error {
4970
5041
visitor .enter (f )
4971
5042
defer visitor .leave (f )
4972
5043
if err := f .Between .Accept (visitor ); err != nil {
@@ -4975,7 +5046,7 @@ func (f *WindowFrameRangeClause) Accept(visitor ASTVisitor) error {
4975
5046
if err := f .And .Accept (visitor ); err != nil {
4976
5047
return err
4977
5048
}
4978
- return visitor .VisitWindowFrameRangeExpr (f )
5049
+ return visitor .VisitBetweenClause (f )
4979
5050
}
4980
5051
4981
5052
type WindowFrameCurrentRow struct {
@@ -5298,28 +5369,31 @@ func (s *SelectQuery) Accept(visitor ASTVisitor) error {
5298
5369
return visitor .VisitSelectQuery (s )
5299
5370
}
5300
5371
5301
- type SubQueryClause struct {
5302
- AsPos Pos
5303
- Select * SelectQuery
5372
+ type SubQuery struct {
5373
+ HasParen bool
5374
+ Select * SelectQuery
5304
5375
}
5305
5376
5306
- func (s * SubQueryClause ) Pos () Pos {
5307
- return s .AsPos
5377
+ func (s * SubQuery ) Pos () Pos {
5378
+ return s .Select . Pos ()
5308
5379
}
5309
5380
5310
- func (s * SubQueryClause ) End () Pos {
5381
+ func (s * SubQuery ) End () Pos {
5311
5382
return s .Select .End ()
5312
5383
}
5313
5384
5314
- func (s * SubQueryClause ) String () string {
5315
- var builder strings.Builder
5316
- builder .WriteString (" AS (" )
5317
- builder .WriteString (s .Select .String ())
5318
- builder .WriteString (")" )
5319
- return builder .String ()
5385
+ func (s * SubQuery ) String () string {
5386
+ if s .HasParen {
5387
+ var builder strings.Builder
5388
+ builder .WriteString ("(" )
5389
+ builder .WriteString (s .Select .String ())
5390
+ builder .WriteString (")" )
5391
+ return builder .String ()
5392
+ }
5393
+ return s .Select .String ()
5320
5394
}
5321
5395
5322
- func (s * SubQueryClause ) Accept (visitor ASTVisitor ) error {
5396
+ func (s * SubQuery ) Accept (visitor ASTVisitor ) error {
5323
5397
visitor .enter (s )
5324
5398
defer visitor .leave (s )
5325
5399
if s .Select != nil {
0 commit comments