This is an automated email from the ASF dual-hosted git repository.
kxiao pushed a commit to branch branch-2.0
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-2.0 by this push:
new ad7c6bf7f8f [fix](nereids)add visitMarkJoinReference method in
ExpressionDeepCopier #25874 (#26688)
ad7c6bf7f8f is described below
commit ad7c6bf7f8f81a2aaaac8259e8800611c1b2eacf
Author: starocean999 <[email protected]>
AuthorDate: Thu Nov 9 23:34:32 2023 +0800
[fix](nereids)add visitMarkJoinReference method in ExpressionDeepCopier
#25874 (#26688)
---
.../doris/nereids/trees/copier/ExpressionDeepCopier.java | 11 +++++------
.../nereids/trees/expressions/visitor/ExpressionVisitor.java | 2 +-
regression-test/data/nereids_p0/subquery/test_subquery.out | 3 +++
.../suites/nereids_p0/subquery/test_subquery.groovy | 2 ++
4 files changed, 11 insertions(+), 7 deletions(-)
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/copier/ExpressionDeepCopier.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/copier/ExpressionDeepCopier.java
index 84cdb9cbaae..61da29d642a 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/copier/ExpressionDeepCopier.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/copier/ExpressionDeepCopier.java
@@ -70,15 +70,14 @@ public class ExpressionDeepCopier extends
DefaultExpressionRewriter<DeepCopierCo
@Override
public Expression visitSlotReference(SlotReference slotReference,
DeepCopierContext context) {
Map<ExprId, ExprId> exprIdReplaceMap = context.exprIdReplaceMap;
+ ExprId newExprId;
if (exprIdReplaceMap.containsKey(slotReference.getExprId())) {
- ExprId newExprId = exprIdReplaceMap.get(slotReference.getExprId());
- return slotReference.withExprId(newExprId);
+ newExprId = exprIdReplaceMap.get(slotReference.getExprId());
} else {
- SlotReference newOne = new SlotReference(slotReference.getName(),
slotReference.getDataType(),
- slotReference.nullable(), slotReference.getQualifier());
- exprIdReplaceMap.put(slotReference.getExprId(),
newOne.getExprId());
- return newOne;
+ newExprId = StatementScopeIdGenerator.newExprId();
+ exprIdReplaceMap.put(slotReference.getExprId(), newExprId);
}
+ return slotReference.withExprId(newExprId);
}
@Override
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/visitor/ExpressionVisitor.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/visitor/ExpressionVisitor.java
index ffba3bb1f4d..4d89227ee9f 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/visitor/ExpressionVisitor.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/visitor/ExpressionVisitor.java
@@ -407,7 +407,7 @@ public abstract class ExpressionVisitor<R, C>
}
public R visitVirtualReference(VirtualSlotReference virtualSlotReference,
C context) {
- return visit(virtualSlotReference, context);
+ return visitSlotReference(virtualSlotReference, context);
}
public R visitVariableDesc(VariableDesc variableDesc, C context) {
diff --git a/regression-test/data/nereids_p0/subquery/test_subquery.out
b/regression-test/data/nereids_p0/subquery/test_subquery.out
index 284361624e6..2344cedddd5 100644
--- a/regression-test/data/nereids_p0/subquery/test_subquery.out
+++ b/regression-test/data/nereids_p0/subquery/test_subquery.out
@@ -23,3 +23,6 @@ true 15 1992 3021 11011920 0.000 true
9999-12-12 2015-04-02T00:00 3.141592653 2
-- !sql_subquery_one_row_relation --
1
+-- !sql_mark_join --
+1
+
diff --git a/regression-test/suites/nereids_p0/subquery/test_subquery.groovy
b/regression-test/suites/nereids_p0/subquery/test_subquery.groovy
index 2f9962d9216..1c2dd55676d 100644
--- a/regression-test/suites/nereids_p0/subquery/test_subquery.groovy
+++ b/regression-test/suites/nereids_p0/subquery/test_subquery.groovy
@@ -84,5 +84,7 @@ suite("test_subquery") {
qt_sql_subquery_one_row_relation """select * from test_one_row_relation;"""
+ qt_sql_mark_join """with A as (select count(*) n1 from
test_one_row_relation where exists (select 1 from test_one_row_relation t where
t.user_id = test_one_row_relation.user_id) or 1 = 1) select * from A;"""
+
sql """drop table if exists test_one_row_relation;"""
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]