[
https://issues.apache.org/jira/browse/IGNITE-27364?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Aleksey Plekhanov updated IGNITE-27364:
---------------------------------------
Description:
Function, which overrides in custom schema function declared in PUBLIC schema
throws an error if parameter is null.
Reproducer:
{code:java}
@Test
public void testFunctionOverriding() throws Exception {
IgniteCache<Integer, Employer> cache = client.getOrCreateCache(new
CacheConfiguration<Integer, Employer>("TEST")
.setSqlFunctionClasses(FunctionLibrary.class));
assertEquals(0, cache.query(new SqlFieldsQuery("SELECT
UPPER(null)")).getAll().get(0).get(0));
}
public static class FunctionLibrary {
@QuerySqlFunction
public static int upper(String s) {
return 0;
}
} {code}
Throws an error:
{noformat}
java.lang.AssertionError
at
org.apache.calcite.rel.type.RelDataTypeImpl$1.compareTypePrecedence(RelDataTypeImpl.java:342)
at
org.apache.calcite.sql.SqlUtil.lambda$filterRoutinesByTypePrecedence$6(SqlUtil.java:764)
at
java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:176)
at
java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1655)
at
java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
at
java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
at
java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913)
at
java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at
java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578)
at
org.apache.calcite.sql.SqlUtil.filterRoutinesByTypePrecedence(SqlUtil.java:766)
at
org.apache.calcite.sql.SqlUtil.lookupSubjectRoutines(SqlUtil.java:583)
at org.apache.calcite.sql.SqlUtil.lookupRoutine(SqlUtil.java:502)
at org.apache.calcite.sql.SqlFunction.deriveType(SqlFunction.java:255)
at org.apache.calcite.sql.SqlFunction.deriveType(SqlFunction.java:232)
at
org.apache.calcite.sql.validate.SqlValidatorImpl$DeriveTypeVisitor.visit(SqlValidatorImpl.java:7100)
at
org.apache.calcite.sql.validate.SqlValidatorImpl$DeriveTypeVisitor.visit(SqlValidatorImpl.java:7087)
at org.apache.calcite.sql.SqlCall.accept(SqlCall.java:175)
at
org.apache.calcite.sql.validate.SqlValidatorImpl.deriveTypeImpl(SqlValidatorImpl.java:2034)
at
org.apache.calcite.sql.validate.SqlValidatorImpl.deriveType(SqlValidatorImpl.java:2021)
at
org.apache.ignite.internal.processors.query.calcite.prepare.IgniteSqlValidator.deriveType(IgniteSqlValidator.java:557)
at
org.apache.calcite.sql.validate.SqlValidatorImpl.expandSelectItem(SqlValidatorImpl.java:513)
at
org.apache.calcite.sql.validate.SqlValidatorImpl.validateSelectList(SqlValidatorImpl.java:5148)
at
org.apache.calcite.sql.validate.SqlValidatorImpl.validateSelect(SqlValidatorImpl.java:4140)
at
org.apache.ignite.internal.processors.query.calcite.prepare.IgniteSqlValidator.validateSelect(IgniteSqlValidator.java:242)
at
org.apache.calcite.sql.validate.SelectNamespace.validateImpl(SelectNamespace.java:62)
at
org.apache.calcite.sql.validate.AbstractNamespace.validate(AbstractNamespace.java:96)
at
org.apache.calcite.sql.validate.SqlValidatorImpl.validateNamespace(SqlValidatorImpl.java:1214)
at
org.apache.ignite.internal.processors.query.calcite.prepare.IgniteSqlValidator.validateNamespace(IgniteSqlValidator.java:256)
at
org.apache.calcite.sql.validate.SqlValidatorImpl.validateQuery(SqlValidatorImpl.java:1185)
at org.apache.calcite.sql.SqlSelect.validate(SqlSelect.java:282)
at
org.apache.calcite.sql.validate.SqlValidatorImpl.validateScopedExpression(SqlValidatorImpl.java:1151)
at
org.apache.calcite.sql.validate.SqlValidatorImpl.validate(SqlValidatorImpl.java:857)
at
org.apache.ignite.internal.processors.query.calcite.prepare.IgnitePlanner.validateAndGetTypeMetadata(IgnitePlanner.java:255)
{noformat}
was:
Function, which overrides in custom schema function declared in PUBLIC schema
throws an error if parameter is null.
Reproducer:
{code:java}
@Test
public void testFunctionOverriding() throws Exception {
IgniteCache<Integer, Employer> cache = client.getOrCreateCache(new
CacheConfiguration<Integer, Employer>("TEST")
.setSqlFunctionClasses(FunctionLibrary.class));
assertEquals(0, cache.query(new SqlFieldsQuery("SELECT
UPPER(null)")).getAll().get(0).get(0));
}
public static class FunctionLibrary {
@QuerySqlFunction
public static int upper(String s) {
return 0;
}
} {code}
Throws an error:
{noformat}
java.lang.AssertionError at
org.apache.calcite.rel.type.RelDataTypeImpl$1.compareTypePrecedence(RelDataTypeImpl.java:342)
at
org.apache.calcite.sql.SqlUtil.lambda$filterRoutinesByTypePrecedence$6(SqlUtil.java:764)
at
java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:176)
at
java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1655)
at
java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
at
java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
at
java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913)
at
java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at
java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578)
at
org.apache.calcite.sql.SqlUtil.filterRoutinesByTypePrecedence(SqlUtil.java:766)
at org.apache.calcite.sql.SqlUtil.lookupSubjectRoutines(SqlUtil.java:583)
at org.apache.calcite.sql.SqlUtil.lookupRoutine(SqlUtil.java:502) at
org.apache.calcite.sql.SqlFunction.deriveType(SqlFunction.java:255) at
org.apache.calcite.sql.SqlFunction.deriveType(SqlFunction.java:232) at
org.apache.calcite.sql.validate.SqlValidatorImpl$DeriveTypeVisitor.visit(SqlValidatorImpl.java:7100)
at
org.apache.calcite.sql.validate.SqlValidatorImpl$DeriveTypeVisitor.visit(SqlValidatorImpl.java:7087)
at org.apache.calcite.sql.SqlCall.accept(SqlCall.java:175) at
org.apache.calcite.sql.validate.SqlValidatorImpl.deriveTypeImpl(SqlValidatorImpl.java:2034)
at
org.apache.calcite.sql.validate.SqlValidatorImpl.deriveType(SqlValidatorImpl.java:2021)
at
org.apache.ignite.internal.processors.query.calcite.prepare.IgniteSqlValidator.deriveType(IgniteSqlValidator.java:557)
at
org.apache.calcite.sql.validate.SqlValidatorImpl.expandSelectItem(SqlValidatorImpl.java:513)
at
org.apache.calcite.sql.validate.SqlValidatorImpl.validateSelectList(SqlValidatorImpl.java:5148)
at
org.apache.calcite.sql.validate.SqlValidatorImpl.validateSelect(SqlValidatorImpl.java:4140)
at
org.apache.ignite.internal.processors.query.calcite.prepare.IgniteSqlValidator.validateSelect(IgniteSqlValidator.java:242)
at
org.apache.calcite.sql.validate.SelectNamespace.validateImpl(SelectNamespace.java:62)
at
org.apache.calcite.sql.validate.AbstractNamespace.validate(AbstractNamespace.java:96)
at
org.apache.calcite.sql.validate.SqlValidatorImpl.validateNamespace(SqlValidatorImpl.java:1214)
at
org.apache.ignite.internal.processors.query.calcite.prepare.IgniteSqlValidator.validateNamespace(IgniteSqlValidator.java:256)
at
org.apache.calcite.sql.validate.SqlValidatorImpl.validateQuery(SqlValidatorImpl.java:1185)
at org.apache.calcite.sql.SqlSelect.validate(SqlSelect.java:282) at
org.apache.calcite.sql.validate.SqlValidatorImpl.validateScopedExpression(SqlValidatorImpl.java:1151)
at
org.apache.calcite.sql.validate.SqlValidatorImpl.validate(SqlValidatorImpl.java:857)
at
org.apache.ignite.internal.processors.query.calcite.prepare.IgnitePlanner.validateAndGetTypeMetadata(IgnitePlanner.java:255){noformat}
> Calcite engine. Overriden function with null throws an error
> ------------------------------------------------------------
>
> Key: IGNITE-27364
> URL: https://issues.apache.org/jira/browse/IGNITE-27364
> Project: Ignite
> Issue Type: Bug
> Reporter: Aleksey Plekhanov
> Assignee: Aleksey Plekhanov
> Priority: Major
> Labels: calcite, ise
>
> Function, which overrides in custom schema function declared in PUBLIC schema
> throws an error if parameter is null.
> Reproducer:
> {code:java}
> @Test
> public void testFunctionOverriding() throws Exception {
> IgniteCache<Integer, Employer> cache = client.getOrCreateCache(new
> CacheConfiguration<Integer, Employer>("TEST")
> .setSqlFunctionClasses(FunctionLibrary.class));
> assertEquals(0, cache.query(new SqlFieldsQuery("SELECT
> UPPER(null)")).getAll().get(0).get(0));
> }
> public static class FunctionLibrary {
> @QuerySqlFunction
> public static int upper(String s) {
> return 0;
> }
> } {code}
> Throws an error:
> {noformat}
> java.lang.AssertionError
> at
> org.apache.calcite.rel.type.RelDataTypeImpl$1.compareTypePrecedence(RelDataTypeImpl.java:342)
> at
> org.apache.calcite.sql.SqlUtil.lambda$filterRoutinesByTypePrecedence$6(SqlUtil.java:764)
> at
> java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:176)
> at
> java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1655)
> at
> java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
> at
> java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
> at
> java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913)
> at
> java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
> at
> java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578)
> at
> org.apache.calcite.sql.SqlUtil.filterRoutinesByTypePrecedence(SqlUtil.java:766)
> at
> org.apache.calcite.sql.SqlUtil.lookupSubjectRoutines(SqlUtil.java:583)
> at org.apache.calcite.sql.SqlUtil.lookupRoutine(SqlUtil.java:502)
> at org.apache.calcite.sql.SqlFunction.deriveType(SqlFunction.java:255)
> at org.apache.calcite.sql.SqlFunction.deriveType(SqlFunction.java:232)
> at
> org.apache.calcite.sql.validate.SqlValidatorImpl$DeriveTypeVisitor.visit(SqlValidatorImpl.java:7100)
> at
> org.apache.calcite.sql.validate.SqlValidatorImpl$DeriveTypeVisitor.visit(SqlValidatorImpl.java:7087)
> at org.apache.calcite.sql.SqlCall.accept(SqlCall.java:175)
> at
> org.apache.calcite.sql.validate.SqlValidatorImpl.deriveTypeImpl(SqlValidatorImpl.java:2034)
> at
> org.apache.calcite.sql.validate.SqlValidatorImpl.deriveType(SqlValidatorImpl.java:2021)
> at
> org.apache.ignite.internal.processors.query.calcite.prepare.IgniteSqlValidator.deriveType(IgniteSqlValidator.java:557)
> at
> org.apache.calcite.sql.validate.SqlValidatorImpl.expandSelectItem(SqlValidatorImpl.java:513)
> at
> org.apache.calcite.sql.validate.SqlValidatorImpl.validateSelectList(SqlValidatorImpl.java:5148)
> at
> org.apache.calcite.sql.validate.SqlValidatorImpl.validateSelect(SqlValidatorImpl.java:4140)
> at
> org.apache.ignite.internal.processors.query.calcite.prepare.IgniteSqlValidator.validateSelect(IgniteSqlValidator.java:242)
> at
> org.apache.calcite.sql.validate.SelectNamespace.validateImpl(SelectNamespace.java:62)
> at
> org.apache.calcite.sql.validate.AbstractNamespace.validate(AbstractNamespace.java:96)
> at
> org.apache.calcite.sql.validate.SqlValidatorImpl.validateNamespace(SqlValidatorImpl.java:1214)
> at
> org.apache.ignite.internal.processors.query.calcite.prepare.IgniteSqlValidator.validateNamespace(IgniteSqlValidator.java:256)
> at
> org.apache.calcite.sql.validate.SqlValidatorImpl.validateQuery(SqlValidatorImpl.java:1185)
> at org.apache.calcite.sql.SqlSelect.validate(SqlSelect.java:282)
> at
> org.apache.calcite.sql.validate.SqlValidatorImpl.validateScopedExpression(SqlValidatorImpl.java:1151)
> at
> org.apache.calcite.sql.validate.SqlValidatorImpl.validate(SqlValidatorImpl.java:857)
> at
> org.apache.ignite.internal.processors.query.calcite.prepare.IgnitePlanner.validateAndGetTypeMetadata(IgnitePlanner.java:255)
> {noformat}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)