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 <[email protected]>
---
.../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: [email protected]
For additional commands, e-mail: [email protected]