@@ -29,6 +29,14 @@ func (p *pancakeSqlQueryGenerator) aliasedExprArrayToExpr(aliasedExprs []model.A
2929 return exprs
3030}
3131
32+ func (p * pancakeSqlQueryGenerator ) groupByExprArrayToExpr (groupExprs []model.GroupByExpr ) []model.Expr {
33+ exprs := make ([]model.Expr , 0 , len (groupExprs ))
34+ for _ , groupExpr := range groupExprs {
35+ exprs = append (exprs , groupExpr )
36+ }
37+ return exprs
38+ }
39+
3240func (p * pancakeSqlQueryGenerator ) aliasedExprArrayToLiteralExpr (aliasedExprs []model.AliasedExpr ) []model.Expr {
3341 exprs := make ([]model.Expr , 0 , len (aliasedExprs ))
3442 for _ , aliasedExpr := range aliasedExprs {
@@ -37,10 +45,10 @@ func (p *pancakeSqlQueryGenerator) aliasedExprArrayToLiteralExpr(aliasedExprs []
3745 return exprs
3846}
3947
40- func (p * pancakeSqlQueryGenerator ) generatePartitionBy (groupByColumns []model.AliasedExpr ) []model.Expr {
48+ func (p * pancakeSqlQueryGenerator ) generatePartitionBy (groupByColumns []model.GroupByExpr ) []model.Expr {
4149 partitionBy := make ([]model.Expr , 0 )
4250 for _ , col := range groupByColumns {
43- partitionBy = append (partitionBy , col .AliasRef ())
51+ partitionBy = append (partitionBy , col .GroupAliasRef ())
4452 }
4553 return partitionBy
4654}
@@ -101,7 +109,7 @@ func (p *pancakeSqlQueryGenerator) generateAccumAggrFunctions(origExpr model.Exp
101109 fmt .Errorf ("not implemented, queryType: %s, origExpr: %s" , debugQueryType , model .AsString (origExpr ))
102110}
103111
104- func (p * pancakeSqlQueryGenerator ) generateMetricSelects (metric * pancakeModelMetricAggregation , groupByColumns []model.AliasedExpr , hasMoreBucketAggregations bool ) (addSelectColumns []model.AliasedExpr , err error ) {
112+ func (p * pancakeSqlQueryGenerator ) generateMetricSelects (metric * pancakeModelMetricAggregation , groupByColumns []model.GroupByExpr , hasMoreBucketAggregations bool ) (addSelectColumns []model.AliasedExpr , err error ) {
105113 for columnId , column := range metric .selectedColumns {
106114 finalColumn := column
107115
@@ -119,27 +127,31 @@ func (p *pancakeSqlQueryGenerator) generateMetricSelects(metric *pancakeModelMet
119127 return
120128}
121129
122- func (p * pancakeSqlQueryGenerator ) isPartOf (column model.Expr , aliasedColumns []model.AliasedExpr ) * model.AliasedExpr {
130+ func (p * pancakeSqlQueryGenerator ) isPartOf (column model.Expr , aliasedColumns []model.GroupByExpr ) * model.AliasedExpr {
123131 for _ , aliasedColumn := range aliasedColumns {
124- if model .PartlyImplementedIsEqual (column , aliasedColumn ) {
125- return & aliasedColumn
132+ if model .PartlyImplementedIsEqual (column , aliasedColumn .Expr ) {
133+ result := model.AliasedExpr {
134+ Expr : aliasedColumn .Expr ,
135+ Alias : aliasedColumn .GroupAlias ,
136+ }
137+ return & result
126138 }
127139 }
128140 return nil
129141}
130142
131- func (p * pancakeSqlQueryGenerator ) isPartOfOrderBy (alias model.AliasedExpr , orderByColumns []model.OrderByExpr ) bool {
143+ func (p * pancakeSqlQueryGenerator ) isPartOfOrderBy (alias model.GroupByExpr , orderByColumns []model.OrderByExpr ) bool {
132144 for _ , orderBy := range orderByColumns {
133145 if orderByLiteral , ok := orderBy .Expr .(model.LiteralExpr ); ok {
134- if alias .AliasRef (). Value == orderByLiteral .Value {
146+ if alias .GroupAlias == orderByLiteral .Value {
135147 return true
136148 }
137149 }
138150 }
139151 return false
140152}
141153
142- func (p * pancakeSqlQueryGenerator ) addPotentialParentCount (bucketAggregation * pancakeModelBucketAggregation , groupByColumns []model.AliasedExpr ) []model.AliasedExpr {
154+ func (p * pancakeSqlQueryGenerator ) addPotentialParentCount (bucketAggregation * pancakeModelBucketAggregation , groupByColumns []model.GroupByExpr ) []model.AliasedExpr {
143155 if query_util .IsAnyKindOfTerms (bucketAggregation .queryType ) {
144156 parentCountColumn := model .NewWindowFunction ("sum" ,
145157 []model.Expr {model .NewCountFunc ()},
@@ -150,20 +162,16 @@ func (p *pancakeSqlQueryGenerator) addPotentialParentCount(bucketAggregation *pa
150162 return []model.AliasedExpr {}
151163}
152164
153- func (p * pancakeSqlQueryGenerator ) generateBucketSqlParts (query * pancakeModel , bucketAggregation * pancakeModelBucketAggregation , groupByColumns []model.AliasedExpr , hasMoreBucketAggregations bool ) (
154- addSelectColumns , addGroupBys , addRankColumns []model.AliasedExpr , addRankWheres []model.Expr , addRankOrderBys []model.OrderByExpr , err error ) {
165+ func (p * pancakeSqlQueryGenerator ) generateBucketSqlParts (query * pancakeModel , bucketAggregation * pancakeModelBucketAggregation , groupByColumns []model.GroupByExpr , hasMoreBucketAggregations bool ) (
166+ addSelectColumns []model. AliasedExpr , addGroupBys []model. GroupByExpr , addRankColumns []model.AliasedExpr , addRankWheres []model.Expr , addRankOrderBys []model.OrderByExpr , err error ) {
155167
156168 // For some group by such as terms, we need total count. We add it in this method.
157169 addSelectColumns = append (addSelectColumns , p .addPotentialParentCount (bucketAggregation , groupByColumns )... )
158170
159- var tmpGroupBys []model.AliasedExpr
160171 for columnId , column := range bucketAggregation .selectedColumns {
161- aliasedColumn := model .NewAliasedExpr (column , bucketAggregation .InternalNameForKey (columnId ))
162- addSelectColumns = append (addSelectColumns , aliasedColumn )
163- tmpGroupBys = append (tmpGroupBys , aliasedColumn )
164- // doris not support group by alias
165- groupByAliasedColumn := model .NewAliasedExpr (column , "" )
166- addGroupBys = append (addGroupBys , groupByAliasedColumn )
172+ columnAliasString := bucketAggregation .InternalNameForKey (columnId )
173+ addSelectColumns = append (addSelectColumns , model .NewAliasedExpr (column , columnAliasString ))
174+ addGroupBys = append (addGroupBys , model .NewGroupByExpr (column , columnAliasString ))
167175 }
168176
169177 // build count for aggr
@@ -186,9 +194,9 @@ func (p *pancakeSqlQueryGenerator) generateBucketSqlParts(query *pancakeModel, b
186194 columnId := len (bucketAggregation .selectedColumns ) + i
187195 direction := orderBy .Direction
188196
189- rankColumn := p .isPartOf (orderBy .Expr , append (append (groupByColumns , tmpGroupBys ... ),
197+ rankColumn := p .isPartOf (orderBy .Expr , append (append (groupByColumns , addGroupBys ... ),
190198 // We need count before window functions
191- model .NewAliasedExpr (model .NewCountFunc (), bucketAggregation .InternalNameForCount ())))
199+ model .NewGroupByExpr (model .NewCountFunc (), bucketAggregation .InternalNameForCount ())))
192200 if rankColumn != nil { // rank is part of group by
193201 if direction == model .DefaultOrder {
194202 direction = model .AscOrder // primarily needed for tests
@@ -207,7 +215,7 @@ func (p *pancakeSqlQueryGenerator) generateBucketSqlParts(query *pancakeModel, b
207215 return nil , nil , nil , nil , nil , err
208216 }
209217 orderByExpr = model .NewWindowFunction (aggFunctionName , []model.Expr {partColumn },
210- p .generatePartitionBy (append (groupByColumns , tmpGroupBys ... )), []model.OrderByExpr {})
218+ p .generatePartitionBy (append (groupByColumns , addGroupBys ... )), []model.OrderByExpr {})
211219 }
212220 aliasedExpr := model .NewAliasedExpr (orderByExpr , bucketAggregation .InternalNameForOrderBy (columnId ))
213221 addSelectColumns = append (addSelectColumns , aliasedExpr )
@@ -218,9 +226,9 @@ func (p *pancakeSqlQueryGenerator) generateBucketSqlParts(query *pancakeModel, b
218226 }
219227
220228 // We order by count, but add key to get right dense_rank()
221- for _ , addedGroupByAlias := range tmpGroupBys {
229+ for _ , addedGroupByAlias := range addGroupBys {
222230 if ! p .isPartOfOrderBy (addedGroupByAlias , rankOrderBy ) {
223- rankOrderBy = append (rankOrderBy , model .NewOrderByExpr (addedGroupByAlias .AliasRef (), model .AscOrder ))
231+ rankOrderBy = append (rankOrderBy , model .NewOrderByExpr (addedGroupByAlias .GroupAliasRef (), model .AscOrder ))
224232 }
225233 }
226234
@@ -322,7 +330,7 @@ func (p *pancakeSqlQueryGenerator) generateSelectCommand(aggregation *pancakeMod
322330 rankColumns := make ([]model.AliasedExpr , 0 )
323331 rankWheres := make ([]model.Expr , 0 )
324332 rankOrderBys := make ([]model.OrderByExpr , 0 )
325- groupBys := make ([]model.AliasedExpr , 0 )
333+ groupBys := make ([]model.GroupByExpr , 0 )
326334
327335 type addIfCombinator struct {
328336 selectNr int
@@ -430,7 +438,7 @@ func (p *pancakeSqlQueryGenerator) generateSelectCommand(aggregation *pancakeMod
430438
431439 resultQuery = & model.SelectCommand {
432440 Columns : p .aliasedExprArrayToExpr (selectColumns ),
433- GroupBy : p .aliasedExprArrayToExpr (groupBys ),
441+ GroupBy : p .groupByExprArrayToExpr (groupBys ),
434442 WhereClause : aggregation .whereClause ,
435443 FromClause : model .NewTableRef (model .SingleTableNamePlaceHolder ),
436444 OrderBy : orderBy ,
@@ -441,7 +449,7 @@ func (p *pancakeSqlQueryGenerator) generateSelectCommand(aggregation *pancakeMod
441449 } else {
442450 windowCte := model.SelectCommand {
443451 Columns : p .aliasedExprArrayToExpr (selectColumns ),
444- GroupBy : p .aliasedExprArrayToExpr (groupBys ),
452+ GroupBy : p .groupByExprArrayToExpr (groupBys ),
445453 WhereClause : aggregation .whereClause ,
446454 FromClause : model .NewTableRef (model .SingleTableNamePlaceHolder ),
447455 SampleLimit : aggregation .sampleLimit ,
0 commit comments