Roman Kondakov created CALCITE-5166:
---------------------------------------
Summary: Method accept(RelShuttle) is not overridden in
LogicalCalc and LogicalTableModify
Key: CALCITE-5166
URL: https://issues.apache.org/jira/browse/CALCITE-5166
Project: Calcite
Issue Type: Bug
Components: core
Affects Versions: 1.30.0
Reporter: Roman Kondakov
Assignee: Roman Kondakov
Fix For: 1.31.0
Method {{RelNode#accept(RelShuttle)}} is not overridden for {{LogicalCalc}} and
{{{}LogicalTableModify{}}}. This leads to the bug when logic implemented in
{{RelShuttle#visit(LogicalCalc)}} is never applied because {{visit()}} method
is never called due to incorrect dispatching.
This test will fail without {{accept(RelShuttle)}} method is overridden in Calc:
{code:java}
@Test void testRelShuttleForLogicalCalc() {
final String sql = "select ename from emp";
final RelNode rel = sql(sql).toRel();
final HepProgramBuilder programBuilder = HepProgram.builder();
programBuilder.addRuleInstance(CoreRules.PROJECT_TO_CALC);
final HepPlanner planner = new HepPlanner(programBuilder.build());
planner.setRoot(rel);
final RelNode calc = planner.findBestExp();
final List<RelNode> rels = new ArrayList<>();
final RelShuttleImpl visitor = new RelShuttleImpl() {
@Override public RelNode visit(LogicalCalc calc) {
RelNode visitedRel = super.visit(calc);
rels.add(visitedRel);
return visitedRel;
}
};
visitor.visit(calc);
assertThat(rels.size(), is(1));
assertThat(rels.get(0), isA(LogicalCalc.class));
}
{code}
--
This message was sent by Atlassian Jira
(v8.20.7#820007)