Description
CALCITE-2200 resolves some cases of infinite loop via stopping of recursion in HepPlanner#applyRules, when newVertex is the same as vertex.
In this jira one more case of infinite loop is described:
JoinPushTransitivePredicatesRule#onMatch generates new right or left inputs via using RelBuilder#filter method on top of LogicalFilter RelNode with the same condition.
In this case a new RelNode shouldn't be created. Possible fix to change logic of RelBuilder#filter method.
TestCase for reproduce:
@Test public void testJoinPushTransitivePredicatesRule2() { HepProgramBuilder builder = new HepProgramBuilder(); builder.addRuleInstance(JoinPushTransitivePredicatesRule.INSTANCE); HepProgram build = builder.build(); HepPlanner hepPlanner = new HepPlanner(build); final String sql = "select n1.SAL from EMPNULLABLES_20 n1 where n1.SAL\n" + "IN (select n2.SAL from EMPNULLABLES_20 n2 " + "where n1.SAL = n2.SAL or n1.SAL = 4)"; sql(sql) .withDecorrelation(true) .with(hepPlanner) .check(); }
Attachments
Issue Links
- blocks
-
DRILL-6173 Support transitive closure during filter push down and partition pruning
- Resolved
- is related to
-
CALCITE-1995 Remove predicates from Filter if they can be proved to be always true or false
- Closed
-
HIVE-25851 Replace HiveRelMdPredicate with RelMdPredicate from Calcite
- Open
- relates to
-
CALCITE-2200 Infinite loop for JoinPushTransitivePredicatesRule
- Closed
- links to