This is an automated email from the ASF dual-hosted git repository.
dataroaring pushed a commit to branch branch-3.0
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-3.0 by this push:
new 5c6e2a6052d branch-3.0: [fix](nereids) Fix the expr id are same but
different expr when agg table with random distribute #52993 (#53619)
5c6e2a6052d is described below
commit 5c6e2a6052d9ff22f4d690ad6a66be51c880d226
Author: seawinde <[email protected]>
AuthorDate: Tue Aug 12 10:31:25 2025 +0800
branch-3.0: [fix](nereids) Fix the expr id are same but different expr when
agg table with random distribute #52993 (#53619)
picked from #52993
---
.../doris/nereids/rules/analysis/BindRelation.java | 5 ++-
.../nereids/rules/analysis/BindRelationTest.java | 43 ++++++++++++++++++++++
2 files changed, 46 insertions(+), 2 deletions(-)
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindRelation.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindRelation.java
index 8db2e6f0c7a..274801f7fd6 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindRelation.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindRelation.java
@@ -59,6 +59,7 @@ import org.apache.doris.nereids.trees.expressions.Expression;
import org.apache.doris.nereids.trees.expressions.NamedExpression;
import org.apache.doris.nereids.trees.expressions.Slot;
import org.apache.doris.nereids.trees.expressions.SlotReference;
+import org.apache.doris.nereids.trees.expressions.StatementScopeIdGenerator;
import
org.apache.doris.nereids.trees.expressions.functions.AggCombinerFunctionBuilder;
import org.apache.doris.nereids.trees.expressions.functions.FunctionBuilder;
import org.apache.doris.nereids.trees.expressions.functions.agg.BitmapUnion;
@@ -282,8 +283,8 @@ public class BindRelation extends OneAnalysisRuleFactory {
if (function == null) {
return olapScan;
}
- Alias alias = new Alias(exprId, ImmutableList.of(function),
col.getName(),
- olapScan.qualified(), true);
+ Alias alias = new Alias(StatementScopeIdGenerator.newExprId(),
ImmutableList.of(function),
+ col.getName(), olapScan.qualified(), true);
outputExpressions.add(alias);
}
}
diff --git
a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/analysis/BindRelationTest.java
b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/analysis/BindRelationTest.java
index eaeaa3b2edd..428254a91c4 100644
---
a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/analysis/BindRelationTest.java
+++
b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/analysis/BindRelationTest.java
@@ -20,10 +20,16 @@ package org.apache.doris.nereids.rules.analysis;
import org.apache.doris.nereids.analyzer.UnboundRelation;
import org.apache.doris.nereids.pattern.GeneratedPlanPatterns;
import org.apache.doris.nereids.rules.RulePromise;
+import org.apache.doris.nereids.trees.expressions.Alias;
+import org.apache.doris.nereids.trees.expressions.ExprId;
+import org.apache.doris.nereids.trees.expressions.Expression;
+import org.apache.doris.nereids.trees.expressions.NamedExpression;
import org.apache.doris.nereids.trees.expressions.StatementScopeIdGenerator;
import org.apache.doris.nereids.trees.plans.Plan;
import org.apache.doris.nereids.trees.plans.logical.LogicalAggregate;
import org.apache.doris.nereids.trees.plans.logical.LogicalOlapScan;
+import org.apache.doris.nereids.trees.plans.visitor.DefaultPlanVisitor;
+import org.apache.doris.nereids.util.PlanChecker;
import org.apache.doris.nereids.util.PlanRewriter;
import org.apache.doris.utframe.TestWithFeService;
@@ -31,6 +37,11 @@ import com.google.common.collect.ImmutableList;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+
class BindRelationTest extends TestWithFeService implements
GeneratedPlanPatterns {
private static final String DB1 = "db1";
private static final String DB2 = "db2";
@@ -93,6 +104,38 @@ class BindRelationTest extends TestWithFeService implements
GeneratedPlanPattern
plan.getOutput().get(1).getQualifier());
}
+ @Test
+ void testBindRandomAggTableExprIdSame() {
+
connectContext.getSessionVariable().setDisableNereidsRules("PRUNE_EMPTY_PARTITION");
+ connectContext.getState().setIsQuery(true);
+ PlanChecker.from(connectContext)
+ .checkPlannerResult("select * from db1.tagg",
+ planner -> {
+ List<Alias> collectedAlias = new ArrayList<>();
+
planner.getCascadesContext().getRewritePlan().accept(
+ new DefaultPlanVisitor<Void,
List<Alias>>() {
+ @Override
+ public Void
visitLogicalAggregate(LogicalAggregate<? extends Plan> aggregate,
+ List<Alias> context) {
+ for (Expression expression :
aggregate.getExpressions()) {
+ collectedAlias.addAll(
+
expression.collectToList(Alias.class::isInstance));
+ }
+ return
super.visitLogicalAggregate(aggregate, context);
+ }
+ }, collectedAlias);
+ for (Alias alias : collectedAlias) {
+ for (Expression child : alias.children()) {
+ Set<ExprId> childExpressionSet =
+
child.collectToSet(NamedExpression.class::isInstance).stream()
+ .map(expr ->
((NamedExpression) expr).getExprId())
+
.collect(Collectors.toSet());
+
Assertions.assertFalse(childExpressionSet.contains(alias.getExprId()));
+ }
+ }
+ });
+ }
+
@Override
public RulePromise defaultPromise() {
return RulePromise.REWRITE;
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]