[ 
https://issues.apache.org/jira/browse/IGNITE-22635?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Pavel Pereslegin updated IGNITE-22635:
--------------------------------------
    Fix Version/s: 3.0.0-beta2

> Sql. Unable to optimize plan error for input out of range
> ---------------------------------------------------------
>
>                 Key: IGNITE-22635
>                 URL: https://issues.apache.org/jira/browse/IGNITE-22635
>             Project: Ignite
>          Issue Type: Improvement
>          Components: sql
>            Reporter: Iurii Gerzhedovich
>            Assignee: Pavel Pereslegin
>            Priority: Major
>              Labels: ignite-3
>             Fix For: 3.0.0-beta2
>
>          Time Spent: 2h 10m
>  Remaining Estimate: 0h
>
> In some cases, we can't make a query plan in case input values is out of 
> range of destination. 
> For example:
> {code:java}
> @Test
> public void test() {
> sql("CREATE TABLE TEST(ID TINYINT PRIMARY KEY, VAL0 TINYINT)");
> long a = Long.MAX_VALUE-1000;
> BigDecimal val = BigDecimal.valueOf(a + ((double) a / 
> 1000)).add(BigDecimal.valueOf(Long.MAX_VALUE));
>  igniteSql().execute(null, "INSERT INTO TEST VALUES (" + val + ", " + val + 
> ")");
> }{code}
> —
> {code:java}
> org.apache.ignite.sql.SqlException: IGN-CMN-65535 
> TraceId:15fcd9d1-e906-418d-95c5-b5cbde5fb6eb Unable to optimize plan due to 
> internal error
>       at 
> org.apache.ignite.internal.sql.engine.prepare.PlannerHelper.optimize(PlannerHelper.java:166)
>  at 
> org.apache.ignite.internal.sql.engine.planner.AbstractPlannerTest.physicalPlan(AbstractPlannerTest.java:405)
>  at 
> org.apache.ignite.internal.sql.engine.planner.AbstractPlannerTest.physicalPlan(AbstractPlannerTest.java:393)
>  at 
> org.apache.ignite.internal.sql.engine.planner.AbstractPlannerTest.physicalPlan(AbstractPlannerTest.java:377)
>  at 
> org.apache.ignite.internal.sql.engine.planner.AbstractPlannerTest.assertPlan(AbstractPlannerTest.java:499)
>    at 
> org.apache.ignite.internal.sql.engine.planner.AbstractPlannerTest.assertPlan(AbstractPlannerTest.java:488)
>    at 
> org.apache.ignite.internal.sql.engine.planner.AbstractPlannerTest.assertPlan(AbstractPlannerTest.java:469)
>    at 
> org.apache.ignite.internal.sql.engine.planner.datatypes.NumericInsertSourcesCoercionTest.insert1(NumericInsertSourcesCoercionTest.java:94)
>    at java.base/java.lang.reflect.Method.invoke(Method.java:580)   at 
> java.base/java.util.ArrayList.forEach(ArrayList.java:1596)   at 
> java.base/java.util.ArrayList.forEach(ArrayList.java:1596)Caused by: 
> java.lang.ArithmeticException: BIGINT out of range      at 
> org.apache.ignite.internal.sql.engine.util.IgniteMath.checkNumberLongBounds(IgniteMath.java:486)
>      at 
> org.apache.ignite.internal.sql.engine.util.IgniteMath.convertToLongExact(IgniteMath.java:292)
>         at 
> org.apache.ignite.internal.sql.engine.util.Primitives.convertPrimitiveExact(Primitives.java:127)
>      at 
> org.apache.ignite.internal.sql.engine.exec.exp.RexToLixTranslator.translateLiteral(RexToLixTranslator.java:916)
>       at 
> org.apache.ignite.internal.sql.engine.exec.exp.RexToLixTranslator.visitLiteral(RexToLixTranslator.java:1164)
>  at 
> org.apache.ignite.internal.sql.engine.exec.exp.RexToLixTranslator.visitLiteral(RexToLixTranslator.java:113)
>   at org.apache.calcite.rex.RexLiteral.accept(RexLiteral.java:1251)       at 
> org.apache.ignite.internal.sql.engine.exec.exp.RexToLixTranslator.visitLocalRef(RexToLixTranslator.java:1142)
>         at 
> org.apache.ignite.internal.sql.engine.exec.exp.RexToLixTranslator.visitLocalRef(RexToLixTranslator.java:113)
>  at org.apache.calcite.rex.RexLocalRef.accept(RexLocalRef.java:77)       at 
> org.apache.ignite.internal.sql.engine.exec.exp.RexToLixTranslator.implementCallOperand(RexToLixTranslator.java:1275)
>  at 
> org.apache.ignite.internal.sql.engine.exec.exp.RexToLixTranslator.visitCall(RexToLixTranslator.java:1262)
>     at 
> org.apache.ignite.internal.sql.engine.exec.exp.RexToLixTranslator.visitCall(RexToLixTranslator.java:113)
>      at org.apache.calcite.rex.RexCall.accept(RexCall.java:189)      at 
> org.apache.ignite.internal.sql.engine.exec.exp.RexToLixTranslator.visitLocalRef(RexToLixTranslator.java:1142)
>         at 
> org.apache.ignite.internal.sql.engine.exec.exp.RexToLixTranslator.visitLocalRef(RexToLixTranslator.java:113)
>  at org.apache.calcite.rex.RexLocalRef.accept(RexLocalRef.java:77)       at 
> org.apache.ignite.internal.sql.engine.exec.exp.RexToLixTranslator.translate(RexToLixTranslator.java:274)
>      at 
> org.apache.ignite.internal.sql.engine.exec.exp.RexToLixTranslator.translate(RexToLixTranslator.java:268)
>      at 
> org.apache.ignite.internal.sql.engine.exec.exp.RexToLixTranslator.translateList(RexToLixTranslator.java:982)
>  at 
> org.apache.ignite.internal.sql.engine.exec.exp.RexToLixTranslator.translateProjects(RexToLixTranslator.java:222)
>      at 
> org.apache.ignite.internal.sql.engine.exec.exp.RexExecutorImpl.compile(RexExecutorImpl.java:103)
>      at 
> org.apache.ignite.internal.sql.engine.exec.exp.RexExecutorImpl.compile(RexExecutorImpl.java:70)
>       at 
> org.apache.ignite.internal.sql.engine.exec.exp.RexExecutorImpl.reduce(RexExecutorImpl.java:157)
>       at 
> org.apache.calcite.rex.RexSimplify.simplifyCast(RexSimplify.java:2274)       
> at org.apache.calcite.rex.RexSimplify.simplify(RexSimplify.java:292)    at 
> org.apache.calcite.rex.RexSimplify.simplifyUnknownAs(RexSimplify.java:250)   
> at 
> org.apache.calcite.rex.RexSimplify.simplifyPreservingType(RexSimplify.java:189)
>       at 
> org.apache.calcite.rex.RexSimplify.simplifyPreservingType(RexSimplify.java:184)
>       at 
> org.apache.calcite.tools.RelBuilder.lambda$project_$7(RelBuilder.java:2050)  
> at java.base/java.util.ArrayList.replaceAllRange(ArrayList.java:1795)   at 
> java.base/java.util.ArrayList.replaceAll(ArrayList.java:1785)        at 
> org.apache.calcite.tools.RelBuilder.project_(RelBuilder.java:2050)   at 
> org.apache.calcite.tools.RelBuilder.project(RelBuilder.java:1901)    at 
> org.apache.calcite.tools.RelBuilder.project(RelBuilder.java:1884)    at 
> org.apache.calcite.tools.RelBuilder.project(RelBuilder.java:1856)    at 
> org.apache.calcite.sql2rel.SqlToRelConverter.convertValuesImpl(SqlToRelConverter.java:4916)
>   at 
> org.apache.calcite.sql2rel.SqlToRelConverter.convertValues(SqlToRelConverter.java:4825)
>       at 
> org.apache.ignite.internal.sql.engine.prepare.IgniteSqlToRelConvertor.convertValues(IgniteSqlToRelConvertor.java:159)
>         at 
> org.apache.calcite.sql2rel.SqlToRelConverter.convertQueryRecursive(SqlToRelConverter.java:3819)
>       at 
> org.apache.ignite.internal.sql.engine.prepare.IgniteSqlToRelConvertor.convertQueryRecursive(IgniteSqlToRelConvertor.java:88)
>  at 
> org.apache.calcite.sql2rel.SqlToRelConverter.convertInsert(SqlToRelConverter.java:3889)
>       at 
> org.apache.ignite.internal.sql.engine.prepare.IgniteSqlToRelConvertor.convertInsert(IgniteSqlToRelConvertor.java:119)
>         at 
> org.apache.calcite.sql2rel.SqlToRelConverter.convertQueryRecursive(SqlToRelConverter.java:3805)
>       at 
> org.apache.ignite.internal.sql.engine.prepare.IgniteSqlToRelConvertor.convertQueryRecursive(IgniteSqlToRelConvertor.java:88)
>  at 
> org.apache.calcite.sql2rel.SqlToRelConverter.convertQuery(SqlToRelConverter.java:613)
>         at 
> org.apache.ignite.internal.sql.engine.prepare.IgnitePlanner.rel(IgnitePlanner.java:342)
>       at 
> org.apache.ignite.internal.sql.engine.prepare.PlannerHelper.optimize(PlannerHelper.java:87)
>   ... 10 more{code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to