lincoln lee created FLINK-32986:
-----------------------------------

             Summary: The new createTemporaryFunction has some regression of 
type inference compare to the deprecated registerFunction
                 Key: FLINK-32986
                 URL: https://issues.apache.org/jira/browse/FLINK-32986
             Project: Flink
          Issue Type: Technical Debt
          Components: Table SQL / API
    Affects Versions: 1.17.1, 1.18.0
            Reporter: lincoln lee


Current `LookupJoinITCase#testJoinTemporalTableWithUdfFilter` uses a legacy 
form function registration:
{code}
tEnv.registerFunction("add", new TestAddWithOpen)
{code}
it works fine with the SQL call `add(T.id, 2) > 3` but fails when swith to the 
new api:
{code}
tEnv.createTemporaryFunction("add", classOf[TestAddWithOpen])
// or this
tEnv.createTemporaryFunction("add", new TestAddWithOpen)
{code}
exception:
{code}
Caused by: org.apache.flink.table.api.ValidationException: Invalid function 
call:
default_catalog.default_database.add(BIGINT, INT NOT NULL)
        at 
org.apache.flink.table.types.inference.TypeInferenceUtil.createInvalidCallException(TypeInferenceUtil.java:193)
        at 
org.apache.flink.table.planner.functions.inference.TypeInferenceOperandChecker.checkOperandTypes(TypeInferenceOperandChecker.java:89)
        at 
org.apache.calcite.sql.SqlOperator.checkOperandTypes(SqlOperator.java:753)
        at 
org.apache.calcite.sql.SqlOperator.validateOperands(SqlOperator.java:499)
        at org.apache.calcite.sql.SqlFunction.deriveType(SqlFunction.java:335)
        at org.apache.calcite.sql.SqlFunction.deriveType(SqlFunction.java:231)
        at 
org.apache.calcite.sql.validate.SqlValidatorImpl$DeriveTypeVisitor.visit(SqlValidatorImpl.java:6302)
        at 
org.apache.calcite.sql.validate.SqlValidatorImpl$DeriveTypeVisitor.visit(SqlValidatorImpl.java:6287)
        at org.apache.calcite.sql.SqlCall.accept(SqlCall.java:161)
        at 
org.apache.calcite.sql.validate.SqlValidatorImpl.deriveTypeImpl(SqlValidatorImpl.java:1869)
        at 
org.apache.calcite.sql.validate.SqlValidatorImpl.deriveType(SqlValidatorImpl.java:1860)
        at 
org.apache.calcite.sql.type.SqlTypeUtil.deriveType(SqlTypeUtil.java:200)
        at 
org.apache.calcite.sql.type.InferTypes.lambda$static$0(InferTypes.java:47)
        at 
org.apache.calcite.sql.validate.SqlValidatorImpl.inferUnknownTypes(SqlValidatorImpl.java:2050)
        at 
org.apache.calcite.sql.validate.SqlValidatorImpl.inferUnknownTypes(SqlValidatorImpl.java:2055)
        at 
org.apache.calcite.sql.validate.SqlValidatorImpl.validateWhereOrOn(SqlValidatorImpl.java:4338)
        at 
org.apache.calcite.sql.validate.SqlValidatorImpl.validateJoin(SqlValidatorImpl.java:3410)
        at 
org.apache.flink.table.planner.calcite.FlinkCalciteSqlValidator.validateJoin(FlinkCalciteSqlValidator.java:154)
        at 
org.apache.calcite.sql.validate.SqlValidatorImpl.validateFrom(SqlValidatorImpl.java:3282)
        at 
org.apache.calcite.sql.validate.SqlValidatorImpl.validateSelect(SqlValidatorImpl.java:3603)
        at 
org.apache.calcite.sql.validate.SelectNamespace.validateImpl(SelectNamespace.java:64)
        at 
org.apache.calcite.sql.validate.AbstractNamespace.validate(AbstractNamespace.java:89)
        at 
org.apache.calcite.sql.validate.SqlValidatorImpl.validateNamespace(SqlValidatorImpl.java:1050)
        at 
org.apache.calcite.sql.validate.SqlValidatorImpl.validateQuery(SqlValidatorImpl.java:1025)
        at org.apache.calcite.sql.SqlSelect.validate(SqlSelect.java:248)
        at 
org.apache.calcite.sql.validate.SqlValidatorImpl.validateScopedExpression(SqlValidatorImpl.java:1000)
        at 
org.apache.calcite.sql.validate.SqlValidatorImpl.validate(SqlValidatorImpl.java:749)
        at 
org.apache.flink.table.planner.calcite.FlinkPlannerImpl.org$apache$flink$table$planner$calcite$FlinkPlannerImpl$$validate(FlinkPlannerImpl.scala:196)
        ... 49 more
Caused by: org.apache.flink.table.api.ValidationException: Invalid input 
arguments. Expected signatures are:
default_catalog.default_database.add(a BIGINT NOT NULL, b INT NOT NULL)
default_catalog.default_database.add(a BIGINT NOT NULL, b BIGINT NOT NULL)
        at 
org.apache.flink.table.types.inference.TypeInferenceUtil.createInvalidInputException(TypeInferenceUtil.java:180)
        at 
org.apache.flink.table.planner.functions.inference.TypeInferenceOperandChecker.checkOperandTypesOrError(TypeInferenceOperandChecker.java:124)
        at 
org.apache.flink.table.planner.functions.inference.TypeInferenceOperandChecker.checkOperandTypes(TypeInferenceOperandChecker.java:86)
        ... 75 more
Caused by: org.apache.flink.table.api.ValidationException: Invalid input 
arguments.
        at 
org.apache.flink.table.types.inference.TypeInferenceUtil.inferInputTypes(TypeInferenceUtil.java:442)
        at 
org.apache.flink.table.types.inference.TypeInferenceUtil.adaptArguments(TypeInferenceUtil.java:123)
        at 
org.apache.flink.table.types.inference.TypeInferenceUtil.adaptArguments(TypeInferenceUtil.java:100)
        at 
org.apache.flink.table.planner.functions.inference.TypeInferenceOperandChecker.checkOperandTypesOrError(TypeInferenceOperandChecker.java:122)
{code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to