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

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


The following commit(s) were added to refs/heads/branch-3.0 by this push:
     new 66d5708cd49 [fix](expr)Remove the _can_fast_execute flag from VExpr. 
(#45542) (#45655)
66d5708cd49 is described below

commit 66d5708cd49433b102be04126cf9aa7583f0baaa
Author: Mryange <yanxuech...@selectdb.com>
AuthorDate: Sun Dec 22 21:28:08 2024 +0800

    [fix](expr)Remove the _can_fast_execute flag from VExpr. (#45542) (#45655)
---
 be/src/vec/exprs/vcompound_pred.h       |  4 +---
 be/src/vec/exprs/vectorized_fn_call.cpp |  2 +-
 be/src/vec/exprs/vexpr.cpp              |  2 --
 be/src/vec/exprs/vexpr.h                |  1 -
 be/src/vec/exprs/vin_predicate.cpp      | 24 ++++++++++--------------
 be/src/vec/exprs/vin_predicate.h        |  2 --
 be/src/vec/exprs/vmatch_predicate.cpp   |  2 +-
 7 files changed, 13 insertions(+), 24 deletions(-)

diff --git a/be/src/vec/exprs/vcompound_pred.h 
b/be/src/vec/exprs/vcompound_pred.h
index faed6788ba3..9e39533a7ae 100644
--- a/be/src/vec/exprs/vcompound_pred.h
+++ b/be/src/vec/exprs/vcompound_pred.h
@@ -144,15 +144,13 @@ public:
         }
 
         if (all_pass && !res.is_empty()) {
-            // set fast_execute when expr evaluated by inverted index correctly
-            _can_fast_execute = true;
             
context->get_inverted_index_context()->set_inverted_index_result_for_expr(this, 
res);
         }
         return Status::OK();
     }
 
     Status execute(VExprContext* context, Block* block, int* result_column_id) 
