[ 
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)

Reply via email to