当 NullHandling 设置为 INTERNAL 时,找不到函数签名的匹配项

No match found for function signature when NullHandling set to INTERNAL

我正在尝试为 Apache Drill 实现用户定义的函数。

该函数采用浮点参数 (decimals do not work),并且它们必须可以为空才能 return 为零。

但是,当我使用NullHandling.Internal并将参数设置为可空类型时,该函数将无法再被调用。

SELECT tetsting_udf(1.23,4.56);

VALIDATION ERROR: (...): No match found for function signature TESTING_UDF(<DECIMAL>, <DECIMAL>)

SELECT tetsting_udf(cast(1.23 as float), cast(4.56 as float));

VALIDATION ERROR: (...): No match found for function signature TESTING_UDF(<FLOAT>, <FLOAT>)

当使用 Float8Holders 和 NullHandling.NULL_IF_NULL 时,上面的两个调用都有效。

我做错了什么?


@FunctionTemplate(
        name = "testing_udf",
        scope = FunctionTemplate.FunctionScope.SIMPLE,
        nulls = FunctionTemplate.NullHandling.INTERNAL
)
public class TestingFunction implements DrillSimpleFunc {

     @Param
         NullableFloat8Holder numberA;
     @Param
         NullableFloat8Holder numberB;
     @Output

     Float8Holder out;

     public void setup() {
     }

     public void eval() {
         // Whatever
     }
}

对于指定 FunctionTemplate.NullHandling.INTERNAL 的情况,应指定具有所有可空性组合的 UDF 实现。对于您的情况,您应该指定接受 (Float8HolderFloat8Holder)、(NullableFloat8HolderNullableFloat8Holder)、(Float8HolderNullableFloat8Holder ), (NullableFloat8HolderFloat8Holder).