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 77b1c567c3 [CALCITE-6959] Support LogicalAsofJoin in RelShuttle
77b1c567c3 is described below
commit 77b1c567c3450471dae6f71dc5edb0b2b8909a78
Author: Yu Xu <[email protected]>
AuthorDate: Tue Apr 15 18:11:59 2025 +0800
[CALCITE-6959] Support LogicalAsofJoin in RelShuttle
---
.../java/org/apache/calcite/rel/RelShuttle.java | 3 +++
.../org/apache/calcite/rel/RelShuttleImpl.java | 5 +++++
.../apache/calcite/test/SqlToRelConverterTest.java | 22 ++++++++++++++++++++++
3 files changed, 30 insertions(+)
diff --git a/core/src/main/java/org/apache/calcite/rel/RelShuttle.java
b/core/src/main/java/org/apache/calcite/rel/RelShuttle.java
index 3ec322f2ac..edf3a6ca63 100644
--- a/core/src/main/java/org/apache/calcite/rel/RelShuttle.java
+++ b/core/src/main/java/org/apache/calcite/rel/RelShuttle.java
@@ -19,6 +19,7 @@
import org.apache.calcite.rel.core.TableFunctionScan;
import org.apache.calcite.rel.core.TableScan;
import org.apache.calcite.rel.logical.LogicalAggregate;
+import org.apache.calcite.rel.logical.LogicalAsofJoin;
import org.apache.calcite.rel.logical.LogicalCalc;
import org.apache.calcite.rel.logical.LogicalCorrelate;
import org.apache.calcite.rel.logical.LogicalExchange;
@@ -69,5 +70,7 @@ public interface RelShuttle {
RelNode visit(LogicalTableModify modify);
+ RelNode visit(LogicalAsofJoin logicalAsofJoin);
+
RelNode visit(RelNode other);
}
diff --git a/core/src/main/java/org/apache/calcite/rel/RelShuttleImpl.java
b/core/src/main/java/org/apache/calcite/rel/RelShuttleImpl.java
index 35b4aa28eb..bca138a15a 100644
--- a/core/src/main/java/org/apache/calcite/rel/RelShuttleImpl.java
+++ b/core/src/main/java/org/apache/calcite/rel/RelShuttleImpl.java
@@ -20,6 +20,7 @@
import org.apache.calcite.rel.core.TableFunctionScan;
import org.apache.calcite.rel.core.TableScan;
import org.apache.calcite.rel.logical.LogicalAggregate;
+import org.apache.calcite.rel.logical.LogicalAsofJoin;
import org.apache.calcite.rel.logical.LogicalCalc;
import org.apache.calcite.rel.logical.LogicalCorrelate;
import org.apache.calcite.rel.logical.LogicalExchange;
@@ -137,6 +138,10 @@ protected RelNode visitChildren(RelNode rel) {
return visitChildren(modify);
}
+ @Override public RelNode visit(LogicalAsofJoin logicalAsofJoin) {
+ return visitChildren(logicalAsofJoin);
+ }
+
@Override public RelNode visit(RelNode other) {
return visitChildren(other);
}
diff --git
a/core/src/test/java/org/apache/calcite/test/SqlToRelConverterTest.java
b/core/src/test/java/org/apache/calcite/test/SqlToRelConverterTest.java
index 8ca7344fae..01ac858c86 100644
--- a/core/src/test/java/org/apache/calcite/test/SqlToRelConverterTest.java
+++ b/core/src/test/java/org/apache/calcite/test/SqlToRelConverterTest.java
@@ -33,6 +33,7 @@
import org.apache.calcite.rel.RelShuttleImpl;
import org.apache.calcite.rel.externalize.RelDotWriter;
import org.apache.calcite.rel.externalize.RelXmlWriter;
+import org.apache.calcite.rel.logical.LogicalAsofJoin;
import org.apache.calcite.rel.logical.LogicalCalc;
import org.apache.calcite.rel.logical.LogicalFilter;
import org.apache.calcite.rel.logical.LogicalSort;
@@ -2994,6 +2995,27 @@ void checkCorrelatedMapSubQuery(boolean expand) {
assertThat(rels.get(0), instanceOf(LogicalTableModify.class));
}
+ /** Test case for
+ * <a
href="https://issues.apache.org/jira/browse/CALCITE-6959">[CALCITE-6959]
+ * Support LogicalAsofJoin in RelShuttle</a>. */
+ @Test void testRelShuttleForLogicalAsofJoin() {
+ final String sql = "select emp.empno from emp asof join dept\n"
+ + "match_condition emp.deptno <= dept.deptno\n"
+ + "on ename = name";
+ final RelNode rel = sql(sql).toRel();
+ final List<RelNode> rels = new ArrayList<>();
+ final RelShuttleImpl visitor = new RelShuttleImpl() {
+ @Override public RelNode visit(LogicalAsofJoin asofJoin) {
+ RelNode visitedRel = super.visit(asofJoin);
+ rels.add(visitedRel);
+ return visitedRel;
+ }
+ };
+ rel.accept(visitor);
+ assertThat(rels, hasSize(1));
+ assertThat(rels.get(0), instanceOf(LogicalAsofJoin.class));
+ }
+
@Test void testOffset0() {
final String sql = "select * from emp offset 0";
sql(sql).ok();