You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@arrow.apache.org by pa...@apache.org on 2024/01/27 18:24:18 UTC
(arrow-nanoarrow) branch main updated: fix: Issue with appending NULLs to IntervalArray (#376)
This is an automated email from the ASF dual-hosted git repository.
paleolimbot pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow-nanoarrow.git
The following commit(s) were added to refs/heads/main by this push:
new dab87aae fix: Issue with appending NULLs to IntervalArray (#376)
dab87aae is described below
commit dab87aaea4c2c05d24b745d58e50726bd0553452
Author: William Ayd <wi...@icloud.com>
AuthorDate: Sat Jan 27 13:24:13 2024 -0500
fix: Issue with appending NULLs to IntervalArray (#376)
closes #375
credit to @jorisvandenbossche for root-causing the issue here
---
src/nanoarrow/array_inline.h | 4 ++++
src/nanoarrow/array_test.cc | 23 ++++++++++++++++++-----
2 files changed, 22 insertions(+), 5 deletions(-)
diff --git a/src/nanoarrow/array_inline.h b/src/nanoarrow/array_inline.h
index fa62f324..16e4c52e 100644
--- a/src/nanoarrow/array_inline.h
+++ b/src/nanoarrow/array_inline.h
@@ -570,6 +570,10 @@ static inline ArrowErrorCode ArrowArrayAppendInterval(struct ArrowArray* array,
return EINVAL;
}
+ if (private_data->bitmap.buffer.data != NULL) {
+ NANOARROW_RETURN_NOT_OK(ArrowBitmapAppend(ArrowArrayValidityBitmap(array), 1, 1));
+ }
+
array->length++;
return NANOARROW_OK;
}
diff --git a/src/nanoarrow/array_test.cc b/src/nanoarrow/array_test.cc
index 739e1d8f..8bdcdce4 100644
--- a/src/nanoarrow/array_test.cc
+++ b/src/nanoarrow/array_test.cc
@@ -968,16 +968,26 @@ TEST(ArrayTest, ArrayTestAppendToIntervalArrayMonthDayNano) {
EXPECT_EQ(ArrowArrayAppendInterval(&array, &interval), NANOARROW_OK);
EXPECT_EQ(ArrowArrayAppendNull(&array, 1), NANOARROW_OK);
+ struct ArrowInterval second;
+ ArrowIntervalInit(&second, ArrowType::NANOARROW_TYPE_INTERVAL_MONTH_DAY_NANO);
+ second.months = 1;
+ second.days = 1;
+ second.ns = 1;
+ EXPECT_EQ(ArrowArrayAppendInterval(&array, &second), NANOARROW_OK);
+ EXPECT_EQ(ArrowArrayAppendNull(&array, 1), NANOARROW_OK);
+
EXPECT_EQ(ArrowArrayFinishBuildingDefault(&array, nullptr), NANOARROW_OK);
- EXPECT_EQ(array.length, 2);
- EXPECT_EQ(array.null_count, 1);
+ EXPECT_EQ(array.length, 4);
+ EXPECT_EQ(array.null_count, 2);
auto data_buffer = reinterpret_cast<const uint8_t*>(array.buffers[1]);
- EXPECT_EQ(memcmp(data_buffer, &interval.months, 4), 0);
- EXPECT_EQ(memcmp(data_buffer + sizeof(interval.months), &interval.days, 4), 0);
+ EXPECT_EQ(memcmp(data_buffer, &interval.months, sizeof(interval.months)), 0);
+ EXPECT_EQ(memcmp(data_buffer + sizeof(interval.months), &interval.days,
+ sizeof(interval.days)),
+ 0);
EXPECT_EQ(memcmp(data_buffer + sizeof(interval.months) + sizeof(interval.days),
- &interval.ns, 8),
+ &interval.ns, sizeof(interval.ns)),
0);
auto arrow_array = ImportArray(&array, month_day_nano_interval());
@@ -987,6 +997,9 @@ TEST(ArrayTest, ArrayTestAppendToIntervalArrayMonthDayNano) {
MonthDayNanoIntervalType::MonthDayNanos mdn = {2, 12, 42};
ARROW_EXPECT_OK(builder.Append(mdn));
ARROW_EXPECT_OK(builder.AppendNulls(1));
+ MonthDayNanoIntervalType::MonthDayNanos ones = {1, 1, 1};
+ ARROW_EXPECT_OK(builder.Append(ones));
+ ARROW_EXPECT_OK(builder.AppendNulls(1));
auto expected_array = builder.Finish();
EXPECT_TRUE(arrow_array.ValueUnsafe()->Equals(expected_array.ValueUnsafe()));