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

时间:2019-07-03 15:02:32

标签: apache-drill

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

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

但是,当我使用const fs = require('fs') const stream = require('stream') app.get('/report/:chart_id/:user_id',(req, res) => { const r = fs.createReadStream('path to file') // or any other way to get a readable stream const ps = new stream.PassThrough() // <---- this makes a trick with stream error handling stream.pipeline( r, ps, // <---- this makes a trick with stream error handling (err) => { if (err) { console.log(err) // No such file or any other kind of error return res.sendStatus(400); } }) ps.pipe(res) // <---- this makes a trick with stream error handling }) 并将参数设置为可为null的类型时,将无法再调用该函数。

NullHandling.Internal
  

验证错误:(...):未找到功能签名TESTING_UDF(

的匹配项
SELECT tetsting_udf(1.23,4.56);
  

验证错误:(...):未找到函数签名TESTING_UDF(

的匹配项

使用Float8Holders和NullHandling.NULL_IF_NULL时,以上两个调用均有效。

我做错了什么?

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

1 个答案:

答案 0 :(得分:1)

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