[
https://issues.apache.org/jira/browse/CALCITE-2205?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16409877#comment-16409877
]
Vitalii Diravka commented on CALCITE-2205:
------------------------------------------
[~julianhyde] I rethought my approach and looked into _RelOptPredicateList_, as
you suggested.
There were redundant inferred predicates: some of them appeared, because on the
one side of join were simplified predicates (after filter creating) and on
other side there were not simplified ones. And they were detected as new
predicates.
Also not all predicates were filtered in the _RelMdPredicates#infer_ .
Also I have noticed that _RelMetadataTest$testPullUpPredicatesForExprsItr_
passes faster and there are much less duplicates in the _pulledUpPredicates_
My branch is rebased onto last Calcite master branch. Please review the updated
[PR-645|https://github.com/apache/calcite/pull/645] and let me know if you have
some questions.
> 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.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)