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)

Reply via email to