You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@calcite.apache.org by "Jiatao Tao (Jira)" <ji...@apache.org> on 2020/11/06 09:12:00 UTC
[jira] [Comment Edited] (CALCITE-4381) CoreQuidemTest#[8] throws
ArrayIndexOutOfBoundsException when enable ProjectJoinTransposeRule
[ https://issues.apache.org/jira/browse/CALCITE-4381?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17227256#comment-17227256 ]
Jiatao Tao edited comment on CALCITE-4381 at 11/6/20, 9:11 AM:
---------------------------------------------------------------
sql:
select * from dept
where deptno in (select deptno from emp where gender = 'F')
or deptno in (select deptno from emp where gender = 'M')"
Plan before volcano planner:
And there's empty aggregate: " LogicalAggregate(group=[{}])" caused this array out of boundary.
{code:java}
LogicalProject(DEPTNO=[$0], DNAME=[$1])
LogicalFilter(condition=[OR(AND(<>($2, 0), IS NOT NULL($4)), AND(<>($2, 0), IS NOT NULL($6)))])
LogicalJoin(condition=[=($0, $5)], joinType=[left])
LogicalJoin(condition=[true], joinType=[inner])
LogicalJoin(condition=[=($0, $3)], joinType=[left])
LogicalJoin(condition=[true], joinType=[inner])
LogicalProject(DEPTNO=[$0], DNAME=[$1])
LogicalValues(tuples=[[{ 10, 'Sales ' }, { 20, 'Marketing ' }, { 30, 'Engineering' }, { 40, 'Empty ' }]])
LogicalAggregate(group=[{}], c=[COUNT()])
LogicalFilter(condition=[=($1, 'F')])
LogicalUnion(all=[true])
LogicalProject(EXPR$1=[10], EXPR$2=['F'])
LogicalValues(tuples=[[{ 0 }]])
LogicalProject(EXPR$1=[10], EXPR$2=['M'])
LogicalValues(tuples=[[{ 0 }]])
LogicalProject(EXPR$1=[20], EXPR$2=['M'])
LogicalValues(tuples=[[{ 0 }]])
LogicalProject(EXPR$1=[30], EXPR$2=['F'])
LogicalValues(tuples=[[{ 0 }]])
LogicalProject(EXPR$1=[30], EXPR$2=['F'])
LogicalValues(tuples=[[{ 0 }]])
LogicalProject(EXPR$1=[50], EXPR$2=['M'])
LogicalValues(tuples=[[{ 0 }]])
LogicalProject(EXPR$1=[50], EXPR$2=['F'])
LogicalValues(tuples=[[{ 0 }]])
LogicalProject(EXPR$1=[60], EXPR$2=['F'])
LogicalValues(tuples=[[{ 0 }]])
LogicalProject(EXPR$1=[null:INTEGER], EXPR$2=['F'])
LogicalValues(tuples=[[{ 0 }]])
LogicalAggregate(group=[{0, 1}])
LogicalProject(DEPTNO=[$0], i=[true])
LogicalFilter(condition=[=($1, 'F')])
LogicalUnion(all=[true])
LogicalProject(EXPR$1=[10], EXPR$2=['F'])
LogicalValues(tuples=[[{ 0 }]])
LogicalProject(EXPR$1=[10], EXPR$2=['M'])
LogicalValues(tuples=[[{ 0 }]])
LogicalProject(EXPR$1=[20], EXPR$2=['M'])
LogicalValues(tuples=[[{ 0 }]])
LogicalProject(EXPR$1=[30], EXPR$2=['F'])
LogicalValues(tuples=[[{ 0 }]])
LogicalProject(EXPR$1=[30], EXPR$2=['F'])
LogicalValues(tuples=[[{ 0 }]])
LogicalProject(EXPR$1=[50], EXPR$2=['M'])
LogicalValues(tuples=[[{ 0 }]])
LogicalProject(EXPR$1=[50], EXPR$2=['F'])
LogicalValues(tuples=[[{ 0 }]])
LogicalProject(EXPR$1=[60], EXPR$2=['F'])
LogicalValues(tuples=[[{ 0 }]])
LogicalProject(EXPR$1=[null:INTEGER], EXPR$2=['F'])
LogicalValues(tuples=[[{ 0 }]])
LogicalAggregate(group=[{}])
LogicalFilter(condition=[=($1, 'M')])
LogicalUnion(all=[true])
LogicalProject(EXPR$1=[10], EXPR$2=['F'])
LogicalValues(tuples=[[{ 0 }]])
LogicalProject(EXPR$1=[10], EXPR$2=['M'])
LogicalValues(tuples=[[{ 0 }]])
LogicalProject(EXPR$1=[20], EXPR$2=['M'])
LogicalValues(tuples=[[{ 0 }]])
LogicalProject(EXPR$1=[30], EXPR$2=['F'])
LogicalValues(tuples=[[{ 0 }]])
LogicalProject(EXPR$1=[30], EXPR$2=['F'])
LogicalValues(tuples=[[{ 0 }]])
LogicalProject(EXPR$1=[50], EXPR$2=['M'])
LogicalValues(tuples=[[{ 0 }]])
LogicalProject(EXPR$1=[50], EXPR$2=['F'])
LogicalValues(tuples=[[{ 0 }]])
LogicalProject(EXPR$1=[60], EXPR$2=['F'])
LogicalValues(tuples=[[{ 0 }]])
LogicalProject(EXPR$1=[null:INTEGER], EXPR$2=['F'])
LogicalValues(tuples=[[{ 0 }]])
LogicalAggregate(group=[{0, 1}])
LogicalProject(DEPTNO=[$0], i=[true])
LogicalFilter(condition=[=($1, 'M')])
LogicalUnion(all=[true])
LogicalProject(EXPR$1=[10], EXPR$2=['F'])
LogicalValues(tuples=[[{ 0 }]])
LogicalProject(EXPR$1=[10], EXPR$2=['M'])
LogicalValues(tuples=[[{ 0 }]])
LogicalProject(EXPR$1=[20], EXPR$2=['M'])
LogicalValues(tuples=[[{ 0 }]])
LogicalProject(EXPR$1=[30], EXPR$2=['F'])
LogicalValues(tuples=[[{ 0 }]])
LogicalProject(EXPR$1=[30], EXPR$2=['F'])
LogicalValues(tuples=[[{ 0 }]])
LogicalProject(EXPR$1=[50], EXPR$2=['M'])
LogicalValues(tuples=[[{ 0 }]])
LogicalProject(EXPR$1=[50], EXPR$2=['F'])
LogicalValues(tuples=[[{ 0 }]])
LogicalProject(EXPR$1=[60], EXPR$2=['F'])
LogicalValues(tuples=[[{ 0 }]])
LogicalProject(EXPR$1=[null:INTEGER], EXPR$2=['F'])
LogicalValues(tuples=[[{ 0 }]])
{code}
was (Author: aron.tao):
sql:
select * from dept
where deptno in (select deptno from emp where gender = 'F')
or deptno in (select deptno from emp where gender = 'M')"
Plan before volcano planner:
{code:java}
LogicalProject(DEPTNO=[$0], DNAME=[$1])
LogicalFilter(condition=[OR(AND(<>($2, 0), IS NOT NULL($4)), AND(<>($2, 0), IS NOT NULL($6)))])
LogicalJoin(condition=[=($0, $5)], joinType=[left])
LogicalJoin(condition=[true], joinType=[inner])
LogicalJoin(condition=[=($0, $3)], joinType=[left])
LogicalJoin(condition=[true], joinType=[inner])
LogicalProject(DEPTNO=[$0], DNAME=[$1])
LogicalValues(tuples=[[{ 10, 'Sales ' }, { 20, 'Marketing ' }, { 30, 'Engineering' }, { 40, 'Empty ' }]])
LogicalAggregate(group=[{}], c=[COUNT()])
LogicalFilter(condition=[=($1, 'F')])
LogicalUnion(all=[true])
LogicalProject(EXPR$1=[10], EXPR$2=['F'])
LogicalValues(tuples=[[{ 0 }]])
LogicalProject(EXPR$1=[10], EXPR$2=['M'])
LogicalValues(tuples=[[{ 0 }]])
LogicalProject(EXPR$1=[20], EXPR$2=['M'])
LogicalValues(tuples=[[{ 0 }]])
LogicalProject(EXPR$1=[30], EXPR$2=['F'])
LogicalValues(tuples=[[{ 0 }]])
LogicalProject(EXPR$1=[30], EXPR$2=['F'])
LogicalValues(tuples=[[{ 0 }]])
LogicalProject(EXPR$1=[50], EXPR$2=['M'])
LogicalValues(tuples=[[{ 0 }]])
LogicalProject(EXPR$1=[50], EXPR$2=['F'])
LogicalValues(tuples=[[{ 0 }]])
LogicalProject(EXPR$1=[60], EXPR$2=['F'])
LogicalValues(tuples=[[{ 0 }]])
LogicalProject(EXPR$1=[null:INTEGER], EXPR$2=['F'])
LogicalValues(tuples=[[{ 0 }]])
LogicalAggregate(group=[{0, 1}])
LogicalProject(DEPTNO=[$0], i=[true])
LogicalFilter(condition=[=($1, 'F')])
LogicalUnion(all=[true])
LogicalProject(EXPR$1=[10], EXPR$2=['F'])
LogicalValues(tuples=[[{ 0 }]])
LogicalProject(EXPR$1=[10], EXPR$2=['M'])
LogicalValues(tuples=[[{ 0 }]])
LogicalProject(EXPR$1=[20], EXPR$2=['M'])
LogicalValues(tuples=[[{ 0 }]])
LogicalProject(EXPR$1=[30], EXPR$2=['F'])
LogicalValues(tuples=[[{ 0 }]])
LogicalProject(EXPR$1=[30], EXPR$2=['F'])
LogicalValues(tuples=[[{ 0 }]])
LogicalProject(EXPR$1=[50], EXPR$2=['M'])
LogicalValues(tuples=[[{ 0 }]])
LogicalProject(EXPR$1=[50], EXPR$2=['F'])
LogicalValues(tuples=[[{ 0 }]])
LogicalProject(EXPR$1=[60], EXPR$2=['F'])
LogicalValues(tuples=[[{ 0 }]])
LogicalProject(EXPR$1=[null:INTEGER], EXPR$2=['F'])
LogicalValues(tuples=[[{ 0 }]])
LogicalAggregate(group=[{}])
LogicalFilter(condition=[=($1, 'M')])
LogicalUnion(all=[true])
LogicalProject(EXPR$1=[10], EXPR$2=['F'])
LogicalValues(tuples=[[{ 0 }]])
LogicalProject(EXPR$1=[10], EXPR$2=['M'])
LogicalValues(tuples=[[{ 0 }]])
LogicalProject(EXPR$1=[20], EXPR$2=['M'])
LogicalValues(tuples=[[{ 0 }]])
LogicalProject(EXPR$1=[30], EXPR$2=['F'])
LogicalValues(tuples=[[{ 0 }]])
LogicalProject(EXPR$1=[30], EXPR$2=['F'])
LogicalValues(tuples=[[{ 0 }]])
LogicalProject(EXPR$1=[50], EXPR$2=['M'])
LogicalValues(tuples=[[{ 0 }]])
LogicalProject(EXPR$1=[50], EXPR$2=['F'])
LogicalValues(tuples=[[{ 0 }]])
LogicalProject(EXPR$1=[60], EXPR$2=['F'])
LogicalValues(tuples=[[{ 0 }]])
LogicalProject(EXPR$1=[null:INTEGER], EXPR$2=['F'])
LogicalValues(tuples=[[{ 0 }]])
LogicalAggregate(group=[{0, 1}])
LogicalProject(DEPTNO=[$0], i=[true])
LogicalFilter(condition=[=($1, 'M')])
LogicalUnion(all=[true])
LogicalProject(EXPR$1=[10], EXPR$2=['F'])
LogicalValues(tuples=[[{ 0 }]])
LogicalProject(EXPR$1=[10], EXPR$2=['M'])
LogicalValues(tuples=[[{ 0 }]])
LogicalProject(EXPR$1=[20], EXPR$2=['M'])
LogicalValues(tuples=[[{ 0 }]])
LogicalProject(EXPR$1=[30], EXPR$2=['F'])
LogicalValues(tuples=[[{ 0 }]])
LogicalProject(EXPR$1=[30], EXPR$2=['F'])
LogicalValues(tuples=[[{ 0 }]])
LogicalProject(EXPR$1=[50], EXPR$2=['M'])
LogicalValues(tuples=[[{ 0 }]])
LogicalProject(EXPR$1=[50], EXPR$2=['F'])
LogicalValues(tuples=[[{ 0 }]])
LogicalProject(EXPR$1=[60], EXPR$2=['F'])
LogicalValues(tuples=[[{ 0 }]])
LogicalProject(EXPR$1=[null:INTEGER], EXPR$2=['F'])
LogicalValues(tuples=[[{ 0 }]])
{code}
> CoreQuidemTest#[8] throws ArrayIndexOutOfBoundsException when enable ProjectJoinTransposeRule
> ---------------------------------------------------------------------------------------------
>
> Key: CALCITE-4381
> URL: https://issues.apache.org/jira/browse/CALCITE-4381
> Project: Calcite
> Issue Type: Bug
> Components: core
> Reporter: Jiatao Tao
> Assignee: Jiatao Tao
> Priority: Major
>
> Code in [https://github.com/Aaaaaaron/calcite/tree/CALCITE-4378]
> Just add CoreRules.PROJECT_JOIN_TRANSPOSE to RelOptRules#BASE_RULES, then run CoreQuidemTest can reproduce his.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)