This is an automated email from the ASF dual-hosted git repository.

yiguolei pushed a commit to branch branch-2.1
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/branch-2.1 by this push:
     new 45245209ef9 [Serde](Variant) support arrow serialization for varint 
type (#32809)
45245209ef9 is described below

commit 45245209ef9891c5f713910affb82098624c3b42
Author: lihangyu <15605149...@163.com>
AuthorDate: Tue Mar 26 10:50:13 2024 +0800

    [Serde](Variant) support arrow serialization for varint type (#32809)
---
 .../data_types/serde/data_type_object_serde.cpp    | 23 ++++++++++++++++++++++
 .../vec/data_types/serde/data_type_object_serde.h  |  5 +----
 2 files changed, 24 insertions(+), 4 deletions(-)

diff --git a/be/src/vec/data_types/serde/data_type_object_serde.cpp 
b/be/src/vec/data_types/serde/data_type_object_serde.cpp
index 6d4f82e845b..99a301294dc 100644
--- a/be/src/vec/data_types/serde/data_type_object_serde.cpp
+++ b/be/src/vec/data_types/serde/data_type_object_serde.cpp
@@ -19,6 +19,7 @@
 
 #include <rapidjson/stringbuffer.h>
 
+#include "common/exception.h"
 #include "common/status.h"
 #include "vec/columns/column.h"
 #include "vec/columns/column_object.h"
@@ -95,6 +96,28 @@ void DataTypeObjectSerDe::read_one_cell_from_jsonb(IColumn& 
column, const JsonbV
     variant.insert(field);
 }
 
+void DataTypeObjectSerDe::write_column_to_arrow(const IColumn& column, const 
NullMap* null_map,
+                                                arrow::ArrayBuilder* 
array_builder, int start,
+                                                int end, const 
cctz::time_zone& ctz) const {
+    const auto* var = check_and_get_column<ColumnObject>(column);
+    auto& builder = assert_cast<arrow::StringBuilder&>(*array_builder);
+    for (size_t i = start; i < end; ++i) {
+        if (null_map && (*null_map)[i]) {
+            checkArrowStatus(builder.AppendNull(), column.get_name(),
+                             array_builder->type()->name());
+        } else {
+            std::string serialized_value;
+            if (!var->serialize_one_row_to_string(i, &serialized_value)) {
+                throw doris::Exception(ErrorCode::INTERNAL_ERROR, "Failed to 
serialize variant {}",
+                                       var->dump_structure());
+            }
+            checkArrowStatus(builder.Append(serialized_value.data(),
+                                            
static_cast<int>(serialized_value.size())),
+                             column.get_name(), array_builder->type()->name());
+        }
+    }
+}
+
 } // namespace vectorized
 
 } // namespace doris
\ No newline at end of file
diff --git a/be/src/vec/data_types/serde/data_type_object_serde.h 
b/be/src/vec/data_types/serde/data_type_object_serde.h
index 4d78d67352d..c589a1af92a 100644
--- a/be/src/vec/data_types/serde/data_type_object_serde.h
+++ b/be/src/vec/data_types/serde/data_type_object_serde.h
@@ -73,10 +73,7 @@ public:
 
     void write_column_to_arrow(const IColumn& column, const NullMap* null_map,
                                arrow::ArrayBuilder* array_builder, int start, 
int end,
-                               const cctz::time_zone& ctz) const override {
-        throw doris::Exception(ErrorCode::NOT_IMPLEMENTED_ERROR,
-                               "write_column_to_arrow with type " + 
column.get_name());
-    }
+                               const cctz::time_zone& ctz) const override;
     void read_column_from_arrow(IColumn& column, const arrow::Array* 
arrow_array, int start,
                                 int end, const cctz::time_zone& ctz) const 
override {
         throw doris::Exception(ErrorCode::NOT_IMPLEMENTED_ERROR,


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to