diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/visitor/DefaultExpressionRewriter.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/visitor/DefaultExpressionRewriter.java index fd25f9368ef0b5..9e86ebb2157bbf 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/visitor/DefaultExpressionRewriter.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/visitor/DefaultExpressionRewriter.java @@ -18,6 +18,7 @@ package org.apache.doris.nereids.trees.expressions.visitor; import org.apache.doris.nereids.trees.expressions.Expression; +import org.apache.doris.nereids.trees.expressions.WhenClause; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList.Builder; @@ -33,6 +34,12 @@ public Expression visit(Expression expr, C context) { return rewriteChildren(this, expr, context); } + @Override + public Expression visitWhenClause(WhenClause whenClause, C context) { + // should not rewrite when clause to other expression because CaseWhen require WhenClause as children + return rewriteChildren(this, whenClause, context); + } + /** rewriteChildren */ public static final E rewriteChildren( ExpressionVisitor rewriter, E expr, C context) { diff --git a/regression-test/suites/nereids_syntax_p0/join.groovy b/regression-test/suites/nereids_syntax_p0/join.groovy index 4b79f8f52a8353..53887b652074fc 100644 --- a/regression-test/suites/nereids_syntax_p0/join.groovy +++ b/regression-test/suites/nereids_syntax_p0/join.groovy @@ -273,4 +273,42 @@ suite("join") { """ order_qt_test "SELECT * FROM lineorder RIGHT SEMI JOIN supplier ON lineorder.lo_suppkey = supplier.s_suppkey and s_name='Supplier#000000029';" + + multi_sql """ + drop table if exists table_test1; + drop table if exists table_test2; + + CREATE TABLE table_test1 ( + id VARCHAR(20) NULL, + long1 BIGINT NULL, + long2 BIGINT NULL, + ) ENGINE=OLAP + DUPLICATE KEY(id) + COMMENT 'olap' + DISTRIBUTED BY HASH(id) BUCKETS AUTO + PROPERTIES ( + "replication_allocation" = "tag.location.default: 1" + ); + + CREATE TABLE table_test2 ( + id VARCHAR(20) NULL, + re_long_4 BIGINT NULL, + ) ENGINE=OLAP + DUPLICATE KEY(id) + COMMENT 'olap' + DISTRIBUTED BY HASH(id) BUCKETS AUTO + PROPERTIES ( + "replication_allocation" = "tag.location.default: 1" + ); + + SELECT 1 + from table_test1 b + WHERE ( + CASE + WHEN b.long2=(SELECT re_long_4 FROM table_test2 limit 1) THEN (select long1 from table_test1 limit 1 ) + WHEN b.long2=(SELECT re_long_4 FROM table_test2 limit 1) THEN (select long1 from table_test1 limit 1) + ELSE b.long2 + END + )>0; + """ }