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 326321dec5 [CALCITE-6961] Support LogicalRepeatUnion in RelShuttle
326321dec5 is described below

commit 326321dec53be7f38333db7204ecba33d64d401e
Author: Yu Xu <[email protected]>
AuthorDate: Wed Apr 16 19:18:01 2025 +0800

    [CALCITE-6961] Support LogicalRepeatUnion in RelShuttle
---
 .../java/org/apache/calcite/rel/RelShuttle.java    |  3 +++
 .../org/apache/calcite/rel/RelShuttleImpl.java     |  5 +++++
 .../calcite/rel/logical/LogicalRepeatUnion.java    |  6 ++++++
 .../apache/calcite/test/SqlToRelConverterTest.java | 25 ++++++++++++++++++++++
 4 files changed, 39 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 edf3a6ca63..f9203058cb 100644
--- a/core/src/main/java/org/apache/calcite/rel/RelShuttle.java
+++ b/core/src/main/java/org/apache/calcite/rel/RelShuttle.java
@@ -29,6 +29,7 @@
 import org.apache.calcite.rel.logical.LogicalMatch;
 import org.apache.calcite.rel.logical.LogicalMinus;
 import org.apache.calcite.rel.logical.LogicalProject;
+import org.apache.calcite.rel.logical.LogicalRepeatUnion;
 import org.apache.calcite.rel.logical.LogicalSort;
 import org.apache.calcite.rel.logical.LogicalTableModify;
 import org.apache.calcite.rel.logical.LogicalUnion;
@@ -72,5 +73,7 @@ public interface RelShuttle {
 
   RelNode visit(LogicalAsofJoin logicalAsofJoin);
 
+  RelNode visit(LogicalRepeatUnion logicalRepeatUnion);
+
   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 bca138a15a..1c0d0dd5ee 100644
--- a/core/src/main/java/org/apache/calcite/rel/RelShuttleImpl.java
+++ b/core/src/main/java/org/apache/calcite/rel/RelShuttleImpl.java
@@ -30,6 +30,7 @@
 import org.apache.calcite.rel.logical.LogicalMatch;
 import org.apache.calcite.rel.logical.LogicalMinus;
 import org.apache.calcite.rel.logical.LogicalProject;
+import org.apache.calcite.rel.logical.LogicalRepeatUnion;
 import org.apache.calcite.rel.logical.LogicalSort;
 import org.apache.calcite.rel.logical.LogicalTableModify;
 import org.apache.calcite.rel.logical.LogicalUnion;
@@ -142,6 +143,10 @@ protected RelNode visitChildren(RelNode rel) {
     return visitChildren(logicalAsofJoin);
   }
 
+  @Override public RelNode visit(LogicalRepeatUnion logicalRepeatUnion) {
+    return visitChildren(logicalRepeatUnion);
+  }
+
   @Override public RelNode visit(RelNode other) {
     return visitChildren(other);
   }
diff --git 
a/core/src/main/java/org/apache/calcite/rel/logical/LogicalRepeatUnion.java 
b/core/src/main/java/org/apache/calcite/rel/logical/LogicalRepeatUnion.java
index f3bface6cc..9b5e099290 100644
--- a/core/src/main/java/org/apache/calcite/rel/logical/LogicalRepeatUnion.java
+++ b/core/src/main/java/org/apache/calcite/rel/logical/LogicalRepeatUnion.java
@@ -22,6 +22,7 @@
 import org.apache.calcite.plan.RelOptTable;
 import org.apache.calcite.plan.RelTraitSet;
 import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.rel.RelShuttle;
 import org.apache.calcite.rel.core.RepeatUnion;
 
 import org.checkerframework.checker.nullness.qual.Nullable;
@@ -69,4 +70,9 @@ public static LogicalRepeatUnion create(RelNode seed, RelNode 
iterative,
     return new LogicalRepeatUnion(getCluster(), traitSet,
         inputs.get(0), inputs.get(1), all, iterationLimit, transientTable);
   }
+
+  @Override public RelNode accept(RelShuttle shuttle) {
+    return shuttle.visit(this);
+  }
+
 }
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 01ac858c86..50e5eec2ab 100644
--- a/core/src/test/java/org/apache/calcite/test/SqlToRelConverterTest.java
+++ b/core/src/test/java/org/apache/calcite/test/SqlToRelConverterTest.java
@@ -36,6 +36,7 @@
 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.LogicalRepeatUnion;
 import org.apache.calcite.rel.logical.LogicalSort;
 import org.apache.calcite.rel.logical.LogicalTableModify;
 import org.apache.calcite.rel.rules.CoreRules;
@@ -3016,6 +3017,30 @@ void checkCorrelatedMapSubQuery(boolean expand) {
     assertThat(rels.get(0), instanceOf(LogicalAsofJoin.class));
   }
 
+  /** Test case for
+   * <a 
href="https://issues.apache.org/jira/browse/CALCITE-6961";>[CALCITE-6961]
+   * Support LogicalRepeatUnion in RelShuttle</a>. */
+  @Test void testRelShuttleForLogicalRepeatUnion() {
+    final String sql = "WITH RECURSIVE delta(n) AS (\n"
+        + "VALUES (1)\n"
+        + "UNION ALL\n"
+        + "SELECT n+1 FROM delta WHERE n < 10\n"
+        + ")\n"
+        + "SELECT * FROM delta";
+    final RelNode rel = sql(sql).toRel();
+    final List<RelNode> rels = new ArrayList<>();
+    final RelShuttleImpl visitor = new RelShuttleImpl() {
+      @Override public RelNode visit(LogicalRepeatUnion repeatUnion) {
+        RelNode visitedRel = super.visit(repeatUnion);
+        rels.add(visitedRel);
+        return visitedRel;
+      }
+    };
+    rel.accept(visitor);
+    assertThat(rels, hasSize(1));
+    assertThat(rels.get(0), instanceOf(LogicalRepeatUnion.class));
+  }
+
   @Test void testOffset0() {
     final String sql = "select * from emp offset 0";
     sql(sql).ok();

Reply via email to