Describe the bug, including details regarding any error messages, version, and platform.
If an input Table or ChunkedArray is empty, the SelectKthInternal functions in TableSelector and ChunkedArraySelector have the following early return:
if (num_rows == 0) {
return Status::OK();
}
Crucially, output_ is never set in these cases. Therefore, SelectKUnstable's make_array() call:
Result<std::shared_ptr<Array>> SelectKUnstable(const Datum& datum, ...) {
ARROW_ASSIGN_OR_RAISE(Datum result,
CallFunction("select_k_unstable", {datum}, &options, ctx));
return result.make_array();
}
will fail this DCHECK_EQ:
std::shared_ptr<Array> Datum::make_array() const {
DCHECK_EQ(Datum::ARRAY, this->kind());
return MakeArray(std::get<std::shared_ptr<ArrayData>>(this->value));
}
In release builds. std::get will crash with a std::bad_variant_access
This can also be reproduced in python code by calling select_k_unstable with an empty ChunkedArray or Table respectively
Component(s)
C++
Describe the bug, including details regarding any error messages, version, and platform.
If an input
TableorChunkedArrayis empty, theSelectKthInternalfunctions inTableSelectorandChunkedArraySelectorhave the following early return:Crucially,
output_is never set in these cases. Therefore,SelectKUnstable'smake_array()call:will fail this
DCHECK_EQ:In release builds.
std::getwill crash with astd::bad_variant_accessThis can also be reproduced in python code by calling
select_k_unstablewith an emptyChunkedArrayorTablerespectivelyComponent(s)
C++