[
https://issues.apache.org/jira/browse/IGNITE-19890?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Iurii Gerzhedovich updated IGNITE-19890:
----------------------------------------
Epic Link: IGNITE-22700
> Sql. VARCHAR. SUBSTRING function call with length greater than INT, triggers
> java.lang.NoSuchMethodException
> ------------------------------------------------------------------------------------------------------------
>
> Key: IGNITE-19890
> URL: https://issues.apache.org/jira/browse/IGNITE-19890
> Project: Ignite
> Issue Type: Bug
> Components: sql
> Affects Versions: 3.0.0-beta1
> Reporter: Maksim Zhuravkov
> Priority: Minor
> Labels: ignite-3
>
> The following query results in java.lang.NoSuchMethodException:
> org.apache.calcite.runtime.SqlFunctions.substring(java.lang.String, int, long)
> {code:java}
> assertQuery("SELECT Substring('abc' from 2 for 2147483650)").check();
> {code}
> *Error*
> {code:java}
> Caused by: java.lang.RuntimeException: while resolving method
> 'substring[class java.lang.String, int, long]' in class class
> org.apache.calcite.runtime.SqlFunctions
> at
> org.apache.calcite.adapter.enumerable.EnumUtils.call(EnumUtils.java:676)
> at
> org.apache.ignite.internal.sql.engine.exec.exp.RexImpTable$MethodImplementor.call(RexImpTable.java:2575)
> at
> org.apache.ignite.internal.sql.engine.exec.exp.RexImpTable$MethodImplementor.implementSafe(RexImpTable.java:2556)
> at
> org.apache.ignite.internal.sql.engine.exec.exp.RexImpTable$AbstractRexCallImplementor.genValueStatement(RexImpTable.java:3624)
> at
> org.apache.ignite.internal.sql.engine.exec.exp.RexImpTable$AbstractRexCallImplementor.implement(RexImpTable.java:3582)
> at
> org.apache.ignite.internal.sql.engine.exec.exp.RexToLixTranslator.visitCall(RexToLixTranslator.java:1252)
> at
> org.apache.ignite.internal.sql.engine.exec.exp.RexToLixTranslator.visitCall(RexToLixTranslator.java:114)
> at org.apache.calcite.rex.RexCall.accept(RexCall.java:189)
> at
> org.apache.ignite.internal.sql.engine.exec.exp.RexToLixTranslator.visitLocalRef(RexToLixTranslator.java:1128)
> at
> org.apache.ignite.internal.sql.engine.exec.exp.RexToLixTranslator.visitLocalRef(RexToLixTranslator.java:114)
> at org.apache.calcite.rex.RexLocalRef.accept(RexLocalRef.java:77)
> at
> org.apache.ignite.internal.sql.engine.exec.exp.RexToLixTranslator.translate(RexToLixTranslator.java:275)
> at
> org.apache.ignite.internal.sql.engine.exec.exp.RexToLixTranslator.translate(RexToLixTranslator.java:269)
> at
> org.apache.ignite.internal.sql.engine.exec.exp.RexToLixTranslator.translateList(RexToLixTranslator.java:968)
> at
> org.apache.ignite.internal.sql.engine.exec.exp.RexToLixTranslator.translateProjects(RexToLixTranslator.java:223)
> at
> org.apache.ignite.internal.sql.engine.exec.exp.ExpressionFactoryImpl.compile(ExpressionFactoryImpl.java:515)
> at
> org.apache.ignite.internal.sql.engine.exec.exp.ExpressionFactoryImpl.lambda$scalar$3(ExpressionFactoryImpl.java:448)
> at
> com.github.benmanes.caffeine.cache.BoundedLocalCache.lambda$doComputeIfAbsent$13(BoundedLocalCache.java:2457)
> at
> java.base/java.util.concurrent.ConcurrentHashMap.compute(ConcurrentHashMap.java:1908)
> at
> com.github.benmanes.caffeine.cache.BoundedLocalCache.doComputeIfAbsent(BoundedLocalCache.java:2455)
> at
> com.github.benmanes.caffeine.cache.BoundedLocalCache.computeIfAbsent(BoundedLocalCache.java:2438)
> at
> com.github.benmanes.caffeine.cache.LocalCache.computeIfAbsent(LocalCache.java:107)
> at
> org.apache.ignite.internal.sql.engine.exec.exp.ExpressionFactoryImpl.scalar(ExpressionFactoryImpl.java:447)
> at
> org.apache.ignite.internal.sql.engine.exec.exp.ExpressionFactoryImpl.project(ExpressionFactoryImpl.java:265)
> at
> org.apache.ignite.internal.sql.engine.exec.LogicalRelImplementor.visit(LogicalRelImplementor.java:214)
> at
> org.apache.ignite.internal.sql.engine.exec.LogicalRelImplementor.visit(LogicalRelImplementor.java:119)
> at
> org.apache.ignite.internal.sql.engine.rel.IgniteProject.accept(IgniteProject.java:87)
> at
> org.apache.ignite.internal.sql.engine.exec.LogicalRelImplementor.visit(LogicalRelImplementor.java:776)
> at
> org.apache.ignite.internal.sql.engine.exec.LogicalRelImplementor.go(LogicalRelImplementor.java:791)
> at
> org.apache.ignite.internal.sql.engine.exec.ExecutionServiceImpl$DistributedQueryManager.executeFragment(ExecutionServiceImpl.java:537)
> at
> org.apache.ignite.internal.sql.engine.exec.ExecutionServiceImpl$DistributedQueryManager.lambda$submitFragment$8(ExecutionServiceImpl.java:611)
> at
> java.base/java.util.concurrent.CompletableFuture$UniCompose.tryFire(CompletableFuture.java:1072)
> at
> java.base/java.util.concurrent.CompletableFuture$Completion.run(CompletableFuture.java:478)
> at
> org.apache.ignite.internal.sql.engine.exec.ExecutionContext.lambda$execute$0(ExecutionContext.java:315)
> ... 4 more
> Caused by: java.lang.NoSuchMethodException:
> org.apache.calcite.runtime.SqlFunctions.substring(java.lang.String, int, long)
> at java.base/java.lang.Class.getMethod(Class.java:2108)
> {code}
> *Expected behaviour*: data exception — substring error (because precision is
> defined as int). Other databases such as PostgreSQL reject this query because
> all numeric parameters of this function are INTs.
> *Additional information*: This also affects SUBSTR functions as both these
> functions rely on typecheckers that accept types of INTEGER type family.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)