[
https://issues.apache.org/jira/browse/CALCITE-2624?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16648066#comment-16648066
]
Julian Hyde commented on CALCITE-2624:
--------------------------------------
Slight difference in tactics: I’d focus on the concrete rules, then perhaps
abstract the code into a base class if applicable. It’s better to write JIRA
cases in terms of features that are useful to end users.
It might apply to MInus, probably wouldn’t apply to Union
> Add a rule to copy a sort below a binary operator over the left or right input
> ------------------------------------------------------------------------------
>
> Key: CALCITE-2624
> URL: https://issues.apache.org/jira/browse/CALCITE-2624
> Project: Calcite
> Issue Type: Improvement
> Components: core
> Affects Versions: 1.17.0
> Reporter: Stamatis Zampetakis
> Assignee: Julian Hyde
> Priority: Major
> Fix For: 1.18.0
>
>
> Currently, the only rule that allows a sort to traverse a binary operator is
> the SortJoinTransposeRule. The rule was introduced mainly to push limits in
> the case of left and right outer joins (see CALCITE-831).
> I assume that the main reason that we don't have more rules is that sorts
> with limits and offsets cannot be pushed safely below many binary operators.
> However, in many cases, it is possible and beneficial for optimization
> purposes to just push the sort (without the limit and offset) below the
> binary operator. Since we do not know in advance if the binary operator
> preserves the sort we cannot remove (that is why I am saying copy and not
> transpose) the sort operator on top of the binary operator. The latter is not
> really a problem since the SortRemoveRule can detect such cases and remove
> the sort if it is redundant.
> A few concrete examples where this optimization makes sense are outlined
> below:
> * allow the sort to be later absorbed by an index scan and disappear from
> the plan (Sort + Tablescan => IndexScan with RelCollation);
> * allow operators that require sorted inputs to be exploited more easily
> (e.g., merge join);
> * allow the sort to be performed on a possibly smaller result (assuming that
> the physical binary operator that is going to be used preserves the order of
> left/right input and the top sort operator can be removed entirely).
> I propose to add a new rule (e.g., SortCopyBelowBiRelRule,
> SortBiRelCopyBelowRule, SortBiRelTransposeRule) which allows a sort to be
> copied to the left or right of a BiRel operator (excluding the limit and
> offset attributes) if the respective input is not already sorted. For my use
> case, it would suffice to apply the rule only on joins and correlates but I
> don't see why not making it a bit more general from the beginning.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)