Jiajun Xie created CALCITE-6191:
-----------------------------------
Summary: Remove join if input is one row literal
Key: CALCITE-6191
URL: https://issues.apache.org/jira/browse/CALCITE-6191
Project: Calcite
Issue Type: Improvement
Components: core
Reporter: Jiajun Xie
Assignee: Jiajun Xie
Here are some Join Rules
{noformat}
at CoreRules.java | grep ' #JOIN_'
* @see #JOIN_REDUCE_EXPRESSIONS
* @see #JOIN_SUB_QUERY_TO_CORRELATE */
* @see #JOIN_SUB_QUERY_TO_CORRELATE */
* @see #JOIN_TO_SEMI_JOIN */
/** As {@link #JOIN_COMMUTE} but swaps outer joins as well as inner joins. */
/** As {@link #JOIN_PROJECT_BOTH_TRANSPOSE} but only the left input is
/** As {@link #JOIN_PROJECT_BOTH_TRANSPOSE} but only the right input is
/** As {@link #JOIN_PROJECT_BOTH_TRANSPOSE} but match outer as well as
/** As {@link #JOIN_PROJECT_LEFT_TRANSPOSE} but match outer as well as
/** As {@link #JOIN_PROJECT_RIGHT_TRANSPOSE} but match outer as well as
* @see #JOIN_TO_MULTI_JOIN
{noformat}
I cannot optimize the SQL by using them.
{noformat}
SELECT EMPNO FROM emp, (SELECT 1 as c) temp WHERE EMPNO = temp.c{noformat}
Here is optimized RelNode that I want get.
{code:java}
LogicalProject(EMPNO=[$0])
LogicalFilter(condition=[=($0, 1)])
LogicalTableScan(table=[[CATALOG, SALES, EMP]]){code}
But now it is
{noformat}
LogicalProject(EMPNO=[$0])
LogicalFilter(condition=[=($0, $9)])
LogicalJoin(condition=[true], joinType=[inner])
LogicalTableScan(table=[[CATALOG, SALES, EMP]])
LogicalValues(tuples=[[{ 1 }]]){noformat}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)