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)