[fix](planner)group_concat lost order by info in second phase merge agg (#16479)

This commit is contained in:
starocean999
2023-02-08 20:48:52 +08:00
committed by GitHub
parent a512469537
commit f0b0eedbc5
7 changed files with 21 additions and 4 deletions

View File

@ -558,8 +558,10 @@ public final class AggregateInfo extends AggregateInfoBase {
Preconditions.checkState(inputExpr.isAggregateFunction());
Expr aggExprParam =
new SlotRef(inputDesc.getSlots().get(i + getGroupingExprs().size()));
FunctionCallExpr aggExpr = FunctionCallExpr.createMergeAggCall(
inputExpr, Lists.newArrayList(aggExprParam), inputExpr.getFnParams().exprs());
FunctionParams fnParams = inputExpr.getAggFnParams();
FunctionCallExpr aggExpr =
FunctionCallExpr.createMergeAggCall(inputExpr, Lists.newArrayList(aggExprParam),
fnParams != null ? fnParams.exprs() : inputExpr.getFnParams().exprs());
aggExpr.analyzeNoThrow(analyzer);
// do not need analyze in merge stage, just do mark for BE get right function
aggExpr.setOrderByElements(inputExpr.getOrderByElements());
@ -691,6 +693,7 @@ public final class AggregateInfo extends AggregateInfoBase {
new SlotRef(inputDesc.getSlots().get(i + getGroupingExprs().size()));
FunctionCallExpr aggExpr = FunctionCallExpr.createMergeAggCall(
inputExpr, Lists.newArrayList(aggExprParam), inputExpr.getFnParams().exprs());
aggExpr.setOrderByElements(inputExpr.getOrderByElements());
secondPhaseAggExprs.add(aggExpr);
}
Preconditions.checkState(

View File

@ -221,6 +221,10 @@ public class FunctionCallExpr extends Expr {
this.aggFnParams = aggFnParams;
}
public FunctionParams getAggFnParams() {
return aggFnParams;
}
public void setIsAnalyticFnCall(boolean v) {
isAnalyticFnCall = v;
}

View File

@ -41,8 +41,6 @@ public class GroupConcat extends NullableAggregateFunction
public static final List<FunctionSignature> SIGNATURES = ImmutableList.of(
FunctionSignature.ret(VarcharType.SYSTEM_DEFAULT).args(VarcharType.SYSTEM_DEFAULT),
FunctionSignature.ret(VarcharType.SYSTEM_DEFAULT)
.args(VarcharType.SYSTEM_DEFAULT, VarcharType.SYSTEM_DEFAULT),
FunctionSignature.ret(VarcharType.SYSTEM_DEFAULT)
.varArgs(VarcharType.SYSTEM_DEFAULT, AnyDataType.INSTANCE),
FunctionSignature.ret(VarcharType.SYSTEM_DEFAULT)

View File

@ -85,3 +85,6 @@ false
25699 1989
2147483647 255:1991:32767:32767
-- !select --
12 false, false, false, false, false, false, false, false, true, true, true, true, true, true, true

View File

@ -45,6 +45,9 @@ false
25699 1989
2147483647 255:1991:32767:32767
-- !select --
12 false, false, false, false, false, false, false, false, true, true, true, true, true, true, true
-- !select --
\N \N
103 255

View File

@ -55,4 +55,7 @@ suite("test_group_concat") {
qt_select """
SELECT abs(k3), group_concat(distinct cast(abs(k2) as char), ":" order by abs(k1), k2) FROM test_query_db.baseall group by abs(k3) order by abs(k3);
"""
qt_select """
SELECT count(distinct k7), group_concat(k6 order by k6) FROM test_query_db.baseall;
"""
}

View File

@ -37,6 +37,9 @@ suite("test_group_concat") {
qt_select """
SELECT abs(k3), group_concat(distinct cast(abs(k2) as char), ":" order by abs(k1), k2) FROM test_query_db.baseall group by abs(k3) order by abs(k3);
"""
qt_select """
SELECT count(distinct k7), group_concat(k6 order by k6) FROM test_query_db.baseall;
"""
sql "set enable_nereids_planner=true"
sql "set enable_vectorized_engine=true"