[
https://issues.apache.org/jira/browse/CALCITE-569?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Vladimir Sitnikov updated CALCITE-569:
--------------------------------------
Attachment: 0001-Properly-track-collation-trait-for-select-a-from-.-o.patch
I've scanned through the createProject and it looks like a little needs to be
done to support proper collation traits.
In fact, {{RelOptUtil.createProject}} almost had that feature, however it was
not properly coded.
[~amansinha100],
Can you please check
[^0001-Properly-track-collation-trait-for-select-a-from-.-o.patch]?
Can you please add more specific assertion to the test? I am not sure if
{{assertThat(plan, containsString("Sort"));}} tells much if the assert fails.
Well, it is probably obvious to you, however it will become puzzling if the
test breaks.
[~julianhyde],
1) {{RelOptUtil.create(RelNode child, List<Integer> cols)}} ignores field
names. Is it intentional?
If I add the names, then I get somewhat more readable plans (proper column
names instead of {{$f0}})
Should we keep original names?
2) What rule should remove "unnecessary Sort"? Basically with my patch I see
{{(Sort(Project(..., collation=\[0\]), collation=\[0\])}}.
3) As far as I understand, {{new LogicalProject}} should not be used as it
almost always misses collation trait.
> 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,
> 0001-Properly-track-collation-trait-for-select-a-from-.-o.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)