This is an automated email from the ASF dual-hosted git repository.

xiong pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/calcite.git


The following commit(s) were added to refs/heads/main by this push:
     new fb7eddea9b [CALCITE-6592] Add test for RelMdPredicates pull up 
predicate from UNION when it's input predicates include NULL VALUE
fb7eddea9b is described below

commit fb7eddea9b4b49eea9d855370d840b3400f11966
Author: Xiong Duan <[email protected]>
AuthorDate: Sat Oct 19 03:43:19 2024 +0800

    [CALCITE-6592] Add test for RelMdPredicates pull up predicate from UNION 
when it's input predicates include NULL VALUE
---
 .../org/apache/calcite/test/RelMetadataTest.java   | 71 ++++++++++++++++++++++
 1 file changed, 71 insertions(+)

diff --git a/core/src/test/java/org/apache/calcite/test/RelMetadataTest.java 
b/core/src/test/java/org/apache/calcite/test/RelMetadataTest.java
index d654612851..fb0e8b5737 100644
--- a/core/src/test/java/org/apache/calcite/test/RelMetadataTest.java
+++ b/core/src/test/java/org/apache/calcite/test/RelMetadataTest.java
@@ -2596,6 +2596,77 @@ public class RelMetadataTest {
 
   }
 
+  /** Test case for
+   * <a 
href="https://issues.apache.org/jira/browse/CALCITE-6592";>[CALCITE-6592]
+   * Add test for RelMdPredicates pull up predicate from UNION
+   * when it's input predicates include NULL VALUE</a>. */
+  @Test void testPullUpPredicatesFromUnionWithValues1() {
+    final String sql = "select cast(null as integer) as a\n"
+        + "union all\n"
+        + "select 5 as a";
+    final Union rel = (Union) sql(sql).toRel();
+    final RelMetadataQuery mq = rel.getCluster().getMetadataQuery();
+    RelOptPredicateList inputSet = mq.getPulledUpPredicates(rel);
+    ImmutableList<RexNode> pulledUpPredicates = inputSet.pulledUpPredicates;
+    assertThat(pulledUpPredicates, sortsAs("[SEARCH($0, Sarg[5; NULL AS 
TRUE])]"));
+  }
+
+  @Test void testPullUpPredicatesFromUnionWithValues2() {
+    final String sql = "select 6 as a\n"
+        + "union all\n"
+        + "select 5 as a";
+    final Union rel = (Union) sql(sql).toRel();
+    final RelMetadataQuery mq = rel.getCluster().getMetadataQuery();
+    RelOptPredicateList inputSet = mq.getPulledUpPredicates(rel);
+    ImmutableList<RexNode> pulledUpPredicates = inputSet.pulledUpPredicates;
+    assertThat(pulledUpPredicates, sortsAs("[SEARCH($0, Sarg[5, 6])]"));
+  }
+
+  @Test void testPullUpPredicatesFromUnionWithValues3() {
+    final String sql = "select cast(null as integer) as a, 6 as b, 7 as c\n"
+        + "union all\n"
+        + "select 5 as a, cast(null as integer) as b, 7 as c";
+    final Union rel = (Union) sql(sql).toRel();
+    final RelMetadataQuery mq = rel.getCluster().getMetadataQuery();
+    RelOptPredicateList inputSet = mq.getPulledUpPredicates(rel);
+    ImmutableList<RexNode> pulledUpPredicates = inputSet.pulledUpPredicates;
+    assertThat(pulledUpPredicates,
+        anyOf(sortsAs("[=($2, 7), OR(AND(IS NULL($0), IS NULL($1)), AND(=($0, 
5), =($1, 6)))]"),
+            sortsAs("[=($2, 7), OR(AND(=($1, 6), IS NULL($0)), AND(=($0, 5), 
IS NULL($1)))]"),
+            sortsAs("[=($2, 7), OR(AND(IS NULL($0), =($1, 6)), AND(=($0, 5), 
IS NULL($1)))]")));
+  }
+
+  @Test void testPullUpPredicatesFromUnionWithProject() {
+    final String sql = "select null from emp where empno = 1\n"
+        + "union all\n"
+        + "select null from emp where comm = 2";
+    final Union rel = (Union) sql(sql).toRel();
+    final RelMetadataQuery mq = rel.getCluster().getMetadataQuery();
+    RelOptPredicateList inputSet = mq.getPulledUpPredicates(rel);
+    ImmutableList<RexNode> pulledUpPredicates = inputSet.pulledUpPredicates;
+    assertThat(pulledUpPredicates,
+        sortsAs("[IS NULL($0)]"));
+  }
+
+  @Test void testPullUpPredicatesFromUnionWithProject2() {
+    final String sql = "select empno = null from emp where comm = 2\n"
+        + "union all\n"
+        + "select comm = 2 from emp where comm = 2";
+    final Union rel = (Union) sql(sql).toRel();
+    final RelMetadataQuery mq = rel.getCluster().getMetadataQuery();
+    RelOptPredicateList inputSet = mq.getPulledUpPredicates(rel);
+    ImmutableList<RexNode> pulledUpPredicates = inputSet.pulledUpPredicates;
+    assertThat(pulledUpPredicates, sortsAs("[]"));
+  }
+
+  @Test void testPullUpPredicatesFromProject() {
+    final RelNode rel = sql(""
+        + "select null, comm = null from emp\n").toRel();
+    final RelMetadataQuery mq = rel.getCluster().getMetadataQuery();
+    assertThat(mq.getPulledUpPredicates(rel).pulledUpPredicates,
+        sortsAs("[IS NULL($0), IS NULL($1)]"));
+  }
+
   /** Test case for
    * <a 
href="https://issues.apache.org/jira/browse/CALCITE-6599";>[CALCITE-6599]
    * RelMdPredicates should pull up more predicates from VALUES

Reply via email to