diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/RuleSet.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/RuleSet.java index a9ce2cce17412d3..b7d07aa134df742 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/RuleSet.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/RuleSet.java @@ -40,10 +40,13 @@ import org.apache.doris.nereids.rules.exploration.join.SemiJoinSemiJoinTranspose; import org.apache.doris.nereids.rules.exploration.join.SemiJoinSemiJoinTransposeProject; import org.apache.doris.nereids.rules.exploration.mv.MaterializedViewAggregateRule; +import org.apache.doris.nereids.rules.exploration.mv.MaterializedViewFilterAggregateRule; import org.apache.doris.nereids.rules.exploration.mv.MaterializedViewFilterJoinRule; +import org.apache.doris.nereids.rules.exploration.mv.MaterializedViewFilterProjectAggregateRule; import org.apache.doris.nereids.rules.exploration.mv.MaterializedViewFilterProjectJoinRule; import org.apache.doris.nereids.rules.exploration.mv.MaterializedViewOnlyJoinRule; import org.apache.doris.nereids.rules.exploration.mv.MaterializedViewProjectAggregateRule; +import org.apache.doris.nereids.rules.exploration.mv.MaterializedViewProjectFilterAggregateRule; import org.apache.doris.nereids.rules.exploration.mv.MaterializedViewProjectFilterJoinRule; import org.apache.doris.nereids.rules.exploration.mv.MaterializedViewProjectJoinRule; import org.apache.doris.nereids.rules.implementation.AggregateStrategies; @@ -233,6 +236,9 @@ public class RuleSet { .add(MaterializedViewProjectFilterJoinRule.INSTANCE) .add(MaterializedViewAggregateRule.INSTANCE) .add(MaterializedViewProjectAggregateRule.INSTANCE) + .add(MaterializedViewFilterAggregateRule.INSTANCE) + .add(MaterializedViewProjectFilterAggregateRule.INSTANCE) + .add(MaterializedViewFilterProjectAggregateRule.INSTANCE) .build(); public List getDPHypReorderRules() { diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/MaterializedViewFilterAggregateRule.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/MaterializedViewFilterAggregateRule.java new file mode 100644 index 000000000000000..40c8b6d681b3eaf --- /dev/null +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/MaterializedViewFilterAggregateRule.java @@ -0,0 +1,45 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package org.apache.doris.nereids.rules.exploration.mv; + +import org.apache.doris.nereids.rules.Rule; +import org.apache.doris.nereids.rules.RuleType; +import org.apache.doris.nereids.trees.plans.Plan; +import org.apache.doris.nereids.trees.plans.logical.LogicalAggregate; +import org.apache.doris.nereids.trees.plans.logical.LogicalFilter; + +import com.google.common.collect.ImmutableList; + +import java.util.List; + +/** + * MaterializedViewFilterAggregateRule + */ +public class MaterializedViewFilterAggregateRule extends AbstractMaterializedViewAggregateRule { + + public static final MaterializedViewFilterAggregateRule INSTANCE = new MaterializedViewFilterAggregateRule(); + + @Override + public List buildRules() { + return ImmutableList.of( + logicalFilter(logicalAggregate(any())).thenApplyMultiNoThrow(ctx -> { + LogicalFilter> root = ctx.root; + return rewrite(root, ctx.cascadesContext); + }).toRule(RuleType.MATERIALIZED_VIEW_FILTER_AGGREGATE)); + } +} diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/MaterializedViewFilterProjectAggregateRule.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/MaterializedViewFilterProjectAggregateRule.java new file mode 100644 index 000000000000000..40655e973944636 --- /dev/null +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/MaterializedViewFilterProjectAggregateRule.java @@ -0,0 +1,47 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package org.apache.doris.nereids.rules.exploration.mv; + +import org.apache.doris.nereids.rules.Rule; +import org.apache.doris.nereids.rules.RuleType; +import org.apache.doris.nereids.trees.plans.Plan; +import org.apache.doris.nereids.trees.plans.logical.LogicalAggregate; +import org.apache.doris.nereids.trees.plans.logical.LogicalFilter; +import org.apache.doris.nereids.trees.plans.logical.LogicalProject; + +import com.google.common.collect.ImmutableList; + +import java.util.List; + +/** + * MaterializedViewFilterProjectAggregateRule + */ +public class MaterializedViewFilterProjectAggregateRule extends AbstractMaterializedViewAggregateRule { + + public static final MaterializedViewFilterProjectAggregateRule + INSTANCE = new MaterializedViewFilterProjectAggregateRule(); + + @Override + public List buildRules() { + return ImmutableList.of( + logicalFilter(logicalProject(logicalAggregate(any()))).thenApplyMultiNoThrow(ctx -> { + LogicalFilter>> root = ctx.root; + return rewrite(root, ctx.cascadesContext); + }).toRule(RuleType.MATERIALIZED_VIEW_FILTER_AGGREGATE)); + } +} diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/MaterializedViewProjectFilterAggregateRule.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/MaterializedViewProjectFilterAggregateRule.java new file mode 100644 index 000000000000000..b841862d5b2505a --- /dev/null +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/MaterializedViewProjectFilterAggregateRule.java @@ -0,0 +1,47 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package org.apache.doris.nereids.rules.exploration.mv; + +import org.apache.doris.nereids.rules.Rule; +import org.apache.doris.nereids.rules.RuleType; +import org.apache.doris.nereids.trees.plans.Plan; +import org.apache.doris.nereids.trees.plans.logical.LogicalAggregate; +import org.apache.doris.nereids.trees.plans.logical.LogicalFilter; +import org.apache.doris.nereids.trees.plans.logical.LogicalProject; + +import com.google.common.collect.ImmutableList; + +import java.util.List; + +/** + * MaterializedViewProjectFilterAggregateRule + */ +public class MaterializedViewProjectFilterAggregateRule extends AbstractMaterializedViewAggregateRule { + + public static final MaterializedViewProjectFilterAggregateRule + INSTANCE = new MaterializedViewProjectFilterAggregateRule(); + + @Override + public List buildRules() { + return ImmutableList.of( + logicalProject(logicalFilter(logicalAggregate(any()))).thenApplyMultiNoThrow(ctx -> { + LogicalProject>> root = ctx.root; + return rewrite(root, ctx.cascadesContext); + }).toRule(RuleType.MATERIALIZED_VIEW_FILTER_AGGREGATE)); + } +} diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/MaterializedViewUtils.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/MaterializedViewUtils.java index ca54c3768318ccd..3a8da2c752bc49b 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/MaterializedViewUtils.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/MaterializedViewUtils.java @@ -222,6 +222,7 @@ public Void visitLogicalRelation(LogicalRelation relation, IncrementCheckerConte if (partitionColumnSet.contains(mvReferenceColumn)) { context.setRelatedTable(table); context.setRelatedTableColumn(mvReferenceColumn); + context.setPctPossible(!mvReferenceColumn.isAllowNull()); } return visit(relation, context); } diff --git a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/exploration/mv/MaterializedViewUtilsTest.java b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/exploration/mv/MaterializedViewUtilsTest.java index c2af1dbdf4aa174..3b78d88c39b05bc 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/exploration/mv/MaterializedViewUtilsTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/exploration/mv/MaterializedViewUtilsTest.java @@ -93,6 +93,31 @@ protected void runBeforeAll() throws Exception { + "PROPERTIES (\n" + " \"replication_num\" = \"1\"\n" + ")"); + + createTable("CREATE TABLE IF NOT EXISTS lineitem_null (\n" + + " L_ORDERKEY INTEGER NOT NULL,\n" + + " L_PARTKEY INTEGER NOT NULL,\n" + + " L_SUPPKEY INTEGER NOT NULL,\n" + + " L_LINENUMBER INTEGER NOT NULL,\n" + + " L_QUANTITY DECIMALV3(15,2) NOT NULL,\n" + + " L_EXTENDEDPRICE DECIMALV3(15,2) NOT NULL,\n" + + " L_DISCOUNT DECIMALV3(15,2) NOT NULL,\n" + + " L_TAX DECIMALV3(15,2) NOT NULL,\n" + + " L_RETURNFLAG CHAR(1) NOT NULL,\n" + + " L_LINESTATUS CHAR(1) NOT NULL,\n" + + " L_SHIPDATE DATE NULL,\n" + + " L_COMMITDATE DATE NULL,\n" + + " L_RECEIPTDATE DATE NULL,\n" + + " L_SHIPINSTRUCT CHAR(25) NOT NULL,\n" + + " L_SHIPMODE CHAR(10) NOT NULL,\n" + + " L_COMMENT VARCHAR(44) NOT NULL\n" + + ")\n" + + "DUPLICATE KEY(L_ORDERKEY, L_PARTKEY, L_SUPPKEY, L_LINENUMBER)\n" + + "PARTITION BY RANGE(L_SHIPDATE) (PARTITION `day_1` VALUES LESS THAN ('2017-02-01'))\n" + + "DISTRIBUTED BY HASH(L_ORDERKEY) BUCKETS 3\n" + + "PROPERTIES (\n" + + " \"replication_num\" = \"1\"\n" + + ")"); } @Test @@ -121,6 +146,29 @@ public void getRelatedTableInfoTestWithoutGroupTest() { }); } + @Test + public void getRelatedTableInfoTestWithoutGroupNullTest() { + PlanChecker.from(connectContext) + .checkExplain("SELECT (o.c1_abs + ps.c2_abs) as add_alias, l.L_SHIPDATE, l.L_ORDERKEY, o.O_ORDERDATE, " + + "ps.PS_AVAILQTY " + + "FROM " + + "lineitem_null as l " + + "LEFT JOIN " + + "(SELECT abs(O_TOTALPRICE + 10) as c1_abs, O_CUSTKEY, O_ORDERDATE, O_ORDERKEY " + + "FROM orders) as o " + + "ON l.L_ORDERKEY = o.O_ORDERKEY " + + "JOIN " + + "(SELECT abs(sqrt(PS_SUPPLYCOST)) as c2_abs, PS_AVAILQTY, PS_PARTKEY, PS_SUPPKEY " + + "FROM partsupp) as ps " + + "ON l.L_PARTKEY = ps.PS_PARTKEY and l.L_SUPPKEY = ps.PS_SUPPKEY", + nereidsPlanner -> { + Plan rewrittenPlan = nereidsPlanner.getRewrittenPlan(); + Optional relatedTableInfo = + MaterializedViewUtils.getRelatedTableInfo("l_shipdate", rewrittenPlan); + Assertions.assertFalse(relatedTableInfo.isPresent()); + }); + } + @Test public void getRelatedTableInfoTestWithSubqueryTest() { PlanChecker.from(connectContext) diff --git a/regression-test/data/nereids_rules_p0/mv/agg_with_roll_up/aggregate_with_roll_up.out b/regression-test/data/nereids_rules_p0/mv/agg_with_roll_up/aggregate_with_roll_up.out index e6facb7b89026fa..fb223bc661b9b16 100644 --- a/regression-test/data/nereids_rules_p0/mv/agg_with_roll_up/aggregate_with_roll_up.out +++ b/regression-test/data/nereids_rules_p0/mv/agg_with_roll_up/aggregate_with_roll_up.out @@ -38,8 +38,10 @@ 3 3 2023-12-11 43.20 43.20 43.20 1 0 -- !query18_0_before -- +3 2023-12-11 43.20 43.20 43.20 1 0 -- !query18_0_after -- +3 2023-12-11 43.20 43.20 43.20 1 0 -- !query19_0_before -- 2 3 2023-12-08 20.00 diff --git a/regression-test/data/nereids_rules_p0/mv/agg_without_roll_up/aggregate_without_roll_up.out b/regression-test/data/nereids_rules_p0/mv/agg_without_roll_up/aggregate_without_roll_up.out index cb924d69bbbfb7a..8bf8d7d4f9fa767 100644 --- a/regression-test/data/nereids_rules_p0/mv/agg_without_roll_up/aggregate_without_roll_up.out +++ b/regression-test/data/nereids_rules_p0/mv/agg_without_roll_up/aggregate_without_roll_up.out @@ -1,7 +1,13 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !query1_0_before -- +1 yy 0 0 77.50 33.50 9.50 5 +2 mi 0 0 57.40 56.20 1.20 2 +2 mm 0 0 43.20 43.20 43.20 1 -- !query1_0_after -- +1 yy 0 0 77.50 33.50 9.50 5 +2 mi 0 0 57.40 56.20 1.20 2 +2 mm 0 0 43.20 43.20 43.20 1 -- !query1_1_before -- 2023-12-08 1 yy 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 @@ -114,16 +120,24 @@ 5 2 mi 0 0 0 0 0 0 0 0 0 0 0 0 0 -- !query18_0_before -- +3 2023-12-11 43.20 43.20 43.20 1 0 -- !query18_0_after -- +3 2023-12-11 43.20 43.20 43.20 1 0 -- !query18_1_before -- +4 43.20 -- !query18_1_after -- +4 43.20 -- !query18_2_before -- +4 43.20 +6 57.40 -- !query18_2_after -- +4 43.20 +6 57.40 -- !query19_0_before -- 2 3 2023-12-08 20.00 10.50 9.50 2 diff --git a/regression-test/data/nereids_rules_p0/mv/join/inner/inner_join.out b/regression-test/data/nereids_rules_p0/mv/join/inner/inner_join.out index df3e20dc64ce0be..abf0eb188e6b25a 100644 --- a/regression-test/data/nereids_rules_p0/mv/join/inner/inner_join.out +++ b/regression-test/data/nereids_rules_p0/mv/join/inner/inner_join.out @@ -100,8 +100,24 @@ 6 -- !query2_0_before -- +4 +4 +4 +4 +4 +4 +6 +6 -- !query2_0_after -- +4 +4 +4 +4 +4 +4 +6 +6 -- !query2_1_before -- 4 @@ -268,8 +284,12 @@ 2 3 2023-12-08 -- !query7_0_before -- +2 3 2023-12-08 +2 3 2023-12-08 -- !query7_0_after -- +2 3 2023-12-08 +2 3 2023-12-08 -- !query10_0_before -- diff --git a/regression-test/data/nereids_rules_p0/mv/join/left_outer/outer_join.out b/regression-test/data/nereids_rules_p0/mv/join/left_outer/outer_join.out index 94143e800ada973..e8665ccb9484fc3 100644 --- a/regression-test/data/nereids_rules_p0/mv/join/left_outer/outer_join.out +++ b/regression-test/data/nereids_rules_p0/mv/join/left_outer/outer_join.out @@ -88,8 +88,24 @@ 2 2 -- !query2_0_before -- +4 +4 +4 +4 +4 +4 +6 +6 -- !query2_0_after -- +4 +4 +4 +4 +4 +4 +6 +6 -- !query2_1_before -- 4 diff --git a/regression-test/suites/nereids_rules_p0/mv/agg_with_roll_up/aggregate_with_roll_up.groovy b/regression-test/suites/nereids_rules_p0/mv/agg_with_roll_up/aggregate_with_roll_up.groovy index b56922d5db64709..d6b5c37e59c095c 100644 --- a/regression-test/suites/nereids_rules_p0/mv/agg_with_roll_up/aggregate_with_roll_up.groovy +++ b/regression-test/suites/nereids_rules_p0/mv/agg_with_roll_up/aggregate_with_roll_up.groovy @@ -402,7 +402,7 @@ suite("aggregate_with_roll_up") { "count(distinct case when o_shippriority > 1 and o_orderkey IN (1, 3) then o_custkey else null end) " + "from lineitem t1 " + "left join orders on t1.l_orderkey = orders.o_orderkey and t1.l_shipdate = o_orderdate " + - "where o_orderdate = '2023-12-11' and l_partkey = 2 " + + "where o_orderdate = '2023-12-11' and l_partkey = 3 " + "group by " + "l_shipdate, " + "l_suppkey" diff --git a/regression-test/suites/nereids_rules_p0/mv/agg_without_roll_up/aggregate_without_roll_up.groovy b/regression-test/suites/nereids_rules_p0/mv/agg_without_roll_up/aggregate_without_roll_up.groovy index 72e80eadbf93f04..5d40aa03138a6d7 100644 --- a/regression-test/suites/nereids_rules_p0/mv/agg_without_roll_up/aggregate_without_roll_up.groovy +++ b/regression-test/suites/nereids_rules_p0/mv/agg_without_roll_up/aggregate_without_roll_up.groovy @@ -194,7 +194,7 @@ suite("aggregate_without_roll_up") { "min(o_totalprice), " + "count(*) " + "from orders " + - "where o_shippriority in (9.5, 10.5)" + + "where o_shippriority in (1, 2)" + "group by " + "o_shippriority, " + "o_comment " @@ -645,7 +645,7 @@ suite("aggregate_without_roll_up") { "count(distinct case when o_shippriority > 1 and o_orderkey IN (1, 3) then o_custkey else null end) " + "from lineitem t1 " + "left join orders on t1.l_orderkey = orders.o_orderkey and t1.l_shipdate = o_orderdate " + - "where l_shipdate = '2023-12-11' and l_suppkey = 2 " + + "where l_shipdate = '2023-12-11' and l_suppkey = 3 " + "group by " + "l_shipdate, " + "l_suppkey" @@ -662,7 +662,7 @@ suite("aggregate_without_roll_up") { def query18_1 = "select l_linenumber, sum(o_totalprice) as sum_alias " + "from lineitem " + "inner join orders on l_orderkey = o_orderkey " + - "where o_custkey = 2 and l_linenumber = 3 " + + "where o_custkey = 2 and l_linenumber = 4 " + "group by l_linenumber, o_custkey " order_qt_query18_1_before "${query18_1}" check_rewrite(mv18_1, query18_1, "mv18_1") @@ -677,7 +677,7 @@ suite("aggregate_without_roll_up") { def query18_2 = "select lineitem.l_linenumber, sum(o_totalprice) as sum_alias " + "from lineitem " + "inner join orders on lineitem.l_orderkey = orders.o_orderkey " + - "where o_custkey = 2 and l_suppkey= 4 " + + "where o_custkey = 2 and l_suppkey= 3 " + "group by lineitem.l_linenumber, orders.o_custkey " order_qt_query18_2_before "${query18_2}" check_not_match(mv18_2, query18_2, "mv18_2") diff --git a/regression-test/suites/nereids_rules_p0/mv/join/inner/inner_join.groovy b/regression-test/suites/nereids_rules_p0/mv/join/inner/inner_join.groovy index 0dcf33a9d87eb22..ccf6a83f2c610dd 100644 --- a/regression-test/suites/nereids_rules_p0/mv/join/inner/inner_join.groovy +++ b/regression-test/suites/nereids_rules_p0/mv/join/inner/inner_join.groovy @@ -239,7 +239,7 @@ suite("inner_join") { def query2_0 = "select lineitem.L_LINENUMBER " + "from lineitem " + "inner join orders on lineitem.L_ORDERKEY = orders.O_ORDERKEY " + - "where lineitem.L_LINENUMBER > 10" + "where lineitem.L_LINENUMBER > 0" order_qt_query2_0_before "${query2_0}" check_rewrite(mv2_0, query2_0, "mv2_0") order_qt_query2_0_after "${query2_0}" @@ -400,10 +400,10 @@ suite("inner_join") { "on lineitem.l_orderkey = o_orderkey and l_shipdate = o_orderdate " def query7_0 = "select l_partkey, l_suppkey, l_shipdate " + "from (select l_shipdate, l_orderkey, l_partkey, l_suppkey " + - "from lineitem where l_partkey in (3, 4)) t1 " + + "from lineitem where l_partkey in (2, 3, 4)) t1 " + "inner join (select * from orders where o_orderdate = '2023-12-08') t2 " + "on t1.l_orderkey = o_orderkey and t1.l_shipdate = o_orderdate " + - "where l_partkey = 3" + "where l_partkey = 2" order_qt_query7_0_before "${query7_0}" check_rewrite(mv7_0, query7_0, "mv7_0") order_qt_query7_0_after "${query7_0}" @@ -417,8 +417,8 @@ suite("inner_join") { def query10_0 = "select orders.O_CUSTKEY " + "from orders " + "inner join lineitem on orders.O_ORDERKEY = lineitem.L_ORDERKEY " + - "WHERE lineitem.L_LINENUMBER > 10 AND orders.O_CUSTKEY = 5 AND " + - "orders.O_SHIPPRIORITY = 1" + "WHERE lineitem.L_LINENUMBER > 0 AND orders.O_CUSTKEY = 1 AND " + + "orders.O_SHIPPRIORITY = 2" order_qt_query10_0_before "${query10_0}" check_not_match(mv10_0, query10_0, "mv10_0") order_qt_query10_0_after "${query10_0}" diff --git a/regression-test/suites/nereids_rules_p0/mv/join/left_outer/outer_join.groovy b/regression-test/suites/nereids_rules_p0/mv/join/left_outer/outer_join.groovy index d7ec67189ac8714..e8b1da2572a22d7 100644 --- a/regression-test/suites/nereids_rules_p0/mv/join/left_outer/outer_join.groovy +++ b/regression-test/suites/nereids_rules_p0/mv/join/left_outer/outer_join.groovy @@ -224,7 +224,7 @@ suite("outer_join") { def query2_0 = "select lineitem.L_LINENUMBER " + "from lineitem " + "left join orders on lineitem.L_ORDERKEY = orders.O_ORDERKEY " + - "where lineitem.L_LINENUMBER > 10" + "where lineitem.L_LINENUMBER > 0" order_qt_query2_0_before "${query2_0}" check_not_match(mv2_0, query2_0, "mv2_0") order_qt_query2_0_after "${query2_0}"