Skip to content

Commit

Permalink
fix
Browse files Browse the repository at this point in the history
  • Loading branch information
DerThorsten committed Oct 27, 2024
1 parent ab34b8d commit a11c003
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 20 deletions.
27 changes: 18 additions & 9 deletions include/sparrow/layout/list_layout/list_array.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
#include "sparrow/utils/memory.hpp"
#include "sparrow/utils/nullable.hpp"
#include "sparrow/array.hpp"
#include "sparrow/buffer/dynamic_bitset.hpp"

namespace sparrow
{
Expand Down Expand Up @@ -266,7 +267,7 @@ namespace sparrow

private:

static arrow_proxy create_proxy(std::uint64_t list_size, array && flat_values);
static arrow_proxy create_proxy(std::uint64_t list_size, array && flat_values, validity_bitmap && bitmaps = validity_bitmap{});

static uint64_t list_size_from_format(const std::string_view format);
std::pair<offset_type, offset_type> offset_range(size_type i) const;
Expand Down Expand Up @@ -504,7 +505,10 @@ namespace sparrow
}


inline arrow_proxy fixed_sized_list_array::create_proxy(std::uint64_t list_size, array && flat_values)
inline arrow_proxy fixed_sized_list_array::create_proxy(
std::uint64_t list_size, array && flat_values,
validity_bitmap && bitmaps
)
{
const auto size = flat_values.size() / static_cast<std::size_t>(list_size);

Expand All @@ -513,9 +517,15 @@ namespace sparrow
auto flat_schema = storage.extract_schema();
auto flat_arr = storage.extract_array();

const auto bitmap_size = (size + 7 ) / 8;
auto bitmap_ptr = new std::uint8_t[bitmap_size];
std::fill_n(bitmap_ptr, bitmap_size, static_cast<std::uint8_t>(0xFF) /*all bits 1*/);
SPARROW_ASSERT_TRUE( bitmaps.size() == size || bitmaps.size() == 0);
const auto null_count = bitmaps.empty() == 0 ? 0 : bitmaps.null_count();

if(bitmaps.size() == 0)
{
bitmaps.resize(size, true);
}



std::string format = "+w:" + std::to_string(list_size);
ArrowSchema schema = make_arrow_schema(
Expand All @@ -528,14 +538,13 @@ namespace sparrow
nullptr // dictionary

);
std::vector<buffer<std::uint8_t>> arr_buffs = {bitmaps.extract_storage()};

ArrowArray arr = make_arrow_array(
static_cast<std::int64_t>(size), // length
0, // null_count
static_cast<int64_t>(null_count),
0, // offset
std::vector<buffer<std::uint8_t>>{
{bitmap_ptr, static_cast<std::size_t>(bitmap_size)},
},
std::move(arr_buffs),
1, // n_children
new ArrowArray*[1]{new ArrowArray(std::move(flat_arr))}, // children
nullptr // dictionary
Expand Down
3 changes: 2 additions & 1 deletion include/sparrow/layout/primitive_array.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -205,7 +205,8 @@ namespace sparrow
{
const auto size = data_buffer.size();
const auto bitmap_size = bitmap.size();
const auto null_count = bitmap.null_count();
const auto null_count = bitmap.empty() == 0 ? 0 : bitmap.null_count();

SPARROW_ASSERT_TRUE(size == bitmap_size || bitmap_size == 0);

// create arrow schema and array
Expand Down
23 changes: 13 additions & 10 deletions test/test_primitive_array.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -649,18 +649,21 @@ namespace sparrow
CHECK_EQ(arr[1].value(), data[1]);
CHECK_EQ(arr[3].value(), data[3]);
}
SUBCASE("from iota")
{
primitive_array<T> arr(std::ranges::iota_view{std::size_t(0), std::size_t(4)});
REQUIRE(arr.size() == 4);
for (std::size_t i = 0; i < 4; ++i) {
REQUIRE(arr[i].has_value());
CHECK_EQ(arr[i].value(), static_cast<inner_value_type>(i));
}
}

}

TEST_CASE_TEMPLATE_APPLY(primitive_array_id, testing_types);

TEST_CASE("convenience_constructors_from_iota")
{
primitive_array<std::size_t> arr(std::ranges::iota_view{std::size_t(0), std::size_t(4)});
REQUIRE(arr.size() == 4);
for (std::size_t i = 0; i < 4; ++i) {
REQUIRE(arr[i].has_value());
CHECK_EQ(arr[i].value(), static_cast<std::size_t>(i));
}
}



}
}

0 comments on commit a11c003

Please sign in to comment.