You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by yi...@apache.org on 2022/07/11 06:01:03 UTC

[doris] branch master updated: [bugfix]ColumnDecimal missed some interfaces about pre-serialization (#10751)

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

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


The following commit(s) were added to refs/heads/master by this push:
     new 277a7dd97e [bugfix]ColumnDecimal missed some interfaces about pre-serialization (#10751)
277a7dd97e is described below

commit 277a7dd97e11e7e90d8e61bd4e2fb43eb8bcc1ab
Author: Jerry Hu <mr...@gmail.com>
AuthorDate: Mon Jul 11 14:00:58 2022 +0800

    [bugfix]ColumnDecimal missed some interfaces about pre-serialization (#10751)
---
 be/src/vec/columns/column_decimal.cpp | 26 ++++++++++++++++++++++++++
 be/src/vec/columns/column_decimal.h   | 10 ++++++++++
 2 files changed, 36 insertions(+)

diff --git a/be/src/vec/columns/column_decimal.cpp b/be/src/vec/columns/column_decimal.cpp
index 5dc30a182d..c50b7938be 100644
--- a/be/src/vec/columns/column_decimal.cpp
+++ b/be/src/vec/columns/column_decimal.cpp
@@ -58,6 +58,32 @@ const char* ColumnDecimal<T>::deserialize_and_insert_from_arena(const char* pos)
     return pos + sizeof(T);
 }
 
+template <typename T>
+size_t ColumnDecimal<T>::get_max_row_byte_size() const {
+    return sizeof(T);
+}
+
+template <typename T>
+void ColumnDecimal<T>::serialize_vec(std::vector<StringRef>& keys, size_t num_rows,
+                                     size_t max_row_byte_size) const {
+    for (size_t i = 0; i < num_rows; ++i) {
+        memcpy(const_cast<char*>(keys[i].data + keys[i].size), &data[i], sizeof(T));
+        keys[i].size += sizeof(T);
+    }
+}
+
+template <typename T>
+void ColumnDecimal<T>::serialize_vec_with_null_map(std::vector<StringRef>& keys, size_t num_rows,
+                                                   const uint8_t* null_map,
+                                                   size_t max_row_byte_size) const {
+    for (size_t i = 0; i < num_rows; ++i) {
+        if (null_map[i] == 0) {
+            memcpy(const_cast<char*>(keys[i].data + keys[i].size), &data[i], sizeof(T));
+            keys[i].size += sizeof(T);
+        }
+    }
+}
+
 template <typename T>
 UInt64 ColumnDecimal<T>::get64(size_t n) const {
     if constexpr (sizeof(T) > sizeof(UInt64)) {
diff --git a/be/src/vec/columns/column_decimal.h b/be/src/vec/columns/column_decimal.h
index dd93768e2f..bdca8263d3 100644
--- a/be/src/vec/columns/column_decimal.h
+++ b/be/src/vec/columns/column_decimal.h
@@ -140,6 +140,16 @@ public:
 
     StringRef serialize_value_into_arena(size_t n, Arena& arena, char const*& begin) const override;
     const char* deserialize_and_insert_from_arena(const char* pos) override;
+
+    virtual size_t get_max_row_byte_size() const override;
+
+    virtual void serialize_vec(std::vector<StringRef>& keys, size_t num_rows,
+                               size_t max_row_byte_size) const override;
+
+    virtual void serialize_vec_with_null_map(std::vector<StringRef>& keys, size_t num_rows,
+                                             const uint8_t* null_map,
+                                             size_t max_row_byte_size) const override;
+
     void update_hash_with_value(size_t n, SipHash& hash) const override;
     int compare_at(size_t n, size_t m, const IColumn& rhs_, int nan_direction_hint) const override;
     void get_permutation(bool reverse, size_t limit, int nan_direction_hint,


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