[
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)