Evgeny Stanilovsky created IGNITE-20889:
-------------------------------------------
Summary: Sql. Change type derivation for literals and expressions
for overflowed BIGINT
Key: IGNITE-20889
URL: https://issues.apache.org/jira/browse/IGNITE-20889
Project: Ignite
Issue Type: Improvement
Components: sql
Affects Versions: 3.0.0-beta1
Reporter: Evgeny Stanilovsky
After [1] will be merged, it become possible to control overflow with numeric
operations, there are 3 places in code (will be notified under this issue)
which have been changed but seems it`s all due to partially incorrect
(calcite?) implementation. I spend a bit time and found that case with
overflowed BIGINT insertion: ItDmlTest#testInsertValueOverflow can be fixed by
correct implementing: SqlNumericLiteral#createSqlType, i fast check and seems
it will began work properly well, without additional code changes (all core
manipulations in scope of [1] can be reverted). The second case: insertion for
overflowed SUM of BIGINT additional fix need to be done, check:
SqlValidatorImpl#getValidatedNodeType
Further research is required here.
[1] https://issues.apache.org/jira/browse/IGNITE-18662
Just for note, i made dirty hack here: IgniteSqlValidator#deriveType
{code:java}
if (expr instanceof SqlNumericLiteral) {
SqlNumericLiteral expr0 = (SqlNumericLiteral) expr;
if (expr0.toValue().length() > 10 && expr0.getTypeName() ==
SqlTypeName.DECIMAL) {
return typeFactory.createSqlType(
SqlTypeName.DECIMAL,
requireNonNull(20, "prec"),
0);
}
}
{code}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)