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