I'm trying to implement something along the lines of "X if Y > Z", but
treating the case of Y or Z as null as "false". Interestingly, this is
difficult with the way the kernels are created:

1. `Y > Z` will treat `null > ???` as null.
"Perform left > right operation on two arrays. Non-null values are greater
than null values."

2. Ok, so maybe we write that as `(Y > Z) && not_null(Y)`.
"If either left or right value is null then the result is also null."

Oh. So if the LHS is null, there is *no way* to get a boolean array with a
non-null value.

3. Ok, I'll go write my own operator to do this (`null_to_false` or
something like that).
I can do this, but it requires iterating over the booleans and combining
them. It seems like it would be easy to do using `buffer_bin_and`, but that
is only visible within the Arrow crate.

First, am I missing something with the above analysis? Is there some way to
provide non-null values for a boolean array that has nulls?

Second, if not any thoughts on a solution? The two options I see (without
changing behavior of existing kernels) would be:
1. Add kernel(s) that provide a value in place of `null` (a general case of
the `null_to_false`). These could be specialized in the boolean case to use
the `buffer_bin_and` as appropriate.
2. Expose the `buffer_bin_and` and `buffer_bin_or` methods so that I (as a
user) can write the kernel myself.

Reply via email to