diff --git a/cpp/src/arrow/compute/kernels/filter.cc b/cpp/src/arrow/compute/kernels/filter.cc index f985886973b..86545aa1c61 100644 --- a/cpp/src/arrow/compute/kernels/filter.cc +++ b/cpp/src/arrow/compute/kernels/filter.cc @@ -65,10 +65,8 @@ class FilterIndexSequence { // TODO(bkietz) this can be optimized static int64_t OutputSize(const BooleanArray& filter) { - auto offset = filter.offset(); - auto length = filter.length(); int64_t size = 0; - for (auto i = offset; i < offset + length; ++i) { + for (auto i = 0; i < filter.length(); ++i) { if (filter.IsNull(i) || filter.Value(i)) { ++size; } diff --git a/cpp/src/arrow/compute/kernels/filter_test.cc b/cpp/src/arrow/compute/kernels/filter_test.cc index 37f609e92d5..bb685f474dc 100644 --- a/cpp/src/arrow/compute/kernels/filter_test.cc +++ b/cpp/src/arrow/compute/kernels/filter_test.cc @@ -151,6 +151,10 @@ TYPED_TEST(TestFilterKernelWithNumeric, FilterNumeric) { this->AssertFilter("[7, 8, 9]", "[null, 1, 0]", "[null, 8]"); this->AssertFilter("[7, 8, 9]", "[1, null, 1]", "[7, null, 9]"); + this->AssertFilterArrays(ArrayFromJSON(this->type_singleton(), "[7, 8, 9]"), + ArrayFromJSON(boolean(), "[0, 1, 1, 1, 0, 1]")->Slice(3, 3), + ArrayFromJSON(this->type_singleton(), "[7, 9]")); + std::shared_ptr arr; ASSERT_RAISES(Invalid, this->Filter(this->type_singleton(), "[7, 8, 9]", "[]", &arr)); }