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)