branch-2.1: [fix](Nereids) not process must shuffle when regulate cannot be banned agg #52827 (#53265)
picked from #52827
This commit is contained in:
@ -109,7 +109,7 @@ public class ChildrenPropertiesRegulator extends PlanVisitor<Boolean, Void> {
|
||||
return false;
|
||||
}
|
||||
if (!agg.getAggregateParam().canBeBanned) {
|
||||
return true;
|
||||
return visit(agg, context);
|
||||
}
|
||||
// forbid one phase agg on distribute
|
||||
if (agg.getAggMode() == AggMode.INPUT_TO_RESULT && children.get(0).getPlan() instanceof PhysicalDistribute) {
|
||||
@ -175,9 +175,7 @@ public class ChildrenPropertiesRegulator extends PlanVisitor<Boolean, Void> {
|
||||
}
|
||||
}
|
||||
// process must shuffle
|
||||
visit(agg, context);
|
||||
// process agg
|
||||
return true;
|
||||
return visit(agg, context);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -24,6 +24,7 @@ import org.apache.doris.nereids.trees.expressions.Expression;
|
||||
import org.apache.doris.nereids.trees.expressions.OrderExpression;
|
||||
import org.apache.doris.nereids.trees.expressions.WindowExpression;
|
||||
import org.apache.doris.nereids.trees.expressions.functions.agg.AggregateFunction;
|
||||
import org.apache.doris.nereids.trees.expressions.functions.agg.Count;
|
||||
import org.apache.doris.nereids.trees.expressions.functions.generator.TableGeneratingFunction;
|
||||
import org.apache.doris.nereids.trees.expressions.functions.scalar.GroupingScalarFunction;
|
||||
import org.apache.doris.nereids.trees.expressions.typecoercion.TypeCheckResult;
|
||||
@ -148,11 +149,13 @@ public class CheckAnalysis implements AnalysisRuleFactory {
|
||||
if (func.arity() <= 1) {
|
||||
continue;
|
||||
}
|
||||
for (int i = 1; i < func.arity(); i++) {
|
||||
if (!func.child(i).getInputSlots().isEmpty() && !(func.child(i) instanceof OrderExpression)) {
|
||||
// think about group_concat(distinct col_1, ',')
|
||||
distinctMultiColumns = true;
|
||||
break;
|
||||
if (func instanceof Count) {
|
||||
for (int i = 1; i < func.arity(); i++) {
|
||||
if (!func.child(i).getInputSlots().isEmpty() && !(func.child(i) instanceof OrderExpression)) {
|
||||
// think about group_concat(distinct col_1, ',')
|
||||
distinctMultiColumns = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (distinctMultiColumns) {
|
||||
|
||||
@ -2048,10 +2048,12 @@ public class AggregateStrategies implements ImplementationRuleFactory {
|
||||
if (func.arity() <= 1) {
|
||||
continue;
|
||||
}
|
||||
for (int i = 1; i < func.arity(); i++) {
|
||||
// think about group_concat(distinct col_1, ',')
|
||||
if (!(func.child(i) instanceof OrderExpression) && !func.child(i).getInputSlots().isEmpty()) {
|
||||
return false;
|
||||
if (func instanceof Count) {
|
||||
for (int i = 1; i < func.arity(); i++) {
|
||||
// think about group_concat(distinct col_1, ',')
|
||||
if (!(func.child(i) instanceof OrderExpression) && !func.child(i).getInputSlots().isEmpty()) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user