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 84cdb9cbaae7eb..61da29d642aa1f 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 Expression visitAlias(Alias alias, DeepCopierContext context) { @Override public Expression visitSlotReference(SlotReference slotReference, DeepCopierContext context) { Map 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 ffba3bb1f4db71..4d89227ee9fcf8 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 R visitGroupingScalarFunction(GroupingScalarFunction groupingScalarFuncti } 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 284361624e661a..2344cedddd5077 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 2f9962d921637b..1c2dd55676d42c 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;""" }