Uploaded image for project: 'Calcite'
  1. Calcite
  2. CALCITE-3744

Duplicate RuleMatches when RelSet gets merged

VotersWatch issueWatchersLinkCloneUpdate Comment AuthorReplace String in CommentUpdate Comment VisibilityDelete Comments
    XMLWordPrintableJSON

Details

    Description

      Some times RelSet can get merged. e.g.

      Each number represet Rel id, and they are in different RelSet.

       1            4
         \          /
           2      / 
             \    /
               3
      

      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.

      Attachments

        Activity

          This comment will be Viewable by All Users Viewable by All Users
          Cancel

          People

            Unassigned Unassigned
            hyuan Haisheng Yuan
            Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Time Tracking

                Estimated:
                Original Estimate - Not Specified
                Not Specified
                Remaining:
                Remaining Estimate - 0h
                0h
                Logged:
                Time Spent - 3h 40m
                3h 40m

                Slack

                  Issue deployment