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

Zhixiong Chen updated CALCITE-4074:
-----------------------------------
    Description: 
sql: 
{code:java}
 SELECT count(*) FROM t6
 INNER JOIN t5 
 ON T6.NUM = T5.NUM
 OR ((T6.NUM IS NULL) AND (T5.NUM IS NULL));{code}
However the plan is 
{code:java}
AggregateRel(group=[{0}], ctx=[])
  ProjectRel(NUM1=[$2], ctx=[])
    JoinRel(condition=[=($1, $5)], joinType=[inner], ctx=[])
      TableScan(table=[[SAMPLE, T6]], ctx=[], fields=[[0, 1, 2, 3]])
      TableScan(table=[[SAMPLE, T5]], ctx=[], fields=[[0, 1, 2, 3]])
{code}
It seem the filter IS NULL  is optimized , and the plan is wrong.

  was:
sql: 
{code:java}
SELECT count(*), T1.NUM
 FROM
 (
 SELECT NUM FROM t6 GROUP BY NUM
 ) AS T1
 INNER JOIN
 (
 SELECT NUM FROM t5 GROUP BY NUM
 ) AS T2
 ON T1.NUM = T2.NUM
 OR ((T1.NUM IS NULL) AND (T2.NUM IS NULL))
 GROUP BY T1.NUM;{code}
However the plan is 
{code:java}
ProjectRel(EXPR$0=[$1], NUM=[$0], ctx=[])
  AggregateRel(group-set=[[0]], groups=[null], EXPR$0=[COUNT()], ctx=[])
    ProjectRel(NUM=[$0], ctx=[])
      JoinRel(condition=[=($0, $1)], joinType=[inner], ctx=[])
        AggregateRel(group-set=[[0]], groups=[null], ctx=[0@null])
          ProjectRel(NUM=[$1], ctx=[0@null])
            TableScan(table=[[DEFAULT, T6]], ctx=[0@null], fields=[[0, 1, 2]])
        AggregateRel(group-set=[[0]], groups=[null], ctx=[1@null])
          ProjectRel(NUM=[$1], ctx=[1@null])
            TableScan(table=[[DEFAULT, T5]], ctx=[1@null], fields=[[0, 1, 2]])
{code}
It seem the filter IS NULL  is optimized , and the plan is wrong.


> Wrong plan for IS NULL in join query
> ------------------------------------
>
>                 Key: CALCITE-4074
>                 URL: https://issues.apache.org/jira/browse/CALCITE-4074
>             Project: Calcite
>          Issue Type: Bug
>            Reporter: Zhixiong Chen
>            Priority: Major
>
> sql: 
> {code:java}
>  SELECT count(*) FROM t6
>  INNER JOIN t5 
>  ON T6.NUM = T5.NUM
>  OR ((T6.NUM IS NULL) AND (T5.NUM IS NULL));{code}
> However the plan is 
> {code:java}
> AggregateRel(group=[{0}], ctx=[])
>   ProjectRel(NUM1=[$2], ctx=[])
>     JoinRel(condition=[=($1, $5)], joinType=[inner], ctx=[])
>       TableScan(table=[[SAMPLE, T6]], ctx=[], fields=[[0, 1, 2, 3]])
>       TableScan(table=[[SAMPLE, T5]], ctx=[], fields=[[0, 1, 2, 3]])
> {code}
> It seem the filter IS NULL  is optimized , and the plan is wrong.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to