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

kxiao 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 04e62d9c426 [fix](invert index) ensure that the pred result sign of 
the inlist is in order #36085 (#36191)
04e62d9c426 is described below

commit 04e62d9c426cbc0c21403e6ef6737aaf1268c44e
Author: zzzxl <[email protected]>
AuthorDate: Wed Jun 12 23:04:31 2024 +0800

    [fix](invert index) ensure that the pred result sign of the inlist is in 
order #36085 (#36191)
---
 be/src/olap/rowset/segment_v2/segment_iterator.cpp | 7 ++++---
 be/src/olap/rowset/segment_v2/segment_iterator.h   | 5 +++--
 be/src/vec/exprs/vexpr.cpp                         | 7 ++++---
 3 files changed, 11 insertions(+), 8 deletions(-)

diff --git a/be/src/olap/rowset/segment_v2/segment_iterator.cpp 
b/be/src/olap/rowset/segment_v2/segment_iterator.cpp
index d57b5b27ccc..2e369d2c7f3 100644
--- a/be/src/olap/rowset/segment_v2/segment_iterator.cpp
+++ b/be/src/olap/rowset/segment_v2/segment_iterator.cpp
@@ -741,7 +741,7 @@ Status 
SegmentIterator::_execute_predicates_except_leafnode_of_andnode(
         _column_predicate_info->column_name = expr->expr_name();
     } else if (_is_literal_node(node_type)) {
         auto v_literal_expr = 
std::dynamic_pointer_cast<doris::vectorized::VLiteral>(expr);
-        
_column_predicate_info->query_values.push_back(v_literal_expr->value());
+        _column_predicate_info->query_values.insert(v_literal_expr->value());
     } else if (node_type == TExprNodeType::BINARY_PRED || node_type == 
TExprNodeType::MATCH_PRED ||
                node_type == TExprNodeType::IN_PRED) {
         if (node_type == TExprNodeType::MATCH_PRED) {
@@ -964,7 +964,8 @@ std::string 
SegmentIterator::_gen_predicate_result_sign(ColumnPredicate* predica
 std::string SegmentIterator::_gen_predicate_result_sign(ColumnPredicateInfo* 
predicate_info) {
     std::string pred_result_sign;
     pred_result_sign = BeConsts::BLOCK_TEMP_COLUMN_PREFIX + 
predicate_info->column_name + "_" +
-                       predicate_info->query_op + "_" + 
join(predicate_info->query_values, ",");
+                       predicate_info->query_op + "_" +
+                       boost::join(predicate_info->query_values, ",");
     return pred_result_sign;
 }
 
@@ -2643,7 +2644,7 @@ void 
SegmentIterator::_calculate_pred_in_remaining_conjunct_root(
         }
     } else if (_is_literal_node(node_type)) {
         auto v_literal_expr = static_cast<const 
doris::vectorized::VLiteral*>(expr.get());
-        
_column_predicate_info->query_values.push_back(v_literal_expr->value());
+        _column_predicate_info->query_values.insert(v_literal_expr->value());
     } else {
         if (node_type == TExprNodeType::MATCH_PRED) {
             _column_predicate_info->query_op = "match";
diff --git a/be/src/olap/rowset/segment_v2/segment_iterator.h 
b/be/src/olap/rowset/segment_v2/segment_iterator.h
index 23d3d76dfc6..50dafeac2f5 100644
--- a/be/src/olap/rowset/segment_v2/segment_iterator.h
+++ b/be/src/olap/rowset/segment_v2/segment_iterator.h
@@ -76,7 +76,7 @@ struct ColumnPredicateInfo {
     std::string debug_string() const {
         std::stringstream ss;
         ss << "column_name=" << column_name << ", query_op=" << query_op
-           << ", query_value=" << join(query_values, ",");
+           << ", query_value=" << boost::join(query_values, ",");
         return ss.str();
     }
 
@@ -101,7 +101,8 @@ struct ColumnPredicateInfo {
     }
 
     std::string column_name;
-    std::vector<std::string> query_values;
+    // use set to ensure the consistent order of predicate_result_sign 
generated by inlist.
+    std::set<std::string> query_values;
     std::string query_op;
 };
 
diff --git a/be/src/vec/exprs/vexpr.cpp b/be/src/vec/exprs/vexpr.cpp
index 53cbbb5e1ba..3a965c27c92 100644
--- a/be/src/vec/exprs/vexpr.cpp
+++ b/be/src/vec/exprs/vexpr.cpp
@@ -628,11 +628,12 @@ std::string VExpr::gen_predicate_result_sign(Block& 
block, const ColumnNumbers&
     pred_result_sign +=
             BeConsts::BLOCK_TEMP_COLUMN_PREFIX + column_name + "_" + 
function_name + "_";
     if (function_name == "in") {
+        // Generating 'result_sign' from 'inlist' requires sorting the values.
+        std::set<std::string> values;
         for (size_t i = 1; i < arguments.size(); i++) {
-            pred_result_sign += 
block.get_by_position(arguments[i]).to_string(0);
-            pred_result_sign += ",";
+            values.insert(block.get_by_position(arguments[i]).to_string(0));
         }
-        pred_result_sign.pop_back();
+        pred_result_sign += boost::join(values, ",");
     } else {
         pred_result_sign += block.get_by_position(arguments[1]).to_string(0);
     }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to