ArroyoSystems / arroyo

Distributed stream processing engine in Rust
https://arroyo.dev
Apache License 2.0
3.8k stars 220 forks source link

Properly return a scalar value from a UDF when only input is scalar #753

Closed mwylde closed 1 month ago

mwylde commented 1 month ago

We always send inputs to UDFs as arrays, because that's what the FFI is defined over. For scalar arguments (like literals) we convert it to an array with the same length as the non-scalar arguments. However, if there is only a scalar argument we don't know how long the array is supposed to be so we create a single element array. But this causes a runtime failure when trying to use the result of the UDF in the query.

The fix is to keep track of whether the original arguments were all scalars, and if so return a scalar result back instead of an array.

Fixes #699