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/04/09 20:44:00 UTC

[jira] [Updated] (CALCITE-2205) JoinPushTransitivePredicatesRule should not create a Filter on top of an equivalent Filter

     [ https://issues.apache.org/jira/browse/CALCITE-2205?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Vitalii Diravka updated CALCITE-2205:
-------------------------------------
    Summary: JoinPushTransitivePredicatesRule should not create a Filter on top of an equivalent Filter  (was: One more Infinite loop for JoinPushTransitivePredicatesRule)

> JoinPushTransitivePredicatesRule should not create a Filter on top of an equivalent Filter
> ------------------------------------------------------------------------------------------
>
>                 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
>            Priority: Major
>             Fix For: 1.17.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 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)