[ https://issues.apache.org/jira/browse/CALCITE-3972?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17101043#comment-17101043 ]
Julian Hyde commented on CALCITE-3972: -------------------------------------- [~xndai] wrote: bq. Also the RelBuilder is not immutable today. The stack can change after it's passed into a function. So it's not a new problem... I acknowledged that earlier in the comment thread. The stack of {{RelNode}}s (and ancillary data like aliases) is mutable. The config is not mutable. This is intentional - I consider config and the rel stack to be different classes of state. Any class called 'builder' of course has mutable state. Builders are useful because they allow mutation in a controlled way. bq. I mean with the adoptConvention() we create a new builder every time. It could be problematic if this gets call frequently (such in high frequent rules). Creating a {{RelBuilder}} is fairly efficient - 7 fields to assign, two object creations ({{ArrayDeque}} and {{RexSimplify}}). A typical planning process might fire 10k rules. 10k object creations is not going to move the dial. > 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)