You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@calcite.apache.org by "Ian Bertolacci (Jira)" <ji...@apache.org> on 2022/09/07 17:30:00 UTC

[jira] [Created] (CALCITE-5272) RelBuilder/RexBuilder allow creation of invalid CASE expression

Ian Bertolacci created CALCITE-5272:
---------------------------------------

             Summary: RelBuilder/RexBuilder allow creation of invalid CASE expression
                 Key: CALCITE-5272
                 URL: https://issues.apache.org/jira/browse/CALCITE-5272
             Project: Calcite
          Issue Type: Bug
    Affects Versions: 1.30.0
            Reporter: Ian Bertolacci


It is possible (and easy) to create the invalid CASE expression† {{`CASE ELSE 1 END`}} using either RelBuilder or RexBuilder.
(† Or at least and expression which Calcite then cannot parse.)

{code:scala}
val relBuilder: RelBuilder = ...
val rexBuilder: RexBuilder = ...
val typeFactory = relBuilder.getTypeFactory
// Invalid case expression that can be built
val caseExprRel = relBuilder.call(SqlStdOperatorTable.CASE, relBuilder.literal(1))
val caseExprRex = rexBuilder.makeCall(SqlStdOperatorTable.CASE, rexBuilder.
makeBigintLiteral(BigDecimal.valueOf(1)))
// RelNode tree with project containing invalid case expressions
val node =
  relBuilder.values(
    java.util.Arrays.asList( java.util.Arrays.asList(relBuilder.literal(0)) ),
    typeFactory.builder().add("x", typeFactory.createSqlType(SqlTypeName.INTEGER)).build()
  )
  .project(caseExprRel, caseExprRex)
  .build()
{code}

Gives the RelNode tree:
{code}
1:LogicalProject($f0=[CASE(1)], $f1=[CASE(1:BIGINT)])
  0:LogicalValues(tuples=[[{ 0 }]])
{code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)