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

Caican Cai commented on CALCITE-6460:
-------------------------------------

good catch

> SortRemoveConstantKeysRule fails with AssertionError due to mismatched 
> collation on resulting Sort
> --------------------------------------------------------------------------------------------------
>
>                 Key: CALCITE-6460
>                 URL: https://issues.apache.org/jira/browse/CALCITE-6460
>             Project: Calcite
>          Issue Type: Bug
>          Components: core
>    Affects Versions: 1.37.0
>            Reporter: Ruben Q L
>            Assignee: Ruben Q L
>            Priority: Major
>              Labels: pull-request-available
>             Fix For: 1.38.0
>
>
> When {{SortRemoveConstantKeysRule}} is applied, at the end of the process it 
> creates the resulting Sort with the new collation (which has removed the 
> constant keys from the original one):
> {code}
> final Sort result =
>         sort.copy(sort.getTraitSet(), input, 
> RelCollations.of(collationsList));
> {code}    
> However, if there's a collation defined inside's the Sort's traitSet, this 
> copy will fail, because there will be a mismatch between the (original) 
> collation in the traitSet (which is unchanged at the moment of the copy) and 
> the new collation that has been computed by the rule (removing constant keys):
> {noformat}
> traits=NONE.[1, 2 DESC], collation=[2 DESC]
> java.lang.AssertionError: traits=NONE.[1, 2 DESC], collation=[2 DESC]
>       at org.apache.calcite.rel.core.Sort.<init>(Sort.java:87)
>       at 
> org.apache.calcite.rel.logical.LogicalSort.<init>(LogicalSort.java:48)
>       at org.apache.calcite.rel.logical.LogicalSort.copy(LogicalSort.java:81)
>       at org.apache.calcite.rel.core.Sort.copy(Sort.java:150)
>       at 
> org.apache.calcite.rel.rules.SortRemoveConstantKeysRule.onMatch(SortRemoveConstantKeysRule.java:85)
> ...
> {noformat}
> This problem only happens if the traitSet includes 
> {{RelCollationTraitDef.INSTANCE}}, so it can be unnoticed in many cases. 
> However, we can reproduce it by adjusting 
> {{RelOptRulesTest#testSortRemovalOneKeyConstant}}:
> {code}
> sql(sql)
>         .withVolcanoPlanner(false,  p -> {
>             p.addRelTraitDef(RelCollationTraitDef.INSTANCE);
>             RelOptUtil.registerDefaultRules(p, false, false);
>         })
>         .withRule(CoreRules.SORT_REMOVE_CONSTANT_KEYS)
>         .check();
> {code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to