JIasen Sheng created CALCITE-4619:
-------------------------------------

             Summary: "Full join" generates an incorrect execution plan under 
mysql
                 Key: CALCITE-4619
                 URL: https://issues.apache.org/jira/browse/CALCITE-4619
             Project: Calcite
          Issue Type: Bug
          Components: core
            Reporter: JIasen Sheng


The current jdbcJoinRules can match any join type, but not all jdbc databases 
can support full join, such as mysql and H2.
Calcite will generate the following plan for
{code:java}
select count(*) as c from \"foodmart\".\"store\" as p1 full join 
\"foodmart\".\"store\" as p2 using (\"store_id\")
{code}
.
{code:java}
JdbcToEnumerableConverter
  JdbcAggregate(group=[{}], C=[COUNT()])
    JdbcJoin(condition=[=($0, $1)], joinType=[full])
      JdbcProject(store_id=[$0])
        JdbcTableScan(table=[[foodmart, store]])
      JdbcProject(store_id=[$0])
        JdbcTableScan(table=[[foodmart, store]]){code}
When the plan is executed in Mysql, the execution will fail due to the 
existence of a full join.

 

 

I think it is necessary to add supportsFullJoin method in SqlDialect, and add 
JdbcJoinRule matching rules to solve this problem

 



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

Reply via email to