Roman Kondakov created CALCITE-3969: ---------------------------------------
Summary: 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 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)