[ 
https://issues.apache.org/jira/browse/CALCITE-7367?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Yu Xu resolved CALCITE-7367.
----------------------------
    Resolution: Fixed

> NULLS FIRST throws ClassCastException when sorting arrays
> ---------------------------------------------------------
>
>                 Key: CALCITE-7367
>                 URL: https://issues.apache.org/jira/browse/CALCITE-7367
>             Project: Calcite
>          Issue Type: Bug
>          Components: core
>    Affects Versions: 1.41.0
>            Reporter: Zhen Chen
>            Assignee: Zhen Chen
>            Priority: Major
>              Labels: pull-request-available
>             Fix For: 1.42.0
>
>
> The following SQL statement should produce the following result, but it will 
> throw an error when executed. NULLS LAST works normally, but NULLS FIRST will 
> throw an error.
> {code:java}
> select * from
> (values
>     (2, array[null, 3]),
>     (3, array[3, 4]),
>     (1, array[1, 2]),
>     (4, array[4, 5]),
>     (5, cast(null as integer array))) as t(id, arr)
> order by arr nulls first;
> +----+-----------+
> | ID | ARR       |
> +----+-----------+
> |  5 |           |
> |  1 | [1, 2]    |
> |  3 | [3, 4]    |
> |  4 | [4, 5]    |
> |  2 | [null, 3] |
> +----+-----------+
> (5 rows)
> !ok {code}
> Error message:
> > Caused by: java.lang.ClassCastException: class java.util.ArrayList cannot 
> > be cast to class java.lang.Comparable (java.util.ArrayList and 
> > java.lang.Comparable are in module java.base of loader 'bootstrap')
> >     at 
> > org.apache.calcite.linq4j.function.Functions$NullsFirstComparator.compare(Functions.java:539)
> >     at java.base/java.util.TreeMap.compare(TreeMap.java:1570)
> >     at java.base/java.util.TreeMap.addEntryToEmptyMap(TreeMap.java:776)
> >     at java.base/java.util.TreeMap.put(TreeMap.java:785)
> >     at java.base/java.util.TreeMap.put(TreeMap.java:534)
> >     at 
> > org.apache.calcite.linq4j.EnumerableDefaults.toLookup_(EnumerableDefaults.java:3818)
> >     at 
> > org.apache.calcite.linq4j.EnumerableDefaults$15.enumerator(EnumerableDefaults.java:2857)
> >     at 
> > org.apache.calcite.linq4j.AbstractEnumerable.iterator(AbstractEnumerable.java:33)
> >     at org.apache.calcite.avatica.MetaImpl.createCursor(MetaImpl.java:91)
> >     at 
> > org.apache.calcite.avatica.AvaticaResultSet.execute(AvaticaResultSet.java:186)
> >     at 
> > org.apache.calcite.jdbc.CalciteResultSet.execute(CalciteResultSet.java:64)
> >     at 
> > org.apache.calcite.jdbc.CalciteResultSet.execute(CalciteResultSet.java:43)
> >     at 
> > org.apache.calcite.avatica.AvaticaConnection$1.execute(AvaticaConnection.java:669)
> >     at 
> > org.apache.calcite.jdbc.CalciteMetaImpl.prepareAndExecute(CalciteMetaImpl.java:669)
> >     at 
> > org.apache.calcite.avatica.AvaticaConnection.prepareAndExecuteInternal(AvaticaConnection.java:677)
> >     at 
> > org.apache.calcite.avatica.AvaticaStatement.executeInternal(AvaticaStatement.java:157)



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

Reply via email to