[
https://issues.apache.org/jira/browse/CALCITE-1582?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15834736#comment-15834736
]
Jess Balint commented on CALCITE-1582:
--------------------------------------
PR submitted
> RelToSqlConverter doesn't handle cartesian join (no join cond)
> --------------------------------------------------------------
>
> Key: CALCITE-1582
> URL: https://issues.apache.org/jira/browse/CALCITE-1582
> Project: Calcite
> Issue Type: Bug
> Components: core
> Reporter: Jess Balint
> Assignee: Julian Hyde
> Priority: Minor
>
> this test fails (added in {{RelToSqlConverterTest}}):
> {code}
> @Test public void testCartesianProduct() {
> String query = "select * from \"department\" , \"employee\"";
> String expected = "SELECT *\n" +
> "FROM \"foodmart\".\"department\"\n" +
> "INNER JOIN \"foodmart\".\"employee\"";
> sql(query).ok(expected);
> }
> {code}
> {{RelToSqlConverter}} is checking that the join condition is a {{RexCall}}.
> In this case (and {{RelBuilder.join()}} with no join cond), the join cond is
> a {{RexLiteral}} with a value of {{true}}.
> Suggested fix is to handle the case with this specific join condition before
> {{convertConditionToSqlNode()}}:
> {noformat}
> ---
> a/core/src/main/java/org/apache/calcite/rel/rel2sql/RelToSqlConverter.java
> +++
> b/core/src/main/java/org/apache/calcite/rel/rel2sql/RelToSqlConverter.java
> @@ -104,17 +104,23 @@ public Result visit(Join e) {
> final Context leftContext = leftResult.qualifiedContext();
> final Context rightContext =
> rightResult.qualifiedContext();
> - SqlNode sqlCondition = convertConditionToSqlNode(e.getCondition(),
> - leftContext,
> - rightContext,
> - e.getLeft().getRowType().getFieldCount());
> + SqlNode sqlCondition = null;
> + SqlLiteral condType = JoinConditionType.ON.symbol(POS);
> + if (e.getCondition().isAlwaysTrue()) {
> + condType = JoinConditionType.NONE.symbol(POS);
> + } else {
> + sqlCondition = convertConditionToSqlNode(e.getCondition(),
> + leftContext,
> + rightContext,
> + e.getLeft().getRowType().getFieldCount());
> + }
> SqlNode join =
> new SqlJoin(POS,
> leftResult.asFrom(),
> SqlLiteral.createBoolean(false, POS),
> joinType(e.getJoinType()).symbol(POS),
> rightResult.asFrom(),
> - JoinConditionType.ON.symbol(POS),
> + condType,
> sqlCondition);
> return result(join, leftResult, rightResult);
> }
> {noformat}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)