I created CALCITE-1681 https://issues.apache.org/jira/browse/CALCITE-1681 and I 
intent to work on it for finishing HIVE-15708.
My current thinking is to create a RelCopier based on RelShuttle and add a new 
abstract RelNode.copyTo(RelOptPlanner) that each concrete Rel type must 
override. The Rex part is already handled by the existing RexCopier.

Thanks,
~Remus

On 3/6/17, 12:30 PM, "Julian Hyde" <jh...@apache.org> wrote:

    Every RelNode belongs to a RelOptCluster, and basically there is one 
RelOptCluster created each time a query is prepared. When working with 
materialized views, the view’s query is represented as a tree of RelNodes, that 
tree is used for optimizing more than one query. When planning a particular 
query, the nodes of that query will have a different RelOptCluster than the 
nodes of the materialized view(s) they are matched against. 
    
    How do we deal with this? Do we copy the nodes into the query’s cluster 
once we have found a match? If so, how? I couldn’t find a sub-class of 
RelVisitor or RelShuttle that copies trees to a different RelOptCluster.
    
    By the way, https://issues.apache.org/jira/browse/CALCITE-1536 
<https://issues.apache.org/jira/browse/CALCITE-1536> aims to improve the 
RelNode life-cycle but I don’t think it will solve this problem.
    
    Julian
     

Reply via email to