[ https://issues.apache.org/jira/browse/CALCITE-3969?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17099697#comment-17099697 ]
Roman Kondakov commented on CALCITE-3969: ----------------------------------------- [~julianhyde], you are right. But this case is took into account: for relation T, with columns x, y, sorted by x, y, if we have projects: * 'create view V as select y as z from t', V will have an empty collation * 'create view U as select x as z from t', U will have collation by z And it looks correct. I've added some tests in [PR|https://github.com/apache/calcite/pull/1959] to {{RelCollationTest.testCollationMapping()}} and {{RelDistributionTest.testRelDistributionMapping()}} with examples of valid mappings. Please, take a look. > Method RelTrait.apply(Mappings.Mapping) throws exception when mapping doesn't > cover collation or distribution keys > ------------------------------------------------------------------------------------------------------------------ > > Key: CALCITE-3969 > URL: https://issues.apache.org/jira/browse/CALCITE-3969 > Project: Calcite > Issue Type: Bug > Components: core > Reporter: Roman Kondakov > Assignee: Roman Kondakov > Priority: Major > Labels: pull-request-available > Fix For: 1.23.0 > > Time Spent: 1h 20m > Remaining Estimate: 0h > > Let's consider we have an input {{(id, name)}} ordered by {{id}} (i.e. > collation == {{[0]}}). If we have a {{Project("name")}} on the top of this > input and we apply project's mapping on the collation, we'll end up with > exception: > {noformat} > java.lang.NullPointerException: at index 0 > at > com.google.common.collect.ObjectArrays.checkElementNotNull(ObjectArrays.java:239) > at > com.google.common.collect.ObjectArrays.checkElementsNotNull(ObjectArrays.java:230) > at > com.google.common.collect.ObjectArrays.checkElementsNotNull(ObjectArrays.java:225) > at > com.google.common.collect.ImmutableList.construct(ImmutableList.java:281) > at > com.google.common.collect.ImmutableList.copyOf(ImmutableList.java:239) > at org.apache.calcite.rel.RelCollations.of(RelCollations.java:69) > at org.apache.calcite.rex.RexUtil.apply(RexUtil.java:1271) > at > org.apache.calcite.rel.RelCollationImpl.apply(RelCollationImpl.java:122) > at > org.apache.calcite.rel.RelCollationImpl.apply(RelCollationImpl.java:40) > {noformat} > This happens because the collation field {{id}} is not a part of the mapping. > The same problem is with distribution trait when distribution keys are not > covered by the mapping. > Calcite should handle such situations gracefully. If it is not possible to > deduce the collation/distribution after the mapping application, we should > return: > * {{EMPTY}} collation for {{RelCollation}} trait. > * {{RANDOM_DISTRIBUTED}} distribution for {{RelDistribution}} trait. -- This message was sent by Atlassian Jira (v8.3.4#803005)