This is an automated email from the ASF dual-hosted git repository. morningman pushed a commit to branch branch-1.1-lts in repository https://gitbox.apache.org/repos/asf/doris.git
commit 8e111723746ec5111345c4410e827449410abe61 Author: ZenoYang <[email protected]> AuthorDate: Thu Sep 8 14:55:50 2022 +0800 [fix](grouping sets) grouping sets cause be core or return wrong results (#12313) --- be/src/exec/broker_reader.cpp | 2 +- .../java/org/apache/doris/analysis/SelectStmt.java | 25 ++++++++++++++++------ 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/be/src/exec/broker_reader.cpp b/be/src/exec/broker_reader.cpp index aea301aa98..28db1d9c46 100644 --- a/be/src/exec/broker_reader.cpp +++ b/be/src/exec/broker_reader.cpp @@ -115,7 +115,7 @@ Status BrokerReader::open() { // TODO(cmy): The file size is no longer got from openReader() method. // But leave the code here for compatibility. // This will be removed later. - if (response.->__isset.size) { + if (response->__isset.size) { _file_size = response->size; } diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/SelectStmt.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/SelectStmt.java index 81df81d7f7..b7ef73a2d6 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/SelectStmt.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/SelectStmt.java @@ -442,13 +442,16 @@ public class SelectStmt extends QueryStmt { } } if (groupByClause != null && groupByClause.isGroupByExtension()) { + ArrayList<Expr> aggFnExprList = new ArrayList<>(); for (SelectListItem item : selectList.getItems()) { - if (item.getExpr() instanceof FunctionCallExpr && item.getExpr().fn instanceof AggregateFunction) { + aggFnExprList.clear(); + getAggregateFnExpr(item.getExpr(), aggFnExprList); + for (Expr aggFnExpr : aggFnExprList) { for (Expr expr : groupByClause.getGroupingExprs()) { - if (item.getExpr().contains(expr)) { - throw new AnalysisException("column: " + expr.toSql() + " cannot both in select list and " - + "aggregate functions when using GROUPING SETS/CUBE/ROLLUP, please use union" - + " instead."); + if (aggFnExpr.contains(expr)) { + throw new AnalysisException("column: " + expr.toSql() + " cannot both in select " + + "list and aggregate functions when using GROUPING SETS/CUBE/ROLLUP, " + + "please use union instead."); } } } @@ -1892,7 +1895,7 @@ public class SelectStmt extends QueryStmt { private boolean checkGroupingFn(Expr expr) { if (expr instanceof GroupingFunctionCallExpr) { return true; - } else if (expr.getChildren() != null && expr.getChildren().size() > 0) { + } else if (expr.getChildren() != null) { for (Expr child : expr.getChildren()) { if (checkGroupingFn(child)) { return true; @@ -1902,6 +1905,16 @@ public class SelectStmt extends QueryStmt { return false; } + private void getAggregateFnExpr(Expr expr, ArrayList<Expr> aggFnExprList) { + if (expr instanceof FunctionCallExpr && expr.fn instanceof AggregateFunction) { + aggFnExprList.add(expr); + } else if (expr.getChildren() != null) { + for (Expr child : expr.getChildren()) { + getAggregateFnExpr(child, aggFnExprList); + } + } + } + @Override public int hashCode() { return id.hashCode(); --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
