[
https://issues.apache.org/jira/browse/IGNITE-22635?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Pavel Pereslegin updated IGNITE-22635:
--------------------------------------
Ignite Flags: (was: Docs Required,Release Notes Required)
> 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
> Time Spent: 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)