[ https://issues.apache.org/jira/browse/CALCITE-2204?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16385600#comment-16385600 ]
LeoWangLZ commented on CALCITE-2204: ------------------------------------ [~julianhyde] In function propagateCostImprovements0, This subset is already in the chain being propagated to. This means that the graph is cyclic, and therefore the cost of this relational expression - not this subset - must be infinite. it may miss the best plan. I think we should change the way of propagation. now the algorithm like pre-order, it may use Breadth-first Search. like {code:java} parent21,parent22 parent11, parent12 input{code} now the order of propagation is input->parent11->parent22->parent12. use BFS, it maybe input->parent11->parent12->parent21->parent22, and so, it only concern the relNode in RelSubset instead of RelSubset. it will no have a cycle in RelSubset, the cost will be propagated normally > Volcano Planner may not choose the cheapest cost of plan wrongly > ---------------------------------------------------------------- > > Key: CALCITE-2204 > URL: https://issues.apache.org/jira/browse/CALCITE-2204 > Project: Calcite > Issue Type: Bug > Reporter: LeoWangLZ > Assignee: Julian Hyde > Priority: Major > > Volcano Planner will propagate the cost improvement to parents that one of > the inputs has the best plan. But it not propagate to all parents firstly, it > propagate one parent and go to the parent s of parent. In the way, if one > parent may propagate to other parent on the same level, and the cost maybe > less than others, but when propagate the parent again, it will not propagate > because the cost is already calculated, and it's can't be less then the cost > of the self. -- This message was sent by Atlassian JIRA (v7.6.3#76005)