diff --git a/cpp/src/binaryop/binaryop.cpp b/cpp/src/binaryop/binaryop.cpp index daec9b5b199..8482769b569 100644 --- a/cpp/src/binaryop/binaryop.cpp +++ b/cpp/src/binaryop/binaryop.cpp @@ -217,6 +217,8 @@ std::unique_ptr binary_operation(LhsType const& lhs, auto out_view = out->mutable_view(); cudf::binops::compiled::binary_operation(out_view, lhs, rhs, op, stream); + // TODO: consider having the binary_operation count nulls instead + out->set_null_count(cudf::detail::null_count(out_view.null_mask(), 0, out->size(), stream)); return out; } } // namespace compiled @@ -373,6 +375,7 @@ std::unique_ptr binary_operation(column_view const& lhs, auto out_view = out->mutable_view(); binops::jit::binary_operation(out_view, lhs, rhs, ptx, stream); + out->set_null_count(cudf::detail::null_count(out_view.null_mask(), 0, out->size(), stream)); return out; } } // namespace detail diff --git a/cpp/src/copying/copy_range.cu b/cpp/src/copying/copy_range.cu index 9a506c866bc..64599716765 100644 --- a/cpp/src/copying/copy_range.cu +++ b/cpp/src/copying/copy_range.cu @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022, NVIDIA CORPORATION. + * Copyright (c) 2019-2023, NVIDIA CORPORATION. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -108,6 +108,7 @@ struct out_of_place_copy_range_dispatch { if (source_end != source_begin) { // otherwise no-op auto ret_view = p_ret->mutable_view(); in_place_copy_range(source, ret_view, source_begin, source_end, target_begin, stream); + p_ret->set_null_count(ret_view.null_count()); } return p_ret; diff --git a/cpp/src/filling/fill.cu b/cpp/src/filling/fill.cu index a747cc195ae..342392c773e 100644 --- a/cpp/src/filling/fill.cu +++ b/cpp/src/filling/fill.cu @@ -122,6 +122,7 @@ struct out_of_place_fill_range_dispatch { auto ret_view = p_ret->mutable_view(); using DeviceType = cudf::device_storage_type_t; in_place_fill(ret_view, begin, end, value, stream); + p_ret->set_null_count(ret_view.null_count()); } return p_ret; diff --git a/cpp/tests/copying/purge_nonempty_nulls_tests.cpp b/cpp/tests/copying/purge_nonempty_nulls_tests.cpp index ea23a1c1069..a196f2ec980 100644 --- a/cpp/tests/copying/purge_nonempty_nulls_tests.cpp +++ b/cpp/tests/copying/purge_nonempty_nulls_tests.cpp @@ -75,6 +75,7 @@ TEST_F(PurgeNonEmptyNullsTest, SingleLevelList) // Set nullmask, post construction. cudf::detail::set_null_mask( input->mutable_view().null_mask(), 2, 3, false, cudf::get_default_stream()); + input->set_null_count(1); EXPECT_TRUE(cudf::may_have_nonempty_nulls(*input)); EXPECT_TRUE(cudf::has_nonempty_nulls(*input)); @@ -158,6 +159,7 @@ TEST_F(PurgeNonEmptyNullsTest, TwoLevelList) // Set nullmask, post construction. cudf::detail::set_null_mask( input->mutable_view().null_mask(), 3, 4, false, cudf::get_default_stream()); + input->set_null_count(1); EXPECT_TRUE(cudf::may_have_nonempty_nulls(*input)); EXPECT_TRUE(cudf::has_nonempty_nulls(*input)); @@ -213,6 +215,7 @@ TEST_F(PurgeNonEmptyNullsTest, ThreeLevelList) // Set nullmask, post construction. cudf::detail::set_null_mask( input->mutable_view().null_mask(), 3, 4, false, cudf::get_default_stream()); + input->set_null_count(1); EXPECT_TRUE(cudf::may_have_nonempty_nulls(*input)); EXPECT_TRUE(cudf::has_nonempty_nulls(*input)); @@ -267,6 +270,7 @@ TEST_F(PurgeNonEmptyNullsTest, ListOfStrings) // Set nullmask, post construction. cudf::detail::set_null_mask( input->mutable_view().null_mask(), 2, 3, false, cudf::get_default_stream()); + input->set_null_count(1); EXPECT_TRUE(cudf::may_have_nonempty_nulls(*input)); EXPECT_TRUE(cudf::has_nonempty_nulls(*input)); @@ -332,6 +336,7 @@ TEST_F(PurgeNonEmptyNullsTest, UnsanitizedListOfUnsanitizedStrings) // Set strings nullmask, post construction. cudf::set_null_mask(strings->mutable_view().null_mask(), 7, 8, false); + strings->set_null_count(1); EXPECT_TRUE(cudf::may_have_nonempty_nulls(*strings)); EXPECT_TRUE(cudf::has_nonempty_nulls(*strings)); @@ -358,6 +363,7 @@ TEST_F(PurgeNonEmptyNullsTest, UnsanitizedListOfUnsanitizedStrings) // Set lists nullmask, post construction. cudf::detail::set_null_mask( lists->mutable_view().null_mask(), 2, 3, false, cudf::get_default_stream()); + lists->set_null_count(1); EXPECT_TRUE(cudf::may_have_nonempty_nulls(*lists)); EXPECT_TRUE(cudf::has_nonempty_nulls(*lists));