This is an automated email from the ASF dual-hosted git repository.
huajianlan 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 62fff8e750e [fix](nereids) fix The children format needs to be
[WhenClause+, DefaultValue?] (#38491) (#38778)
62fff8e750e is described below
commit 62fff8e750ea5894adae172db985babe05f9468c
Author: 924060929 <[email protected]>
AuthorDate: Fri Aug 2 20:20:13 2024 +0800
[fix](nereids) fix The children format needs to be [WhenClause+,
DefaultValue?] (#38491) (#38778)
fix The children format needs to be [WhenClause+, DefaultValue?]
---
.../visitor/DefaultExpressionRewriter.java | 7 ++++
.../org/apache/doris/regression/suite/Suite.groovy | 11 +++++++
.../suites/nereids_syntax_p0/join.groovy | 38 ++++++++++++++++++++++
3 files changed, 56 insertions(+)
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 6c25fcbe90b..d49a91c95f8 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 java.util.ArrayList;
import java.util.List;
@@ -33,6 +34,12 @@ public abstract class DefaultExpressionRewriter<C> extends
ExpressionVisitor<Exp
return rewrite(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 rewrite(this, whenClause, context);
+ }
+
/** rewrite */
public static final <C> Expression rewrite(ExpressionVisitor<Expression,
C> rewriter, Expression expr, C context) {
List<Expression> newChildren = new ArrayList<>();
diff --git
a/regression-test/framework/src/main/groovy/org/apache/doris/regression/suite/Suite.groovy
b/regression-test/framework/src/main/groovy/org/apache/doris/regression/suite/Suite.groovy
index 160df699805..9963746d254 100644
---
a/regression-test/framework/src/main/groovy/org/apache/doris/regression/suite/Suite.groovy
+++
b/regression-test/framework/src/main/groovy/org/apache/doris/regression/suite/Suite.groovy
@@ -312,6 +312,17 @@ class Suite implements GroovyInterceptable {
return result
}
+ List<List<Object>> multi_sql(String sqlStr, boolean isOrder = false) {
+ String[] sqls = sqlStr.split(";")
+ def result = new ArrayList<Object>();
+ for (String query : sqls) {
+ if (!query.trim().isEmpty()) {
+ result.add(sql(query, isOrder));
+ }
+ }
+ return result
+ }
+
List<List<Object>> insert_into_sql_impl(Connection conn, String sqlStr,
int num) {
logger.info("insert into " + num + " records")
def (result, meta) = JdbcUtils.executeToList(conn, sqlStr)
diff --git a/regression-test/suites/nereids_syntax_p0/join.groovy
b/regression-test/suites/nereids_syntax_p0/join.groovy
index 63382c3ed44..65eddd01d73 100644
--- a/regression-test/suites/nereids_syntax_p0/join.groovy
+++ b/regression-test/suites/nereids_syntax_p0/join.groovy
@@ -271,4 +271,42 @@ suite("join") {
where
ref_2.`id` is not NULL
"""
+
+ 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;
+ """
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]