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

Xiening Dai commented on CALCITE-3972:
--------------------------------------

Tried push/pop approach. It's a little tricky to implement. The push() would 
have to call Convention#transformRelBuilder, but pop() would directly pop the 
RelFactory stack. I can see some inconsistency here. On the other hand, unlike 
the RelNode stack, convention doesn't really need to maintain the previous 
status, which also makes it easier to jump from one to another (without having 
to pop() multiple times).

I keep adoptConvention() interface. Latest PR is here - 
https://github.com/apache/calcite/pull/1884/files 

Thanks.

> Allow RelBuilder to create RelNode with convention and use it for trait 
> convert
> -------------------------------------------------------------------------------
>
>                 Key: CALCITE-3972
>                 URL: https://issues.apache.org/jira/browse/CALCITE-3972
>             Project: Calcite
>          Issue Type: Bug
>            Reporter: Xiening Dai
>            Assignee: Xiening Dai
>            Priority: Major
>             Fix For: 1.23.0
>
>          Time Spent: 40m
>  Remaining Estimate: 0h
>
> 1. Provide Convention.transformRelBuilder() to transform an existing 
> RelBuilder into one with specific convention.
> 2. RelBuilder provides withRelFactories() method to allow caller swap the 
> underlying RelFactories and create a new builder. 
> 3. Use the new interface in RelCollationTraitDef for converting into 
> RelCollation traits
> We can avoid ~1/3 of total rule firings in a N way join case with this change.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to