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();

Reply via email to