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)