Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions core/src/main/java/org/apache/calcite/rel/RelShuttle.java
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,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.LogicalSnapshot;
import org.apache.calcite.rel.logical.LogicalSort;
import org.apache.calcite.rel.logical.LogicalTableModify;
import org.apache.calcite.rel.logical.LogicalUnion;
Expand Down Expand Up @@ -65,6 +66,8 @@ public interface RelShuttle {

RelNode visit(LogicalSort sort);

RelNode visit(LogicalSnapshot snapshot);

RelNode visit(LogicalExchange exchange);

RelNode visit(LogicalTableModify modify);
Expand Down
5 changes: 5 additions & 0 deletions core/src/main/java/org/apache/calcite/rel/RelShuttleImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -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.LogicalSnapshot;
import org.apache.calcite.rel.logical.LogicalSort;
import org.apache.calcite.rel.logical.LogicalTableModify;
import org.apache.calcite.rel.logical.LogicalUnion;
Expand Down Expand Up @@ -129,6 +130,10 @@ protected RelNode visitChildren(RelNode rel) {
return visitChildren(sort);
}

@Override public RelNode visit(LogicalSnapshot snapshot) {
return visitChildren(snapshot);
}

@Override public RelNode visit(LogicalExchange exchange) {
return visitChildren(exchange);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
import org.apache.calcite.rel.RelDistributionTraitDef;
import org.apache.calcite.rel.RelInput;
import org.apache.calcite.rel.RelNode;
import org.apache.calcite.rel.RelShuttle;
import org.apache.calcite.rel.core.Snapshot;
import org.apache.calcite.rel.hint.RelHint;
import org.apache.calcite.rel.metadata.RelMdCollation;
Expand Down Expand Up @@ -103,4 +104,9 @@ public static LogicalSnapshot create(RelNode input, RexNode period) {
@Override public RelNode withHints(final List<RelHint> hintList) {
return new LogicalSnapshot(getCluster(), traitSet, hintList, input, getPeriod());
}

@Override public RelNode accept(RelShuttle shuttle) {
return shuttle.visit(this);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
import org.apache.calcite.rel.externalize.RelXmlWriter;
import org.apache.calcite.rel.logical.LogicalCalc;
import org.apache.calcite.rel.logical.LogicalFilter;
import org.apache.calcite.rel.logical.LogicalSnapshot;
import org.apache.calcite.rel.logical.LogicalSort;
import org.apache.calcite.rel.logical.LogicalTableModify;
import org.apache.calcite.rel.rules.CoreRules;
Expand Down Expand Up @@ -2978,6 +2979,26 @@ void checkCorrelatedMapSubQuery(boolean expand) {
assertThat(rels.get(0), instanceOf(LogicalCalc.class));
}

/** Test case for
* <a href="https://issues.apache.org/jira/browse/CALCITE-6947">[CALCITE-6947]
* Support LogicalSnapshot in RelShuttle</a>. */
@Test void testRelShuttleForLogicalSnapshot() {
final String sql = "select * from products_temporal "
+ "for system_time as of TIMESTAMP '2011-01-02 00:00:00'";
final RelNode rel = sql(sql).toRel();
final List<RelNode> rels = new ArrayList<>();
final RelShuttleImpl visitor = new RelShuttleImpl() {
@Override public RelNode visit(LogicalSnapshot modify) {
RelNode visitedRel = super.visit(modify);
rels.add(visitedRel);
return visitedRel;
}
};
rel.accept(visitor);
assertThat(rels, hasSize(1));
assertThat(rels.get(0), instanceOf(LogicalSnapshot.class));
}

@Test void testRelShuttleForLogicalTableModify() {
final String sql = "insert into emp select * from emp";
final RelNode rel = sql(sql).toRel();
Expand Down
Loading