Skip to content

Commit 63bccb8

Browse files
committed
Simplifications
1 parent 75ddddd commit 63bccb8

File tree

2 files changed

+21
-61
lines changed

2 files changed

+21
-61
lines changed

src/nanoarrow/common/array_test.cc

+10-22
Original file line numberDiff line numberDiff line change
@@ -1581,10 +1581,6 @@ TEST(ArrayTest, ArrayTestAppendToListViewArray) {
15811581

15821582
EXPECT_EQ(ArrowArrayAppendEmpty(&array, 1), NANOARROW_OK);
15831583

1584-
ASSERT_EQ(ArrowArrayAppendInt(array.children[0], 42), NANOARROW_OK);
1585-
ASSERT_EQ(ArrowArrayAppendInt(array.children[0], 555), NANOARROW_OK);
1586-
EXPECT_EQ(ArrowArrayFinishElement(&array), NANOARROW_OK);
1587-
15881584
// Make sure number of children is checked at finish
15891585
array.n_children = 0;
15901586
EXPECT_EQ(ArrowArrayFinishBuildingDefault(&array, &error), EINVAL);
@@ -1597,7 +1593,7 @@ TEST(ArrayTest, ArrayTestAppendToListViewArray) {
15971593
EXPECT_EQ(ArrowArrayFinishBuilding(&array, NANOARROW_VALIDATION_LEVEL_FULL, &error),
15981594
EINVAL);
15991595
EXPECT_STREQ(ArrowErrorMessage(&error),
1600-
"Offset: 3 + size: 2 at index: 4 exceeds length of child view: 4");
1596+
"Offset: 1 + size: 2 at index: 2 exceeds length of child view: 2");
16011597
array.children[0]->length = array.children[0]->length + 1;
16021598

16031599
EXPECT_EQ(ArrowArrayFinishBuildingDefault(&array, &error), NANOARROW_OK);
@@ -1606,10 +1602,10 @@ TEST(ArrayTest, ArrayTestAppendToListViewArray) {
16061602
auto arrow_array = ImportArray(&array, &schema);
16071603
ARROW_EXPECT_OK(arrow_array);
16081604

1609-
constexpr size_t nelems = 5;
1610-
const std::array<int32_t, nelems> offsets = {0, 1, 1, 3, 3};
1611-
const std::array<int32_t, nelems> sizes = {1, 0, 2, 0, 2};
1612-
const std::array<uint8_t, nelems> valid_bytes = {1, 0, 1, 1, 1};
1605+
constexpr size_t nelems = 4;
1606+
const std::array<int32_t, nelems> offsets = {0, 1, 1, 3};
1607+
const std::array<int32_t, nelems> sizes = {1, 0, 2, 0};
1608+
const std::array<uint8_t, nelems> valid_bytes = {1, 0, 1, 1};
16131609

16141610
auto child_builder = std::make_shared<Int64Builder>();
16151611
auto builder =
@@ -1619,8 +1615,6 @@ TEST(ArrayTest, ArrayTestAppendToListViewArray) {
16191615
ARROW_EXPECT_OK(child_builder->Append(123));
16201616
ARROW_EXPECT_OK(child_builder->Append(456));
16211617
ARROW_EXPECT_OK(child_builder->Append(789));
1622-
ARROW_EXPECT_OK(child_builder->Append(42));
1623-
ARROW_EXPECT_OK(child_builder->Append(555));
16241618
auto expected_array = builder.Finish();
16251619
ARROW_EXPECT_OK(expected_array);
16261620

@@ -1658,10 +1652,6 @@ TEST(ArrayTest, ArrayTestAppendToLargeListViewArray) {
16581652

16591653
EXPECT_EQ(ArrowArrayAppendEmpty(&array, 1), NANOARROW_OK);
16601654

1661-
ASSERT_EQ(ArrowArrayAppendInt(array.children[0], 42), NANOARROW_OK);
1662-
ASSERT_EQ(ArrowArrayAppendInt(array.children[0], 555), NANOARROW_OK);
1663-
EXPECT_EQ(ArrowArrayFinishElement(&array), NANOARROW_OK);
1664-
16651655
// Make sure number of children is checked at finish
16661656
array.n_children = 0;
16671657
EXPECT_EQ(ArrowArrayFinishBuildingDefault(&array, &error), EINVAL);
@@ -1674,7 +1664,7 @@ TEST(ArrayTest, ArrayTestAppendToLargeListViewArray) {
16741664
EXPECT_EQ(ArrowArrayFinishBuilding(&array, NANOARROW_VALIDATION_LEVEL_FULL, &error),
16751665
EINVAL);
16761666
EXPECT_STREQ(ArrowErrorMessage(&error),
1677-
"Offset: 3 + size: 2 at index: 4 exceeds length of child view: 4");
1667+
"Offset: 1 + size: 2 at index: 2 exceeds length of child view: 2");
16781668
array.children[0]->length = array.children[0]->length + 1;
16791669

16801670
EXPECT_EQ(ArrowArrayFinishBuildingDefault(&array, &error), NANOARROW_OK);
@@ -1683,10 +1673,10 @@ TEST(ArrayTest, ArrayTestAppendToLargeListViewArray) {
16831673
auto arrow_array = ImportArray(&array, &schema);
16841674
ARROW_EXPECT_OK(arrow_array);
16851675

1686-
constexpr size_t nelems = 5;
1687-
const std::array<int64_t, nelems> offsets = {0, 1, 1, 3, 3};
1688-
const std::array<int64_t, nelems> sizes = {1, 0, 2, 0, 2};
1689-
const std::array<uint8_t, nelems> valid_bytes = {1, 0, 1, 1, 1};
1676+
constexpr size_t nelems = 4;
1677+
const std::array<int64_t, nelems> offsets = {0, 1, 1, 3};
1678+
const std::array<int64_t, nelems> sizes = {1, 0, 2, 0};
1679+
const std::array<uint8_t, nelems> valid_bytes = {1, 0, 1, 1};
16901680

16911681
auto child_builder = std::make_shared<Int64Builder>();
16921682
auto builder =
@@ -1696,8 +1686,6 @@ TEST(ArrayTest, ArrayTestAppendToLargeListViewArray) {
16961686
ARROW_EXPECT_OK(child_builder->Append(123));
16971687
ARROW_EXPECT_OK(child_builder->Append(456));
16981688
ARROW_EXPECT_OK(child_builder->Append(789));
1699-
ARROW_EXPECT_OK(child_builder->Append(42));
1700-
ARROW_EXPECT_OK(child_builder->Append(555));
17011689
auto expected_array = builder.Finish();
17021690
ARROW_EXPECT_OK(expected_array);
17031691

src/nanoarrow/common/inline_array.h

+11-39
Original file line numberDiff line numberDiff line change
@@ -801,50 +801,22 @@ static inline ArrowErrorCode ArrowArrayFinishElement(struct ArrowArray* array) {
801801
return EOVERFLOW;
802802
}
803803

804-
const int32_t last_valid_pos = (int32_t)private_data->list_view_offset;
805-
int32_t offset;
806-
if (array->length == 0) {
807-
offset = 0;
808-
} else {
809-
const struct ArrowBuffer *offsets_buf, *sizes_buf;
810-
offsets_buf = ArrowArrayBuffer(array, 1);
811-
sizes_buf = ArrowArrayBuffer(array, 2);
812-
NANOARROW_DCHECK(offsets_buf->size_bytes == sizes_buf->size_bytes);
813-
struct ArrowBufferView offsets, sizes;
814-
offsets.data.data = offsets_buf->data;
815-
sizes.data.data = sizes_buf->data;
816-
const int32_t prev_offset = offsets.data.as_int32[last_valid_pos];
817-
const int32_t prev_size = sizes.data.as_int32[last_valid_pos];
818-
offset = prev_offset + prev_size;
819-
}
820-
NANOARROW_RETURN_NOT_OK(ArrowBufferAppendInt32(ArrowArrayBuffer(array, 1), offset));
821-
NANOARROW_RETURN_NOT_OK(ArrowBufferAppendInt32(ArrowArrayBuffer(array, 2),
822-
(int32_t)child_length - offset));
823-
private_data->list_view_offset = (int32_t)array->length;
804+
const int32_t last_valid_offset = (int32_t)private_data->list_view_offset;
805+
NANOARROW_RETURN_NOT_OK(
806+
ArrowBufferAppendInt32(ArrowArrayBuffer(array, 1), last_valid_offset));
807+
NANOARROW_RETURN_NOT_OK(ArrowBufferAppendInt32(
808+
ArrowArrayBuffer(array, 2), (int32_t)child_length - last_valid_offset));
809+
private_data->list_view_offset = (int32_t)child_length;
824810
break;
825811
}
826812
case NANOARROW_TYPE_LARGE_LIST_VIEW: {
827813
child_length = array->children[0]->length;
828-
const int32_t last_valid_pos = (int32_t)private_data->list_view_offset;
829-
int64_t offset;
830-
if (array->length == 0) {
831-
offset = 0;
832-
} else {
833-
const struct ArrowBuffer *offsets_buf, *sizes_buf;
834-
offsets_buf = ArrowArrayBuffer(array, 1);
835-
sizes_buf = ArrowArrayBuffer(array, 2);
836-
NANOARROW_DCHECK(offsets_buf->size_bytes == sizes_buf->size_bytes);
837-
struct ArrowBufferView offsets, sizes;
838-
offsets.data.data = offsets_buf->data;
839-
sizes.data.data = sizes_buf->data;
840-
const int64_t prev_offset = offsets.data.as_int64[last_valid_pos];
841-
const int64_t prev_size = sizes.data.as_int64[last_valid_pos];
842-
offset = prev_offset + prev_size;
843-
}
844-
NANOARROW_RETURN_NOT_OK(ArrowBufferAppendInt64(ArrowArrayBuffer(array, 1), offset));
814+
const int64_t last_valid_offset = private_data->list_view_offset;
845815
NANOARROW_RETURN_NOT_OK(
846-
ArrowBufferAppendInt64(ArrowArrayBuffer(array, 2), child_length - offset));
847-
private_data->list_view_offset = array->length;
816+
ArrowBufferAppendInt64(ArrowArrayBuffer(array, 1), last_valid_offset));
817+
NANOARROW_RETURN_NOT_OK(ArrowBufferAppendInt64(ArrowArrayBuffer(array, 2),
818+
child_length - last_valid_offset));
819+
private_data->list_view_offset = child_length;
848820
break;
849821
}
850822

0 commit comments

Comments
 (0)