Aleksey Plekhanov created IGNITE-27364:
------------------------------------------
Summary: 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
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)