diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/executor/Rewriter.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/executor/Rewriter.java index 970c5009f9..a97fc4a2d4 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/executor/Rewriter.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/executor/Rewriter.java @@ -207,7 +207,8 @@ public class Rewriter extends AbstractBatchJobExecutor { ), // eliminate useless not null or inferred not null // TODO: wait InferPredicates to infer more not null. - bottomUp(new EliminateNotNull()) + bottomUp(new EliminateNotNull()), + topDown(new ConvertInnerOrCrossJoin()) ), topic("Column pruning and infer predicate", custom(RuleType.COLUMN_PRUNING, ColumnPruning::new), diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/memo/Group.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/memo/Group.java index 3987047371..cfaeae6009 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/memo/Group.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/memo/Group.java @@ -21,7 +21,6 @@ import org.apache.doris.common.Pair; import org.apache.doris.nereids.cost.Cost; import org.apache.doris.nereids.properties.LogicalProperties; import org.apache.doris.nereids.properties.PhysicalProperties; -import org.apache.doris.nereids.trees.expressions.literal.Literal; import org.apache.doris.nereids.trees.plans.JoinType; import org.apache.doris.nereids.trees.plans.Plan; import org.apache.doris.nereids.trees.plans.logical.LogicalJoin; @@ -377,12 +376,12 @@ public class Group { */ public boolean isInnerJoinGroup() { Plan plan = getLogicalExpression().getPlan(); - if (plan instanceof LogicalJoin) { - // Right now, we only support inner join with some join conditions - return ((LogicalJoin) plan).getJoinType() == JoinType.INNER_JOIN - && (((LogicalJoin) plan).getOtherJoinConjuncts().isEmpty() - || !(((LogicalJoin) plan).getOtherJoinConjuncts() - .get(0) instanceof Literal)); + if (plan instanceof LogicalJoin + && ((LogicalJoin) plan).getJoinType() == JoinType.INNER_JOIN) { + // Right now, we only support inner join + Preconditions.checkArgument(!((LogicalJoin) plan).getExpressions().isEmpty(), + "inner join must have join conjuncts"); + return true; } return false; } diff --git a/regression-test/data/correctness_p0/test_case_when_decimal.out b/regression-test/data/correctness_p0/test_case_when_decimal.out index 76a2895bab..1a888306ed 100644 --- a/regression-test/data/correctness_p0/test_case_when_decimal.out +++ b/regression-test/data/correctness_p0/test_case_when_decimal.out @@ -5,3 +5,6 @@ -- !sql2 -- 4.41 +-- !sql3 -- +4.41 + diff --git a/regression-test/suites/correctness_p0/test_case_when_decimal.groovy b/regression-test/suites/correctness_p0/test_case_when_decimal.groovy index 88fde3a194..baf7f52690 100644 --- a/regression-test/suites/correctness_p0/test_case_when_decimal.groovy +++ b/regression-test/suites/correctness_p0/test_case_when_decimal.groovy @@ -80,6 +80,21 @@ suite("test_case_when_decimal") { FROM decimal_to_double_table2 T001, decimal_to_double_table1 T101 ) t; """ + sql "set enable_dphyp_optimizer=true;" + qt_sql3 """ + SELECT sum(v24) + FROM ( select + CASE + WHEN 1=0 THEN + 0.00 + ELSE round((CASE + WHEN T001.cust_no = '86193' THEN + 0 + ELSE COALESCE(T101.bar_averageday_asset,0.0) END) * T101.bar_averageday_asset,2) + END v24 + FROM decimal_to_double_table2 T001, decimal_to_double_table1 T101 ) t; + """ + sql """ DROP TABLE IF EXISTS `decimal_to_double_table1`; """ sql """ DROP TABLE IF EXISTS `decimal_to_double_table2`; """ }