override {
-        if (_can_fast_execute && fast_execute(context, block, 
result_column_id)) {
+        if (fast_execute(context, block, result_column_id)) {
             return Status::OK();
         }
         if (children().size() == 1 || !_all_child_is_compound_and_not_const()) 
{
diff --git a/be/src/vec/exprs/vectorized_fn_call.cpp 
b/be/src/vec/exprs/vectorized_fn_call.cpp
index 427059bba41..7e4e4411f6f 100644
--- a/be/src/vec/exprs/vectorized_fn_call.cpp
+++ b/be/src/vec/exprs/vectorized_fn_call.cpp
@@ -152,7 +152,7 @@ Status 
VectorizedFnCall::_do_execute(doris::vectorized::VExprContext* context,
     if (is_const_and_have_executed()) { // const have executed in open function
         return get_result_from_const(block, _expr_name, result_column_id);
     }
-    if (_can_fast_execute && fast_execute(context, block, result_column_id)) {
+    if (fast_execute(context, block, result_column_id)) {
         return Status::OK();
     }
     DBUG_EXECUTE_IF("VectorizedFnCall.must_in_slow_path", {
diff --git a/be/src/vec/exprs/vexpr.cpp b/be/src/vec/exprs/vexpr.cpp
index 7e77d92c310..ca30b504446 100644
--- a/be/src/vec/exprs/vexpr.cpp
+++ b/be/src/vec/exprs/vexpr.cpp
@@ -731,8 +731,6 @@ Status VExpr::_evaluate_inverted_index(VExprContext* 
context, const FunctionBase
         for (int column_id : column_ids) {
             index_context->set_true_for_inverted_index_status(this, column_id);
         }
-        // set fast_execute when expr evaluated by inverted index correctly
-        _can_fast_execute = true;
     }
     return Status::OK();
 }
diff --git a/be/src/vec/exprs/vexpr.h b/be/src/vec/exprs/vexpr.h
index 142ab6a27d2..adf81124814 100644
--- a/be/src/vec/exprs/vexpr.h
+++ b/be/src/vec/exprs/vexpr.h
@@ -320,7 +320,6 @@ protected:
 
     // ensuring uniqueness during index traversal
     uint32_t _index_unique_id = 0;
-    bool _can_fast_execute = false;
 };
 
 } // namespace vectorized
diff --git a/be/src/vec/exprs/vin_predicate.cpp 
b/be/src/vec/exprs/vin_predicate.cpp
index 179a30971ea..7ea585b95c5 100644
--- a/be/src/vec/exprs/vin_predicate.cpp
+++ b/be/src/vec/exprs/vin_predicate.cpp
@@ -102,17 +102,6 @@ Status VInPredicate::open(RuntimeState* state, 
VExprContext* context,
     return Status::OK();
 }
 
-size_t VInPredicate::skip_constant_args_size() const {
-    if (_is_args_all_constant && !_can_fast_execute) {
-        // This is an optimization. For expressions like colA IN (1, 2, 3, 4),
-        // where all values inside the IN clause are constants,
-        // a hash set is created during open, and it will not be accessed 
again during execute
-        //  Here, _children[0] is colA
-        return 1;
-    }
-    return _children.size();
-}
-
 void VInPredicate::close(VExprContext* context, 
FunctionContext::FunctionStateScope scope) {
     VExpr::close_function_context(context, scope, _function);
     VExpr::close(context, scope);
@@ -127,12 +116,19 @@ Status VInPredicate::execute(VExprContext* context, 
Block* block, int* result_co
     if (is_const_and_have_executed()) { // const have execute in open function
         return get_result_from_const(block, _expr_name, result_column_id);
     }
-    if (_can_fast_execute && fast_execute(context, block, result_column_id)) {
+    if (fast_execute(context, block, result_column_id)) {
         return Status::OK();
     }
     DCHECK(_open_finished || _getting_const_col);
-    doris::vectorized::ColumnNumbers arguments(skip_constant_args_size());
-    for (int i = 0; i < skip_constant_args_size(); ++i) {
+
+    // This is an optimization. For expressions like colA IN (1, 2, 3, 4),
+    // where all values inside the IN clause are constants,
+    // a hash set is created during open, and it will not be accessed again 
during execute
+    //  Here, _children[0] is colA
+    const size_t args_size = _is_args_all_constant ? 1 : _children.size();
+
+    doris::vectorized::ColumnNumbers arguments(args_size);
+    for (int i = 0; i < args_size; ++i) {
         int column_id = -1;
         RETURN_IF_ERROR(_children[i]->execute(context, block, &column_id));
         arguments[i] = column_id;
diff --git a/be/src/vec/exprs/vin_predicate.h b/be/src/vec/exprs/vin_predicate.h
index 1b640056284..3d3846427d6 100644
--- a/be/src/vec/exprs/vin_predicate.h
+++ b/be/src/vec/exprs/vin_predicate.h
@@ -51,8 +51,6 @@ public:
 
     std::string debug_string() const override;
 
-    size_t skip_constant_args_size() const;
-
     const FunctionBasePtr function() { return _function; }
 
     bool is_not_in() const { return _is_not_in; };
diff --git a/be/src/vec/exprs/vmatch_predicate.cpp 
b/be/src/vec/exprs/vmatch_predicate.cpp
index c80933df13c..9311cfc360f 100644
--- a/be/src/vec/exprs/vmatch_predicate.cpp
+++ b/be/src/vec/exprs/vmatch_predicate.cpp
@@ -132,7 +132,7 @@ Status 
VMatchPredicate::evaluate_inverted_index(VExprContext* context, uint32_t
 
 Status VMatchPredicate::execute(VExprContext* context, Block* block, int* 
result_column_id) {
     DCHECK(_open_finished || _getting_const_col);
-    if (_can_fast_execute && fast_execute(context, block, result_column_id)) {
+    if (fast_execute(context, block, result_column_id)) {
         return Status::OK();
     }
     DBUG_EXECUTE_IF("VMatchPredicate.execute", {


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

Reply via email to