You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@calcite.apache.org by "Aman Sinha (JIRA)" <ji...@apache.org> on 2015/01/26 05:06:34 UTC

[jira] [Updated] (CALCITE-569) ArrayIndexOutOfBoundException when deducing collation

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

Aman Sinha updated CALCITE-569:
-------------------------------
    Attachment: 0001-CALCITE-569-Create-a-Project-with-empty-collation-if.patch

Uploaded a patch and a unit test case.  The motivation for the fix is that if a Project (or any other plan node) has an input that is sorted by an expression that is not part of the list of expressions being projected by that node, then its collation trait should be empty.  Further, it looks like converting to PRESERVE collation is not allowed (in canConvert() function of RelCollationTraitDef), so creating a Project with PRESERVE can cause problems. 
Pls review the patch.  Thanks. 

> ArrayIndexOutOfBoundException when deducing collation
> -----------------------------------------------------
>
>                 Key: CALCITE-569
>                 URL: https://issues.apache.org/jira/browse/CALCITE-569
>             Project: Calcite
>          Issue Type: Bug
>    Affects Versions: 1.0.0-incubating
>            Reporter: Aman Sinha
>            Assignee: Julian Hyde
>         Attachments: 0001-CALCITE-569-Create-a-Project-with-empty-collation-if.patch
>
>
> If a subquery has an ORDER BY on a column that is not in the SELECT list and the outer query does another ORDER BY,  Calcite encounters an ArrayIndexOutOfBoundException when deducing collation. 
> In PlannerTest, I created a simple test by first adding the following traits: 
>  {code}
> 	    List<RelTraitDef> traitDefs = new ArrayList<RelTraitDef>();
> 	    traitDefs.add(ConventionTraitDef.INSTANCE);
> 	    traitDefs.add(RelCollationTraitDef.INSTANCE);
> {code}
> And ran the following query: 
> {code}
> select t.psPartkey from (select ps.psPartkey from `tpch`.`partsupp` ps order by ps.psSupplyCost) t order by t.psPartkey"
> {code}
> {code}
> java.lang.ArrayIndexOutOfBoundsException: -1
> 	at org.apache.calcite.rex.RexProgram.deduceCollations(RexProgram.java:589)
> 	at org.apache.calcite.rex.RexProgram.getCollations(RexProgram.java:558)
> 	at org.apache.calcite.plan.RelOptUtil.createProject(RelOptUtil.java:2685)
> 	at org.apache.calcite.plan.RelOptUtil.createProject(RelOptUtil.java:2623)
> 	at org.apache.calcite.sql2rel.SqlToRelConverter.convertSelectList(SqlToRelConverter.java:3571)
> 	at org.apache.calcite.sql2rel.SqlToRelConverter.convertSelectImpl(SqlToRelConverter.java:613)
> 	at org.apache.calcite.sql2rel.SqlToRelConverter.convertSelect(SqlToRelConverter.java:568)
> 	at org.apache.calcite.sql2rel.SqlToRelConverter.convertQueryRecursive(SqlToRelConverter.java:2929)
> 	at org.apache.calcite.sql2rel.SqlToRelConverter.convertQuery(SqlToRelConverter.java:526)
> 	at org.apache.calcite.prepare.PlannerImpl.convert(PlannerImpl.java:189)
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)