@@ -28,13 +28,17 @@ type SelectItem struct {
2828 Expr Expr
2929 // Please refer: https://clickhouse.com/docs/en/sql-reference/statements/select#select-modifiers
3030 Modifiers []* FunctionExpr
31+ Alias * Ident
3132}
3233
3334func (s * SelectItem ) Pos () Pos {
3435 return s .Expr .Pos ()
3536}
3637
3738func (s * SelectItem ) End () Pos {
39+ if s .Alias != nil {
40+ return s .Alias .End ()
41+ }
3842 if len (s .Modifiers ) > 0 {
3943 return s .Modifiers [len (s .Modifiers )- 1 ].End ()
4044 }
@@ -48,6 +52,10 @@ func (s *SelectItem) String() string {
4852 builder .WriteByte (' ' )
4953 builder .WriteString (modifier .String ())
5054 }
55+ if s .Alias != nil {
56+ builder .WriteString (" AS " )
57+ builder .WriteString (s .Alias .String ())
58+ }
5159 return builder .String ()
5260}
5361
@@ -62,6 +70,11 @@ func (s *SelectItem) Accept(visitor ASTVisitor) error {
6270 return err
6371 }
6472 }
73+ if s .Alias != nil {
74+ if err := s .Alias .Accept (visitor ); err != nil {
75+ return err
76+ }
77+ }
6578 return visitor .VisitSelectItem (s )
6679}
6780
@@ -552,7 +565,7 @@ type AlterTableAddColumn struct {
552565 AddPos Pos
553566 StatementEnd Pos
554567
555- Column * ColumnExpr
568+ Column * ColumnDef
556569 IfNotExists bool
557570 After * NestedIdentifier
558571}
@@ -1190,7 +1203,7 @@ type AlterTableModifyColumn struct {
11901203 StatementEnd Pos
11911204
11921205 IfExists bool
1193- Column * ColumnExpr
1206+ Column * ColumnDef
11941207 RemovePropertyType * RemovePropertyType
11951208}
11961209
@@ -1306,7 +1319,7 @@ type TableIndex struct {
13061319 IndexPos Pos
13071320
13081321 Name * NestedIdentifier
1309- ColumnExpr Expr
1322+ ColumnExpr * ColumnExpr
13101323 ColumnType Expr
13111324 Granularity * NumberLiteral
13121325}
@@ -1324,9 +1337,9 @@ func (a *TableIndex) String() string {
13241337 builder .WriteString ("INDEX" )
13251338 builder .WriteByte (' ' )
13261339 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 {
13301343 builder .WriteByte (' ' )
13311344 }
13321345 builder .WriteString (a .ColumnExpr .String ())
@@ -1475,7 +1488,7 @@ type CreateTable struct {
14751488 OnCluster * ClusterClause
14761489 TableSchema * TableSchemaClause
14771490 Engine * EngineExpr
1478- SubQuery * SubQueryClause
1491+ SubQuery * SubQuery
14791492 HasTemporary bool
14801493}
14811494
@@ -1518,6 +1531,7 @@ func (c *CreateTable) String() string {
15181531 builder .WriteString (c .Engine .String ())
15191532 }
15201533 if c .SubQuery != nil {
1534+ builder .WriteString (" AS " )
15211535 builder .WriteString (c .SubQuery .String ())
15221536 }
15231537 return builder .String ()
@@ -1562,7 +1576,7 @@ type CreateMaterializedView struct {
15621576 OnCluster * ClusterClause
15631577 Engine * EngineExpr
15641578 Destination * DestinationClause
1565- SubQuery * SubQueryClause
1579+ SubQuery * SubQuery
15661580 Populate bool
15671581}
15681582
@@ -1604,6 +1618,7 @@ func (c *CreateMaterializedView) String() string {
16041618 builder .WriteString (" POPULATE " )
16051619 }
16061620 if c .SubQuery != nil {
1621+ builder .WriteString (" AS " )
16071622 builder .WriteString (c .SubQuery .String ())
16081623 }
16091624 return builder .String ()
@@ -1651,7 +1666,7 @@ type CreateView struct {
16511666 UUID * UUID
16521667 OnCluster * ClusterClause
16531668 TableSchema * TableSchemaClause
1654- SubQuery * SubQueryClause
1669+ SubQuery * SubQuery
16551670}
16561671
16571672func (c * CreateView ) Pos () Pos {
@@ -1689,6 +1704,7 @@ func (c *CreateView) String() string {
16891704 }
16901705
16911706 if c .SubQuery != nil {
1707+ builder .WriteString (" AS " )
16921708 builder .WriteString (c .SubQuery .String ())
16931709 }
16941710 return builder .String ()
@@ -2697,6 +2713,7 @@ func (t *TTLClause) Accept(visitor ASTVisitor) error {
26972713type OrderExpr struct {
26982714 OrderPos Pos
26992715 Expr Expr
2716+ Alias * Ident
27002717 Direction OrderDirection
27012718}
27022719
@@ -2705,12 +2722,19 @@ func (o *OrderExpr) Pos() Pos {
27052722}
27062723
27072724func (o * OrderExpr ) End () Pos {
2725+ if o .Alias != nil {
2726+ return o .Alias .End ()
2727+ }
27082728 return o .Expr .End ()
27092729}
27102730
27112731func (o * OrderExpr ) String () string {
27122732 var builder strings.Builder
27132733 builder .WriteString (o .Expr .String ())
2734+ if o .Alias != nil {
2735+ builder .WriteString (" AS " )
2736+ builder .WriteString (o .Alias .String ())
2737+ }
27142738 if o .Direction != OrderDirectionNone {
27152739 builder .WriteByte (' ' )
27162740 builder .WriteString (string (o .Direction ))
@@ -2724,6 +2748,11 @@ func (o *OrderExpr) Accept(visitor ASTVisitor) error {
27242748 if err := o .Expr .Accept (visitor ); err != nil {
27252749 return err
27262750 }
2751+ if o .Alias != nil {
2752+ if err := o .Alias .Accept (visitor ); err != nil {
2753+ return err
2754+ }
2755+ }
27272756 return visitor .VisitOrderByExpr (o )
27282757}
27292758
@@ -3099,6 +3128,46 @@ func (w *WindowFunctionExpr) Accept(visitor ASTVisitor) error {
30993128}
31003129
31013130type 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 {
31023171 NamePos Pos
31033172 ColumnEnd Pos
31043173 Name * NestedIdentifier
@@ -3117,15 +3186,15 @@ type ColumnExpr struct {
31173186 CompressionCodec * Ident
31183187}
31193188
3120- func (c * ColumnExpr ) Pos () Pos {
3189+ func (c * ColumnDef ) Pos () Pos {
31213190 return c .Name .Pos ()
31223191}
31233192
3124- func (c * ColumnExpr ) End () Pos {
3193+ func (c * ColumnDef ) End () Pos {
31253194 return c .ColumnEnd
31263195}
31273196
3128- func (c * ColumnExpr ) String () string {
3197+ func (c * ColumnDef ) String () string {
31293198 var builder strings.Builder
31303199 builder .WriteString (c .Name .String ())
31313200 if c .Type != nil {
@@ -3164,7 +3233,7 @@ func (c *ColumnExpr) String() string {
31643233 return builder .String ()
31653234}
31663235
3167- func (c * ColumnExpr ) Accept (visitor ASTVisitor ) error {
3236+ func (c * ColumnDef ) Accept (visitor ASTVisitor ) error {
31683237 visitor .enter (c )
31693238 defer visitor .leave (c )
31703239 if err := c .Name .Accept (visitor ); err != nil {
@@ -3215,7 +3284,7 @@ func (c *ColumnExpr) Accept(visitor ASTVisitor) error {
32153284 return err
32163285 }
32173286 }
3218- return visitor .VisitColumn (c )
3287+ return visitor .VisitColumnDef (c )
32193288}
32203289
32213290type ScalarTypeExpr struct {
@@ -4113,7 +4182,7 @@ type CreateLiveView struct {
41134182 Destination * DestinationClause
41144183 TableSchema * TableSchemaClause
41154184 WithTimeout * WithTimeoutClause
4116- SubQuery * SubQueryClause
4185+ SubQuery * SubQuery
41174186}
41184187
41194188func (c * CreateLiveView ) Type () string {
@@ -4157,6 +4226,7 @@ func (c *CreateLiveView) String() string {
41574226 }
41584227
41594228 if c .SubQuery != nil {
4229+ builder .WriteString (" AS " )
41604230 builder .WriteString (c .SubQuery .String ())
41614231 }
41624232
@@ -4942,31 +5012,32 @@ func (f *WindowFrameExtendExpr) Accept(visitor ASTVisitor) error {
49425012 return visitor .VisitWindowFrameExtendExpr (f )
49435013}
49445014
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
49505020}
49515021
4952- func (f * WindowFrameRangeClause ) Pos () Pos {
4953- return f .BetweenPos
5022+ func (f * BetweenClause ) Pos () Pos {
5023+ return f .Expr . Pos ()
49545024}
49555025
4956- func (f * WindowFrameRangeClause ) End () Pos {
5026+ func (f * BetweenClause ) End () Pos {
49575027 return f .And .End ()
49585028}
49595029
4960- func (f * WindowFrameRangeClause ) String () string {
5030+ func (f * BetweenClause ) String () string {
49615031 var builder strings.Builder
4962- builder .WriteString ("BETWEEN " )
5032+ builder .WriteString (f .Expr .String ())
5033+ builder .WriteString (" BETWEEN " )
49635034 builder .WriteString (f .Between .String ())
49645035 builder .WriteString (" AND " )
49655036 builder .WriteString (f .And .String ())
49665037 return builder .String ()
49675038}
49685039
4969- func (f * WindowFrameRangeClause ) Accept (visitor ASTVisitor ) error {
5040+ func (f * BetweenClause ) Accept (visitor ASTVisitor ) error {
49705041 visitor .enter (f )
49715042 defer visitor .leave (f )
49725043 if err := f .Between .Accept (visitor ); err != nil {
@@ -4975,7 +5046,7 @@ func (f *WindowFrameRangeClause) Accept(visitor ASTVisitor) error {
49755046 if err := f .And .Accept (visitor ); err != nil {
49765047 return err
49775048 }
4978- return visitor .VisitWindowFrameRangeExpr (f )
5049+ return visitor .VisitBetweenClause (f )
49795050}
49805051
49815052type WindowFrameCurrentRow struct {
@@ -5298,28 +5369,31 @@ func (s *SelectQuery) Accept(visitor ASTVisitor) error {
52985369 return visitor .VisitSelectQuery (s )
52995370}
53005371
5301- type SubQueryClause struct {
5302- AsPos Pos
5303- Select * SelectQuery
5372+ type SubQuery struct {
5373+ HasParen bool
5374+ Select * SelectQuery
53045375}
53055376
5306- func (s * SubQueryClause ) Pos () Pos {
5307- return s .AsPos
5377+ func (s * SubQuery ) Pos () Pos {
5378+ return s .Select . Pos ()
53085379}
53095380
5310- func (s * SubQueryClause ) End () Pos {
5381+ func (s * SubQuery ) End () Pos {
53115382 return s .Select .End ()
53125383}
53135384
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 ()
53205394}
53215395
5322- func (s * SubQueryClause ) Accept (visitor ASTVisitor ) error {
5396+ func (s * SubQuery ) Accept (visitor ASTVisitor ) error {
53235397 visitor .enter (s )
53245398 defer visitor .leave (s )
53255399 if s .Select != nil {
0 commit comments