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