You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by mo...@apache.org on 2023/06/20 04:27:22 UTC

[doris] branch master updated: [Fix](orc-reader) Fix filter size mismatch in orc reader. (#20998)

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

morningman 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 c85271d2ae [Fix](orc-reader) Fix filter size mismatch in orc reader. (#20998)
c85271d2ae is described below

commit c85271d2ae2dc8385af30b6ebc60f49f842f6d1d
Author: Qi Chen <ka...@gmail.com>
AuthorDate: Tue Jun 20 12:27:16 2023 +0800

    [Fix](orc-reader) Fix filter size mismatch in orc reader. (#20998)
    
    Fix filter size mismatch in orc reader introduced by #20806
---
 be/src/vec/exec/format/orc/vorc_reader.cpp | 16 +++++++++++++---
 1 file changed, 13 insertions(+), 3 deletions(-)

diff --git a/be/src/vec/exec/format/orc/vorc_reader.cpp b/be/src/vec/exec/format/orc/vorc_reader.cpp
index f1d6fbc7dd..007aff91ca 100644
--- a/be/src/vec/exec/format/orc/vorc_reader.cpp
+++ b/be/src/vec/exec/format/orc/vorc_reader.cpp
@@ -1054,6 +1054,7 @@ Status OrcReader::_decode_string_dict_encoded_column(const std::string& col_name
                 if (cvb->notNull[i]) {
                     if constexpr (is_filter) {
                         if (!filter_data[i]) {
+                            string_values.emplace_back(empty_string.data(), 0);
                             continue;
                         }
                     }
@@ -1076,6 +1077,7 @@ Status OrcReader::_decode_string_dict_encoded_column(const std::string& col_name
             for (int i = 0; i < num_values; ++i) {
                 if constexpr (is_filter) {
                     if (!filter_data[i]) {
+                        string_values.emplace_back(empty_string.data(), 0);
                         continue;
                     }
                 }
@@ -1095,6 +1097,7 @@ Status OrcReader::_decode_string_dict_encoded_column(const std::string& col_name
                 if (cvb->notNull[i]) {
                     if constexpr (is_filter) {
                         if (!filter_data[i]) {
+                            string_values.emplace_back(empty_string.data(), 0);
                             continue;
                         }
                     }
@@ -1110,6 +1113,7 @@ Status OrcReader::_decode_string_dict_encoded_column(const std::string& col_name
             for (int i = 0; i < num_values; ++i) {
                 if constexpr (is_filter) {
                     if (!filter_data[i]) {
+                        string_values.emplace_back(empty_string.data(), 0);
                         continue;
                     }
                 }
@@ -1123,8 +1127,7 @@ Status OrcReader::_decode_string_dict_encoded_column(const std::string& col_name
             }
         }
     }
-    data_column->insert_many_strings_overflow(&string_values[0], string_values.size(),
-                                              max_value_length);
+    data_column->insert_many_strings(&string_values[0], string_values.size());
     return Status::OK();
 }
 
@@ -1719,6 +1722,13 @@ Status OrcReader::on_string_dicts_loaded(
         std::unordered_map<StringRef, int64_t> dict_value_to_code;
         size_t max_value_length = 0;
         uint64_t dictionaryCount = dict->dictionaryOffset.size() - 1;
+        if (dictionaryCount == 0) {
+            it = _dict_filter_cols.erase(it);
+            for (auto& ctx : ctxs) {
+                _non_dict_filter_conjuncts.emplace_back(ctx);
+            }
+            continue;
+        }
         dict_values.reserve(dictionaryCount);
         for (int i = 0; i < dictionaryCount; ++i) {
             char* val_ptr;
@@ -2037,7 +2047,7 @@ MutableColumnPtr OrcReader::_convert_dict_column_to_string_column(
             }
         }
     }
-    res->insert_many_strings_overflow(&string_values[0], num_values, max_value_length);
+    res->insert_many_strings(&string_values[0], num_values);
     return res;
 }
 


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