[ 
https://issues.apache.org/jira/browse/CALCITE-4677?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17376239#comment-17376239
 ] 

Haisheng Yuan commented on CALCITE-4677:
----------------------------------------

We prohibited rule matching on physical operators on purpose. If you want to 
convert between physical conventions, try enforcer instead of rules.
Is there any specific case that justify your rationale?

> 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: 20m
>  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 the stack.
>  
> when RelSet3 on Merge (Merge with other RelSets), then RelSet2 
> clearProcessed(): subset.resetTaskState() and then 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 ApplyRuleTask 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)

Reply via email to