[
https://issues.apache.org/jira/browse/IMPALA-8000?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Paul Rogers reassigned IMPALA-8000:
-----------------------------------
Assignee: (was: Paul Rogers)
> Implied cast of NULL done for expressions, not literals
> -------------------------------------------------------
>
> Key: IMPALA-8000
> URL: https://issues.apache.org/jira/browse/IMPALA-8000
> Project: IMPALA
> Issue Type: Bug
> Components: Frontend
> Affects Versions: Impala 3.1.0
> Reporter: Paul Rogers
> Priority: Major
>
> Impala can combine a cast with a null to create a typed null:
> {noformat}
> CAST(NULL AS SMALLINT) --> NULL:SMALLINT
> {code}
> Where the notation on the right indicates a NULL of type SMALLINT.
> However, the analyzer appears to apply this optimization inconsistently. It
> is done with constant folding:
> {code:java}
> String query = "SELECT 1 + NULL AS c" +
> " from functional.alltypestiny";
> AnalysisContext ctx = createAnalysisCtx();
> ctx.getQueryOptions().setEnable_expr_rewrites(true);
> SelectStmt select = (SelectStmt) AnalyzesOk(query, ctx);
> Expr expr = select.getSelectList().getItems().get(0).getExpr();
> assertEquals(ScalarType.SMALLINT, expr.getType());
> assertTrue(expr instanceof NullLiteral);
> {code}
> But not for the near-identical result with an explicit cast:
> {code:java}
> String query = "SELECT CAST(NULL AS SMALLINT) AS c" +
> " from functional.alltypestiny";
> … // Same as above
> assertEquals(ScalarType.SMALLINT, expr.getType());
> // Fails, is actually CastExpr
> //assertTrue(expr instanceof NullLiteral);
> {code}
> Interestingly, the NULL inside the CAST does have its type set to SMALLINT,
> so the CAST is unnecessary.
> Expected the analyzer to apply the rule consistently so that other rules
> don’t have to handle both cases.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]