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

mbudiu 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 0c67982546 [CALCITE-6639] Optimization that pulls up predicates causes 
ASOF JOIN validation failure
0c67982546 is described below

commit 0c679825462685bd7a35a6678c917fb3d7cdbb27
Author: Mihai Budiu <[email protected]>
AuthorDate: Tue Oct 22 20:45:07 2024 -0700

    [CALCITE-6639] Optimization that pulls up predicates causes ASOF JOIN 
validation failure
    
    Signed-off-by: Mihai Budiu <[email protected]>
---
 .../apache/calcite/rel/metadata/RelMdPredicates.java   |  2 --
 .../java/org/apache/calcite/test/RelOptRulesTest.java  | 13 +++++++++++++
 .../org/apache/calcite/test/RelOptRulesTest.xml        | 18 ++++++++++++++++++
 3 files changed, 31 insertions(+), 2 deletions(-)

diff --git 
a/core/src/main/java/org/apache/calcite/rel/metadata/RelMdPredicates.java 
b/core/src/main/java/org/apache/calcite/rel/metadata/RelMdPredicates.java
index 58496a1811..19335f0fff 100644
--- a/core/src/main/java/org/apache/calcite/rel/metadata/RelMdPredicates.java
+++ b/core/src/main/java/org/apache/calcite/rel/metadata/RelMdPredicates.java
@@ -774,8 +774,6 @@ public class RelMdPredicates
       case INNER:
       case LEFT:
       case ANTI:
-      case ASOF:
-      case LEFT_ASOF:
         infer(leftChildPredicates, allExprs, inferredPredicates,
             includeEqualityInference,
             joinType == JoinRelType.LEFT ? rightFieldsBitSet
diff --git a/core/src/test/java/org/apache/calcite/test/RelOptRulesTest.java 
b/core/src/test/java/org/apache/calcite/test/RelOptRulesTest.java
index 904643cdf2..26571b70bd 100644
--- a/core/src/test/java/org/apache/calcite/test/RelOptRulesTest.java
+++ b/core/src/test/java/org/apache/calcite/test/RelOptRulesTest.java
@@ -3089,6 +3089,19 @@ class RelOptRulesTest extends RelOptTestBase {
         .check();
   }
 
+  /** Test case for <a 
href="https://issues.apache.org/jira/browse/CALCITE-6639";>[CALCITE-6639]
+   * Optimization that pulls up predicates causes ASOF JOIN validation 
failures</a>. */
+  @Test void testAsofOpt() {
+    final String sql = "SELECT *\n"
+        + "FROM (VALUES (NULL, 0), (1, NULL), (1, 0), (1, 1), (1, 2), "
+        + "(1, 3), (1, 4), (2, 3), (3, 4)) AS t1(k, t)\n"
+        + "ASOF JOIN (VALUES (1, NULL), (1, 2), (1, 3), (2, 10), (2, 0)) AS 
t2(k, t)\n"
+        + "MATCH_CONDITION t2.t < t1.t\n"
+        + "ON t1.k = t2.k\n";
+    sql(sql).withRule(CoreRules.PROJECT_REDUCE_EXPRESSIONS)
+        .checkUnchanged();
+  }
+
   /** Tests to see if the final branch of union is missed. */
   @Test void testUnionMergeRule() {
     final String sql = "select * from (\n"
diff --git 
a/core/src/test/resources/org/apache/calcite/test/RelOptRulesTest.xml 
b/core/src/test/resources/org/apache/calcite/test/RelOptRulesTest.xml
index a0070f5922..da7c881b22 100644
--- a/core/src/test/resources/org/apache/calcite/test/RelOptRulesTest.xml
+++ b/core/src/test/resources/org/apache/calcite/test/RelOptRulesTest.xml
@@ -1356,6 +1356,24 @@ LogicalProject(EXPR$0=[ARRAY_TO_STRING(ARRAY('1', '2', 
'3', '4', null:CHAR(1), '
       <![CDATA[
 LogicalProject(EXPR$0=[null:VARCHAR])
   LogicalValues(tuples=[[{ 0 }]])
+]]>
+    </Resource>
+  </TestCase>
+  <TestCase name="testAsofOpt">
+    <Resource name="sql">
+      <![CDATA[SELECT *
+FROM (VALUES (NULL, 0), (1, NULL), (1, 0), (1, 1), (1, 2), (1, 3), (1, 4), (2, 
3), (3, 4)) AS t1(k, t)
+ASOF JOIN (VALUES (1, NULL), (1, 2), (1, 3), (2, 10), (2, 0)) AS t2(k, t)
+MATCH_CONDITION t2.t < t1.t
+ON t1.k = t2.k
+]]>
+    </Resource>
+    <Resource name="planBefore">
+      <![CDATA[
+LogicalProject(K=[$0], T=[$1], K0=[$2], T0=[$3])
+  LogicalAsofJoin(condition=[=($0, $2)], joinType=[asof], 
matchCondition=[<($3, $1)])
+    LogicalValues(tuples=[[{ null, 0 }, { 1, null }, { 1, 0 }, { 1, 1 }, { 1, 
2 }, { 1, 3 }, { 1, 4 }, { 2, 3 }, { 3, 4 }]])
+    LogicalValues(tuples=[[{ 1, null }, { 1, 2 }, { 1, 3 }, { 2, 10 }, { 2, 0 
}]])
 ]]>
     </Resource>
   </TestCase>

Reply via email to