[ https://issues.apache.org/jira/browse/CALCITE-4677?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17375233#comment-17375233 ]
ZiLin Chen commented on CALCITE-4677: ------------------------------------- Ok [~zabetak] ,I give an example. Based on this, we can discuss more details. > Different physical conventions conversion on new physical node producing > ------------------------------------------------------------------------- > > Key: CALCITE-4677 > URL: https://issues.apache.org/jira/browse/CALCITE-4677 > Project: Calcite > Issue Type: Bug > Components: core > Affects Versions: 1.28.0 > Reporter: ZiLin Chen > Priority: Major > Labels: pull-request-available > Time Spent: 10m > Remaining Estimate: 0h > > Whenever new physical nodes are on produce, we need to fire rules in case of > different physical conventions conversion. > DeriveTrait Task deal with this case, while some physical node maybe missing. > > There 3 rules, but in TopDownRuleDriver rule 3 can not be applied. > 1. LogicalSortToTopNRuleLogicalSortToTopNRule > 2. LogicalSortToLimitMemSortRule > 3. TopNToSomeRelNodeRule (Need Match Physical Convention Node like TopN) > > LogicalAggreate -> 1. RelSet1 > - LogicalSort -> 2. RelSet2 fires LogicalSortToTopNRule and > LogicalSortToLimitMemSortRule > - OtherNode -> 3. RelSet3 > > ApplyRuleTask LogicalSortToLimitMemSortRule is already scheduled. > ApplyRuleTask LogicalSortToTopNRule still on stack. > > when RelSet3 on Merge (Merge with other RelSets)RelSet2 clearProcessed(): > subset.resetTaskState() > RelSet1 clearProcessed(): subset.resetTaskState() > because RelSet1 is root so OptimizeGroup will be scheduled again > > Now the task stack > Task Stack: > Task about RelSet1 > Task about RelSet2 ApplyRule > Task LogicalSortToTopNRule > Task about RelSet3 > Task about RelSet1 root schedule again > Task about RelSet2 > Task about RelSet3 (current task) > > next > Task Stack: > Task about RelSet1 > Task about RelSet2 > Task about RelSet3 > Task about RelSet1 > Task about RelSet2 RelSubSet setOptimized so taskState -> Completed. rels on > RelSet (LogicalSort and LimitMemSort) > > next... > Task Stack: > Task about RelSet1 > Task about RelSet2 ApplyRuleTask LogicalSortToTopNRule. > Here we found when TopN is on produce, every RelSubSet can not fire > OptimizeInputTask. so TopNToSomeRelNodeRule can not fire -- This message was sent by Atlassian Jira (v8.3.4#803005)