[ 
https://issues.apache.org/jira/browse/CALCITE-5272?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Ian Bertolacci closed CALCITE-5272.
-----------------------------------
    Resolution: Not A Problem

Realized that RelBuilder/RexBuilder actually *does* guard against this, but it 
requires assertions to be enabled (which, for whatever inane reason, were not 
enabled by default in my local testing area).

> 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
>            Priority: Minor
>
> 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)

Reply via email to