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>