You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@calcite.apache.org by "Vitalii Diravka (JIRA)" <ji...@apache.org> on 2018/03/06 12:43:00 UTC

[jira] [Created] (CALCITE-2205) One more Infinite loop for JoinPushTransitivePredicatesRule

Vitalii Diravka created CALCITE-2205:
----------------------------------------

             Summary: One more Infinite loop for JoinPushTransitivePredicatesRule
                 Key: CALCITE-2205
                 URL: https://issues.apache.org/jira/browse/CALCITE-2205
             Project: Calcite
          Issue Type: Bug
          Components: core
    Affects Versions: 1.15.0
            Reporter: Vitalii Diravka
            Assignee: Julian Hyde
             Fix For: 1.16.0


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 in onMatch method of the rule or the logic of RelBuilder#filter method.

TestCase for reproduce:
{code}
  @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();
  }
{code}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)