This is an automated email from the ASF dual-hosted git repository.
jakevin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push:
new 92c6a3c53b [fix](Nereids) normalize repeat generate push down project
with error nullable (#19831)
92c6a3c53b is described below
commit 92c6a3c53bd7b63e5fcfdccabaccee36347aae1a
Author: morrySnow <[email protected]>
AuthorDate: Fri May 19 13:15:42 2023 +0800
[fix](Nereids) normalize repeat generate push down project with error
nullable (#19831)
---
.../doris/nereids/rules/analysis/NormalizeRepeat.java | 8 --------
.../nereids/rules/rewrite/logical/AdjustNullable.java | 19 +++++++++++++------
2 files changed, 13 insertions(+), 14 deletions(-)
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/NormalizeRepeat.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/NormalizeRepeat.java
index 2e979853ea..4efdd633d6 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/NormalizeRepeat.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/NormalizeRepeat.java
@@ -226,17 +226,9 @@ public class NormalizeRepeat extends
OneAnalysisRuleFactory {
}
List<Expression> groupingSetExpressions =
ExpressionUtils.flatExpressions(repeat.getGroupingSets());
-
- // nullable will be different from grouping set and output expressions,
- // so we can not use the slot in grouping set,but use the equivalent
slot in output expressions.
- List<NamedExpression> outputs = repeat.getOutputExpressions();
-
Map<Expression, NormalizeToSlotTriplet> normalizeToSlotMap =
Maps.newLinkedHashMap();
for (Expression expression : sourceExpressions) {
Optional<NormalizeToSlotTriplet> pushDownTriplet;
- if (expression instanceof NamedExpression &&
outputs.contains(expression)) {
- expression = outputs.get(outputs.indexOf(expression));
- }
if (groupingSetExpressions.contains(expression)) {
pushDownTriplet =
toGroupingSetExpressionPushDownTriplet(expression,
existsAliasMap.get(expression));
} else {
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/logical/AdjustNullable.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/logical/AdjustNullable.java
index 55c5c2be08..abf7940caa 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/logical/AdjustNullable.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/logical/AdjustNullable.java
@@ -41,6 +41,7 @@ import
org.apache.doris.nereids.trees.plans.logical.LogicalTopN;
import org.apache.doris.nereids.trees.plans.logical.LogicalWindow;
import org.apache.doris.nereids.trees.plans.visitor.CustomRewriter;
import org.apache.doris.nereids.trees.plans.visitor.DefaultPlanRewriter;
+import org.apache.doris.nereids.util.ExpressionUtils;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
@@ -116,11 +117,17 @@ public class AdjustNullable extends
DefaultPlanRewriter<Void> implements CustomR
public Plan visitLogicalRepeat(LogicalRepeat<? extends Plan> repeat, Void
context) {
repeat = (LogicalRepeat<? extends Plan>) super.visit(repeat, context);
Map<ExprId, Slot> exprIdSlotMap = collectChildrenOutputMap(repeat);
- List<NamedExpression> newOutputs =
updateExpressions(repeat.getOutputExpressions(), exprIdSlotMap);
- List<List<Expression>> newGroupingSets =
repeat.getGroupingSets().stream()
- .map(l -> updateExpressions(l, exprIdSlotMap))
- .collect(ImmutableList.toImmutableList());
- return repeat.withGroupSetsAndOutput(newGroupingSets,
newOutputs).recomputeLogicalProperties();
+ Set<Expression> flattenGroupingSetExpr = ImmutableSet.copyOf(
+ ExpressionUtils.flatExpressions(repeat.getGroupingSets()));
+ List<NamedExpression> newOutputs = Lists.newArrayList();
+ for (NamedExpression output : repeat.getOutputExpressions()) {
+ if (flattenGroupingSetExpr.contains(output)) {
+ newOutputs.add(output);
+ } else {
+ newOutputs.add(updateExpression(output, exprIdSlotMap));
+ }
+ }
+ return repeat.withGroupSetsAndOutput(repeat.getGroupingSets(),
newOutputs).recomputeLogicalProperties();
}
@Override
@@ -178,7 +185,7 @@ public class AdjustNullable extends
DefaultPlanRewriter<Void> implements CustomR
}
private <T extends Expression> T updateExpression(T input, Map<ExprId,
Slot> exprIdSlotMap) {
- return (T) input.rewriteDownShortCircuit(e ->
SlotReferenceReplacer.INSTANCE.visit(e, exprIdSlotMap));
+ return (T) input.rewriteDownShortCircuit(e ->
e.accept(SlotReferenceReplacer.INSTANCE, exprIdSlotMap));
}
private <T extends Expression> List<T> updateExpressions(List<T> inputs,
Map<ExprId, Slot> exprIdSlotMap) {
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]