[
https://issues.apache.org/jira/browse/CALCITE-3744?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
ASF GitHub Bot updated CALCITE-3744:
------------------------------------
Labels: pull-request-available (was: )
> Duplicate RuleMatches when RelSet gets merged
> ---------------------------------------------
>
> Key: CALCITE-3744
> URL: https://issues.apache.org/jira/browse/CALCITE-3744
> Project: Calcite
> Issue Type: Bug
> Components: core
> Reporter: Haisheng Yuan
> Priority: Major
> Labels: pull-request-available
>
> Some times RelSet can get merged. e.g.
> Each number represet Rel id, and they are in different RelSet.
> {code:java}
> 1 4
> \ /
> 2 /
> \ /
> 3
> {code}
> Assume in the rulequeue, we have rule match with name of 12, 23, 43. For
> simplicity, omit the rule name, first digit represent the parent RelNode,
> second represent the child.
> If after some rule, we merged the set of 3 into the set of 2, and RelNode 4's
> input is replaced by RelSubset of 2. We will retrigger rules and try to add
> rulematch 12, 42, 43 into rule queue.
> 12 will be filtered out, because there is duplicate in the RuleMatch names
> set. But for 43, it now has different rulematch digest with previous match,
> because RelNode #4's input RelSubset changed, its digest also changed. So we
> can't detect the duplication and will re-apply rulematch 43 twice.
> Although we try to recompute rulematch's digest when popMatch(), but it seems
> too late.
> I think in RuleMatch digest, just using relnode's id should suffice. And we
> don't need to call recomputeDigest when popMatch.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)