From ffda81da9bef3a07f54b801e3dcdb01888052bc5 Mon Sep 17 00:00:00 2001 From: ZhangHuiGui <2689496754@qq.com> Date: Wed, 26 Jun 2024 17:41:13 +0800 Subject: [PATCH] keep ChunkedArray same constraint with Array in NullGeneration --- cpp/src/arrow/compute/exec.cc | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/cpp/src/arrow/compute/exec.cc b/cpp/src/arrow/compute/exec.cc index 3c9bb4c307a4d..a314fdcdd5e30 100644 --- a/cpp/src/arrow/compute/exec.cc +++ b/cpp/src/arrow/compute/exec.cc @@ -511,22 +511,19 @@ struct NullGeneralization { } static type Get(const ChunkedArray& chunk_array) { - if (chunk_array.num_chunks() == 0) { - return ALL_VALID; - } - if (chunk_array.null_count() == chunk_array.length()) { - return ALL_NULL; - } - + std::optional current_gen; for (const auto& chunk : chunk_array.chunks()) { - ExecValue value; - value.SetArray(*chunk->data()); - auto null_gen = Get(value); - if (null_gen == ALL_NULL || null_gen == PERHAPS_NULL) { + if (chunk->length() == 0) { + continue; + } + + const auto& chunk_gen = Get(chunk); + if (current_gen.has_value() && chunk_gen != *current_gen) { return PERHAPS_NULL; } + current_gen = chunk_gen; } - return ALL_VALID; + return current_gen.value_or(ALL_VALID); } static type Get(const Datum& datum) {