Iurii Gerzhedovich created IGNITE-22635:
-------------------------------------------
Summary: 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
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)");
Double d = Double.MAX_VALUE;
igniteSql().execute(null, "INSERT INTO TEST VALUES (" + d + ", " + d + ")");
}{code}
—
{code:java}
org.apache.ignite.sql.SqlException: IGN-CMN-65535
TraceId:00bc7f29-ac6d-4ff0-a390-17d5414d600f Unable to optimize plan due to
internal error
at
java.base/java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:733)
at
org.apache.ignite.internal.util.ExceptionUtils$1.copy(ExceptionUtils.java:789)
at
org.apache.ignite.internal.util.ExceptionUtils$ExceptionFactory.createCopy(ExceptionUtils.java:723)
at
org.apache.ignite.internal.util.ExceptionUtils.copyExceptionWithCause(ExceptionUtils.java:525)
at
org.apache.ignite.internal.util.ExceptionUtils.copyExceptionWithCauseInternal(ExceptionUtils.java:658)
at
org.apache.ignite.internal.util.ExceptionUtils.copyExceptionWithCause(ExceptionUtils.java:476)
at
org.apache.ignite.internal.sql.api.IgniteSqlImpl.execute(IgniteSqlImpl.java:210)
at
org.apache.ignite.internal.sql.api.PublicApiThreadingIgniteSql.lambda$execute$1(PublicApiThreadingIgniteSql.java:65)
at
org.apache.ignite.internal.thread.PublicApiThreading.executeWithRole(PublicApiThreading.java:144)
at
org.apache.ignite.internal.thread.PublicApiThreading.execUserSyncOperation(PublicApiThreading.java:102)
at
org.apache.ignite.internal.sql.api.PublicApiThreadingIgniteSql.execute(PublicApiThreadingIgniteSql.java:65)
at
org.apache.ignite.internal.sql.api.ItSqlApiBaseTest.t(ItSqlApiBaseTest.java:551)
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.util.concurrent.CompletionException: org.apache.ignite.sql.SqlException:
IGN-CMN-65535 TraceId:00bc7f29-ac6d-4ff0-a390-17d5414d600f Unable to optimize
plan due to internal error at
org.apache.ignite.internal.sql.api.IgniteSqlImpl.lambda$executeAsyncInternal$5(IgniteSqlImpl.java:379)
at
java.base/java.util.concurrent.CompletableFuture.uniExceptionally(CompletableFuture.java:990)
at
java.base/java.util.concurrent.CompletableFuture$UniExceptionally.tryFire(CompletableFuture.java:974)
at
java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:510)
at
java.base/java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1773)
at
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
at
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
at java.base/java.lang.Thread.run(Thread.java:1583)Caused by:
org.apache.ignite.sql.SqlException: IGN-CMN-65535
TraceId:00bc7f29-ac6d-4ff0-a390-17d5414d600f 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.prepare.PrepareServiceImpl.doOptimize(PrepareServiceImpl.java:578)
at
org.apache.ignite.internal.sql.engine.prepare.PrepareServiceImpl.lambda$prepareDml$7(PrepareServiceImpl.java:426)
at
java.base/java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1768)
... 3 moreCaused by: java.lang.ArithmeticException: Value
1.7976931348623157E308 out of range at
org.apache.calcite.linq4j.tree.Primitive.checkRoundedRange(Primitive.java:383)
at
org.apache.calcite.linq4j.tree.Primitive.numberValue(Primitive.java:402) at
org.apache.calcite.linq4j.tree.Expressions.constant(Expressions.java:575) at
org.apache.calcite.linq4j.tree.OptimizeShuttle.visit(OptimizeShuttle.java:305)
at
org.apache.calcite.linq4j.tree.UnaryExpression.accept(UnaryExpression.java:39)
at
org.apache.calcite.linq4j.tree.TernaryExpression.accept(TernaryExpression.java:47)
at
org.apache.calcite.linq4j.tree.Expressions.acceptExpressions(Expressions.java:3266)
at
org.apache.calcite.linq4j.tree.NewArrayExpression.accept(NewArrayExpression.java:49)
at org.apache.calcite.linq4j.tree.GotoStatement.accept(GotoStatement.java:64)
at org.apache.calcite.linq4j.tree.BlockBuilder.optimize(BlockBuilder.java:455)
at org.apache.calcite.linq4j.tree.BlockBuilder.toBlock(BlockBuilder.java:340)
at
org.apache.ignite.internal.sql.engine.exec.exp.RexExecutorImpl.compile(RexExecutorImpl.java:116)
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:157)
at
org.apache.calcite.sql2rel.SqlToRelConverter.convertQueryRecursive(SqlToRelConverter.java:3819)
at
org.apache.ignite.internal.sql.engine.prepare.IgniteSqlToRelConvertor.convertQueryRecursive(IgniteSqlToRelConvertor.java:86)
at
org.apache.calcite.sql2rel.SqlToRelConverter.convertInsert(SqlToRelConverter.java:3889)
at
org.apache.ignite.internal.sql.engine.prepare.IgniteSqlToRelConvertor.convertInsert(IgniteSqlToRelConvertor.java:117)
at
org.apache.calcite.sql2rel.SqlToRelConverter.convertQueryRecursive(SqlToRelConverter.java:3805)
at
org.apache.ignite.internal.sql.engine.prepare.IgniteSqlToRelConvertor.convertQueryRecursive(IgniteSqlToRelConvertor.java:86)
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)
... 6 more
{code}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)