From 7c36b64c41e8c714d98aee77056c034612f8c8ba Mon Sep 17 00:00:00 2001 From: arash andishgar Date: Thu, 3 Sep 2026 04:01:41 +0330 Subject: [PATCH] Correct the logic of AppendValues Correct the logic of AppendValues --- cpp/src/arrow/array/array_test.cc | 15 +++++++++++++++ cpp/src/arrow/array/builder_adaptive.cc | 1 + 2 files changed, 16 insertions(+) diff --git a/cpp/src/arrow/array/array_test.cc b/cpp/src/arrow/array/array_test.cc index dcfe1c76c301..92f70a48b52b 100644 --- a/cpp/src/arrow/array/array_test.cc +++ b/cpp/src/arrow/array/array_test.cc @@ -3260,6 +3260,21 @@ TEST_F(TestAdaptiveUIntBuilder, TestAppendEmptyValue) { AssertArraysEqual(*result_, *ArrayFromJSON(uint8(), "[null, null, 0, 42, 0, 0]")); } +TEST_F(TestAdaptiveUIntBuilder, TestAppendValuesAfterAppend) { + ASSERT_OK(builder_->Append(1)); + ASSERT_OK(builder_->Append(2)); + ASSERT_OK(builder_->Append(3)); + ASSERT_OK(builder_->Append(4)); + std::vector values{5, 6, 7, 8}; + ASSERT_OK(builder_->AppendValues(values.data(), values.size())); + Done(); + ASSERT_OK(result_->ValidateFull()); + + std::shared_ptr expected; + ArrayFromVector({1, 2, 3, 4, 5, 6, 7, 8}, &expected); + AssertArraysEqual(*expected, *result_); +} + TEST(TestAdaptiveUIntBuilderWithStartIntSize, TestReset) { auto builder = std::make_shared( static_cast(sizeof(uint16_t)), default_memory_pool()); diff --git a/cpp/src/arrow/array/builder_adaptive.cc b/cpp/src/arrow/array/builder_adaptive.cc index 3cd5a46321f4..05c90a03a08b 100644 --- a/cpp/src/arrow/array/builder_adaptive.cc +++ b/cpp/src/arrow/array/builder_adaptive.cc @@ -349,6 +349,7 @@ Status AdaptiveUIntBuilder::AppendValuesInternal(const uint64_t* values, int64_t Status AdaptiveUIntBuilder::AppendValues(const uint64_t* values, int64_t length, const uint8_t* valid_bytes) { + RETURN_NOT_OK(CommitPendingData()); RETURN_NOT_OK(Reserve(length)); return AppendValuesInternal(values, length, valid_bytes);