Я пытаюсь реализовать пользовательскую функцию для Apache Drill.
Функция принимает аргументы с плавающей запятой ( десятичные дроби не работают ), и они должны быть обнуляемыми, чтобы возвращать нули.
Однако, когда я использую NullHandling.Internal
и устанавливаю параметры как типы, допускающие значение NULL, функция больше не может быть вызвана.
SELECT tetsting_udf(1.23,4.56);
ОШИБКА ВАЛИДАЦИИ: (...): не найдено совпадений для сигнатуры функции TESTING_UDF (, )
SELECT tetsting_udf(cast(1.23 as float), cast(4.56 as float));
ОШИБКА ВАЛИДАЦИИ: (...): не найдено совпадений для сигнатуры функции TESTING_UDF (, )
Когда используются 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
}
}