Details
-
Bug
-
Status: Open
-
Not a Priority
-
Resolution: Unresolved
-
1.9.0
-
None
Description
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)) ) }
Attachments
Issue Links
- relates to
-
CALCITE-3368 PLUS, MINUS and TIMES should be unsafe when simplifying ‘expression IS NULL’
- Open