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