[
https://issues.apache.org/jira/browse/FLINK-14030?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16946707#comment-16946707
]
Zoltan Haindrich commented on FLINK-14030:
------------------------------------------
I'm not 100% sure that I follow the issue correctly here...
{quote}The result of expression 'f0 + 'f1' should be null when the result
overflows even if its two operands both are not null.
{quote}
Although I tend to agree to support such invalid value handling - afaik
addition of 2 non-null elements when the result is no more representative as
the given type should result in an exception by the sql standard.
Let's clear things up by some operation tables:
|a|b|a + b|(a+b) is null|
|0|0|0|false|
|null|0|null|true|
| MAX | MAX | E | (1) E |
I think this ticket is about the (1) case - because we may not get an Exception
from + because of the simplification transformations...
> IS_NULL is optimized to incorrect results
> -----------------------------------------
>
> Key: FLINK-14030
> URL: https://issues.apache.org/jira/browse/FLINK-14030
> Project: Flink
> Issue Type: Bug
> Components: Table SQL / Planner
> Affects Versions: 1.9.0
> Reporter: Leonard Xu
> Priority: Major
>
> *testAllApis()* unit tests will run fail because planner make a conversion
> from *[ifThenElse(isNull(plus(f0, f1)), 'null', 'not null')]*
> to *[CASE(OR(IS NULL($0), IS NULL($1)), _UTF-16LE'null', _UTF-16LE'not
> null')]*
> which is not a equivalence conversion. The result of expression 'f0 + 'f1
> should be null
> when the result overflows even if its two operands both are not null.
> It's easy to reproduce as following:
> testAllApis(
> 'f0 + 'f1,
> "f1 + f1",
> "f1 + f1",
> "null")// the result should be null because overflow
> override def testData: Row =
> { val testData = new Row(2) testData.setField(0,
> BigDecimal("1e10").bigDecimal) testData.setField(1,
> BigDecimal("0").bigDecimal) testData }
> override def typeInfo: RowTypeInfo =
> { new RowTypeInfo( /* 0 */ fromLogicalTypeToTypeInfo(DECIMAL(38, 10)), /* 1
> */ fromLogicalTypeToTypeInfo(DECIMAL(38, 28)) ) }
>
--
This message was sent by Atlassian Jira
(v8.3.4#803005)