This is an automated email from the ASF dual-hosted git repository. zouxinyi pushed a commit to branch branch-3.0 in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-3.0 by this push: new 38799405c68 branch-3.0: [fix](arrow-flight-sql) Fix Doris NULL column conversion to arrow batch #43929 (#44231) 38799405c68 is described below commit 38799405c6872139b482aad142eec78a3e43b296 Author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> AuthorDate: Tue Dec 3 17:40:45 2024 +0800 branch-3.0: [fix](arrow-flight-sql) Fix Doris NULL column conversion to arrow batch #43929 (#44231) Cherry-picked from #43929 Co-authored-by: Xinyi Zou <zouxi...@selectdb.com> --- .../vec/data_types/serde/data_type_number_serde.cpp | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/be/src/vec/data_types/serde/data_type_number_serde.cpp b/be/src/vec/data_types/serde/data_type_number_serde.cpp index efa41e346bf..f4fb6bbbb1f 100644 --- a/be/src/vec/data_types/serde/data_type_number_serde.cpp +++ b/be/src/vec/data_types/serde/data_type_number_serde.cpp @@ -78,12 +78,21 @@ void DataTypeNumberSerDe<T>::write_column_to_arrow(const IColumn& column, const auto arrow_null_map = revert_null_map(null_map, start, end); auto arrow_null_map_data = arrow_null_map.empty() ? nullptr : arrow_null_map.data(); if constexpr (std::is_same_v<T, UInt8>) { - ARROW_BUILDER_TYPE& builder = assert_cast<ARROW_BUILDER_TYPE&>(*array_builder); - checkArrowStatus( - builder.AppendValues(reinterpret_cast<const uint8_t*>(col_data.data() + start), - end - start, - reinterpret_cast<const uint8_t*>(arrow_null_map_data)), - column.get_name(), array_builder->type()->name()); + auto* null_builder = dynamic_cast<arrow::NullBuilder*>(array_builder); + if (null_builder) { + for (size_t i = start; i < end; ++i) { + checkArrowStatus(null_builder->AppendNull(), column.get_name(), + null_builder->type()->name()); + } + } else { + ARROW_BUILDER_TYPE& builder = assert_cast<ARROW_BUILDER_TYPE&>(*array_builder); + checkArrowStatus( + builder.AppendValues(reinterpret_cast<const uint8_t*>(col_data.data() + start), + end - start, + reinterpret_cast<const uint8_t*>(arrow_null_map_data)), + column.get_name(), array_builder->type()->name()); + } + } else if constexpr (std::is_same_v<T, Int128>) { auto& string_builder = assert_cast<arrow::StringBuilder&>(*array_builder); for (size_t i = start; i < end; ++i) { --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org