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

Reply via email to