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/07 00:14:00 UTC
[jira] [Updated] (CALCITE-2205) One more Infinite loop for
JoinPushTransitivePredicatesRule
[ https://issues.apache.org/jira/browse/CALCITE-2205?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Vitalii Diravka updated CALCITE-2205:
-------------------------------------
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:
{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}
was:
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}
> 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
> Priority: Major
> 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 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)