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]