Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion cpp/src/arrow/compute/compute-test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -697,7 +697,7 @@ TEST_F(TestCast, PreallocatedMemory) {
out_data->buffers.push_back(out_values);

Datum out(out_data);
ASSERT_OK(kernel->Call(&this->ctx_, *arr->data(), &out));
ASSERT_OK(kernel->Call(&this->ctx_, Datum(arr), &out));

// Buffer address unchanged
ASSERT_EQ(out_values.get(), out_data->buffers[1].get());
Expand Down
2 changes: 1 addition & 1 deletion cpp/src/arrow/compute/kernel.h
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ struct ARROW_EXPORT Datum {
/// \brief An array-valued function of a single input argument
class ARROW_EXPORT UnaryKernel : public OpKernel {
public:
virtual Status Call(FunctionContext* ctx, const ArrayData& input, Datum* out) = 0;
virtual Status Call(FunctionContext* ctx, const Datum& input, Datum* out) = 0;
};

} // namespace compute
Expand Down
11 changes: 7 additions & 4 deletions cpp/src/arrow/compute/kernels/cast.cc
Original file line number Diff line number Diff line change
Expand Up @@ -740,20 +740,23 @@ class CastKernel : public UnaryKernel {
can_pre_allocate_values_(can_pre_allocate_values),
out_type_(out_type) {}

Status Call(FunctionContext* ctx, const ArrayData& input, Datum* out) override {
Status Call(FunctionContext* ctx, const Datum& input, Datum* out) override {
DCHECK_EQ(Datum::ARRAY, input.kind());

const ArrayData& in_data = *input.array();
ArrayData* result;

if (out->kind() == Datum::NONE) {
out->value = std::make_shared<ArrayData>(out_type_, input.length);
out->value = std::make_shared<ArrayData>(out_type_, in_data.length);
}

result = out->array().get();

if (!is_zero_copy_) {
RETURN_NOT_OK(
AllocateIfNotPreallocated(ctx, input, can_pre_allocate_values_, result));
AllocateIfNotPreallocated(ctx, in_data, can_pre_allocate_values_, result));
}
func_(ctx, options_, input, result);
func_(ctx, options_, in_data, result);

RETURN_IF_ERROR(ctx);
return Status::OK();
Expand Down
5 changes: 3 additions & 2 deletions cpp/src/arrow/compute/kernels/hash.cc
Original file line number Diff line number Diff line change
Expand Up @@ -658,8 +658,9 @@ class HashKernelImpl : public HashKernel {
explicit HashKernelImpl(std::unique_ptr<HashTable> hasher)
: hasher_(std::move(hasher)) {}

Status Call(FunctionContext* ctx, const ArrayData& input, Datum* out) override {
RETURN_NOT_OK(Append(ctx, input));
Status Call(FunctionContext* ctx, const Datum& input, Datum* out) override {
DCHECK_EQ(Datum::ARRAY, input.kind());
RETURN_NOT_OK(Append(ctx, *input.array()));
return Flush(out);
}

Expand Down
4 changes: 2 additions & 2 deletions cpp/src/arrow/compute/kernels/util-internal.cc
Original file line number Diff line number Diff line change
Expand Up @@ -34,13 +34,13 @@ Status InvokeUnaryArrayKernel(FunctionContext* ctx, UnaryKernel* kernel,
const Datum& value, std::vector<Datum>* outputs) {
if (value.kind() == Datum::ARRAY) {
Datum output;
RETURN_NOT_OK(kernel->Call(ctx, *value.array(), &output));
RETURN_NOT_OK(kernel->Call(ctx, value, &output));
outputs->push_back(output);
} else if (value.kind() == Datum::CHUNKED_ARRAY) {
const ChunkedArray& array = *value.chunked_array();
for (int i = 0; i < array.num_chunks(); i++) {
Datum output;
RETURN_NOT_OK(kernel->Call(ctx, *(array.chunk(i)->data()), &output));
RETURN_NOT_OK(kernel->Call(ctx, Datum(array.chunk(i)), &output));
outputs->push_back(output);
}
} else {
Expand Down