[ https://issues.apache.org/jira/browse/CALCITE-1338?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16813177#comment-16813177 ]
Hongze Zhang commented on CALCITE-1338: --------------------------------------- {quote} Can I say that if one of nodes in the project is not-nullable, then we should not pull up {quote} Sounds reasonable. It's more or less like the last case that Julian has listed. > JoinProjectTransposeRule makes wrong transformation when the right child of > left outer join has a RexLiteral project expression. > -------------------------------------------------------------------------------------------------------------------------------- > > Key: CALCITE-1338 > URL: https://issues.apache.org/jira/browse/CALCITE-1338 > Project: Calcite > Issue Type: Bug > Components: core > Reporter: Yi Xinglu > Assignee: Chunwei Lei > Priority: Major > > h3. SQL: > {code:borderStyle=solid} > SELECT * > FROM dept a > LEFT JOIN ( > SELECT b.name, 1 FROM dept b > ) AS b > ON a.name=b.name > {code} > h3. Selected rule set: > {code:borderStyle=solid} > SubQueryRemoveRule.JOIN > JoinProjectTransposeRule.RIGHT_PROJECT_INCLUDE_OUTER > {code} > h3. Optimized logical plan: > {code:borderStyle=solid} > LogicalProject(DEPTNO=[$0], NAME=[$1], NAME0=[$2], EXPR$1=[$3]) > LogicalProject(DEPTNO=[$0], NAME=[$1], NAME0=[$2], > EXPR$1=[CAST($3):INTEGER]) > LogicalProject(DEPTNO=[$0], NAME=[$1], NAME0=[$3], EXPR$1=[1]) > LogicalJoin(condition=[=($3, $1)], joinType=[left]) > LogicalTableScan(table=[[CATALOG, SALES, DEPT]]) > LogicalTableScan(table=[[CATALOG, SALES, DEPT]]) > {code} > h3. The right logical plan should be > {code:borderStyle=solid} > LogicalProject(DEPTNO=[$0], NAME=[$1], NAME0=[$2], EXPR$1=[$3]) > LogicalJoin(condition=[=($2, $1)], joinType=[left]) > LogicalTableScan(table=[[CATALOG, SALES, DEPT]]) > LogicalProject(NAME=[$1], EXPR$1=[1]) > LogicalTableScan(table=[[CATALOG, SALES, DEPT]]) > {code} > h3. Summary > The RexLiteral project expression will make logical plan get different > results when it's right child or parent node of left outer join. -- This message was sent by Atlassian JIRA (v7.6.3#76005)