diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/NonEqualPredicateInfer.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/NonEqualPredicateInfer.java index 9a6fff6b96f5b0a..479f24c980f1e87 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/NonEqualPredicateInfer.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/NonEqualPredicateInfer.java @@ -73,7 +73,7 @@ private InferenceGraph(Set inputs) { inputExpressionSet.add(input.left()); inputExpressionSet.add(input.right()); if (input instanceof LessThan || input instanceof LessThanEqual) { - inputPredicates.add(input.commute()); + inputPredicates.add((ComparisonPredicate) input.commute().withInferred(input.isInferred())); } else { inputPredicates.add(input); } @@ -388,7 +388,8 @@ private Set chooseInputPredicates(Relation[][] chosen) { if (!keep[i]) { continue; } - chooseInputs.add(normalizePredicate(inputPredicates.get(i))); + chooseInputs.add(normalizePredicate(inputPredicates.get(i)) + .withInferred(inputPredicates.get(i).isInferred())); } return chooseInputs; } diff --git a/fe/fe-core/src/test/java/org/apache/doris/nereids/properties/UniformTest.java b/fe/fe-core/src/test/java/org/apache/doris/nereids/properties/UniformTest.java index ce9fe85942e67d1..8460425a32a623e 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/nereids/properties/UniformTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/nereids/properties/UniformTest.java @@ -209,6 +209,10 @@ void testWindow() { @Test void testEqual() { + // Because in INFER_PREDICATES, id=1 and id=id2 is rewritten as id=1 and id2=1 + // The equivalence set in DataTrait does not support the id=1 id2=1->id=id2 temporarily, + // so in order to run through this case, Disable INFER_PREDICATES temporarily + connectContext.getSessionVariable().setDisableNereidsRules("INFER_PREDICATES,PRUNE_EMPTY_PARTITION"); Plan plan = PlanChecker.from(connectContext) .analyze("select id2 from agg where id = 1 and id = id2") .rewrite() diff --git a/fe/fe-core/src/test/java/org/apache/doris/policy/PolicyTest.java b/fe/fe-core/src/test/java/org/apache/doris/policy/PolicyTest.java index f803dc10563193c..bcf194b2d22bef1 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/policy/PolicyTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/policy/PolicyTest.java @@ -222,13 +222,13 @@ public void testComplexSql() throws Exception { createPolicy("CREATE ROW POLICY test_row_policy1 ON test.table1 AS RESTRICTIVE TO test_policy USING (k1 = 1)"); createPolicy("CREATE ROW POLICY test_row_policy2 ON test.table1 AS RESTRICTIVE TO test_policy USING (k2 = 1)"); String joinSql = "select * from table1 join table2 on table1.k1=table2.k1"; - Assertions.assertTrue(getSQLPlanOrErrorMsg(joinSql).contains("PREDICATES: ((k1 = 1) AND (k2 = 1))")); + Assertions.assertTrue(getSQLPlanOrErrorMsg(joinSql).contains("PREDICATES: ((k2 = 1) AND (k1 = 1))")); String unionSql = "select * from table1 union select * from table2"; - Assertions.assertTrue(getSQLPlanOrErrorMsg(unionSql).contains("PREDICATES: ((k1 = 1) AND (k2 = 1))")); + Assertions.assertTrue(getSQLPlanOrErrorMsg(unionSql).contains("PREDICATES: ((k2 = 1) AND (k1 = 1))")); String subQuerySql = "select * from table2 where k1 in (select k1 from table1)"; - Assertions.assertTrue(getSQLPlanOrErrorMsg(subQuerySql).contains("PREDICATES: ((k1 = 1) AND (k2 = 1))")); + Assertions.assertTrue(getSQLPlanOrErrorMsg(subQuerySql).contains("PREDICATES: ((k2 = 1) AND (k1 = 1))")); String aliasSql = "select * from table1 t1 join table2 t2 on t1.k1=t2.k1"; - Assertions.assertTrue(getSQLPlanOrErrorMsg(aliasSql).contains("PREDICATES: ((k1 = 1) AND (k2 = 1))")); + Assertions.assertTrue(getSQLPlanOrErrorMsg(aliasSql).contains("PREDICATES: ((k2 = 1) AND (k1 = 1))")); dropPolicy("DROP ROW POLICY test_row_policy1 ON test.table1"); dropPolicy("DROP ROW POLICY test_row_policy2 ON test.table1"); }