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

zhangstar333 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 e1587537bcd [Fix](status) fix unhandled status in exprs #28218
e1587537bcd is described below

commit e1587537bcdc5839567f6084a9dbba964cdbd778
Author: zclllyybb <[email protected]>
AuthorDate: Mon Dec 11 11:04:58 2023 +0800

    [Fix](status) fix unhandled status in exprs #28218
    
    which marked static_cast<void> in 
https://github.com/apache/doris/pull/23395/files
    partially fixed #28160
---
 be/src/common/exception.h                          |  1 +
 be/src/common/status.h                             |  8 ++++
 be/src/exprs/runtime_filter.cpp                    |  3 +-
 be/src/pipeline/exec/table_function_operator.cpp   | 20 +++++----
 be/src/pipeline/exec/table_function_operator.h     |  4 +-
 be/src/vec/exec/vtable_function_node.cpp           | 20 +++++----
 be/src/vec/exec/vtable_function_node.h             |  7 ++--
 be/src/vec/exprs/table_function/table_function.h   | 14 +++----
 be/src/vec/exprs/table_function/vexplode.cpp       |  8 ++--
 be/src/vec/exprs/table_function/vexplode.h         |  4 +-
 .../vec/exprs/table_function/vexplode_bitmap.cpp   | 21 +++++-----
 be/src/vec/exprs/table_function/vexplode_bitmap.h  |  8 ++--
 .../exprs/table_function/vexplode_json_array.cpp   |  8 ++--
 .../vec/exprs/table_function/vexplode_json_array.h |  4 +-
 .../vec/exprs/table_function/vexplode_numbers.cpp  | 10 ++---
 be/src/vec/exprs/table_function/vexplode_numbers.h |  6 +--
 be/src/vec/exprs/table_function/vexplode_split.cpp | 14 +++----
 be/src/vec/exprs/table_function/vexplode_split.h   |  4 +-
 be/src/vec/exprs/vectorized_agg_fn.cpp             | 25 +++++-------
 be/src/vec/exprs/vexpr.cpp                         | 47 +++++++++++-----------
 be/test/vec/function/function_test_util.cpp        |  7 +---
 21 files changed, 112 insertions(+), 131 deletions(-)

diff --git a/be/src/common/exception.h b/be/src/common/exception.h
index 299c0da0437..3a2be010627 100644
--- a/be/src/common/exception.h
+++ b/be/src/common/exception.h
@@ -38,6 +38,7 @@ class Exception : public std::exception {
 public:
     Exception() : _code(ErrorCode::OK) {}
     Exception(int code, const std::string_view& msg);
+    Exception(const Status& status) : Exception(status.code(), status.msg()) {}
     // add nested exception as first param, or the template may could not find
     // the correct method for ...args
     Exception(const Exception& nested, int code, const std::string_view& msg);
diff --git a/be/src/common/status.h b/be/src/common/status.h
index 2b01e5ec47b..d0bbda66325 100644
--- a/be/src/common/status.h
+++ b/be/src/common/status.h
@@ -537,6 +537,14 @@ inline std::string Status::to_string_no_stack() const {
         }                               \
     } while (false)
 
+#define THROW_IF_ERROR(stmt)            \
+    do {                                \
+        Status _status_ = (stmt);       \
+        if (UNLIKELY(!_status_.ok())) { \
+            throw Exception(_status_);  \
+        }                               \
+    } while (false)
+
 #define RETURN_ERROR_IF_NON_VEC \
     return Status::NotSupported("Non-vectorized engine is not supported since 
Doris 2.0.");
 
diff --git a/be/src/exprs/runtime_filter.cpp b/be/src/exprs/runtime_filter.cpp
index 8398311654f..de3f2ad4fd5 100644
--- a/be/src/exprs/runtime_filter.cpp
+++ b/be/src/exprs/runtime_filter.cpp
@@ -208,9 +208,8 @@ PFilterType get_type(RuntimeFilterType type) {
 }
 
 Status create_literal(const TypeDescriptor& type, const void* data, 
vectorized::VExprSPtr& expr) {
-    TExprNode node = create_texpr_node_from(data, type.type, type.precision, 
type.scale);
-
     try {
+        TExprNode node = create_texpr_node_from(data, type.type, 
type.precision, type.scale);
         expr = vectorized::VLiteral::create_shared(node);
     } catch (const Exception& e) {
         return e.to_status();
diff --git a/be/src/pipeline/exec/table_function_operator.cpp 
b/be/src/pipeline/exec/table_function_operator.cpp
index 6e947c640c9..cf14b3ec5e3 100644
--- a/be/src/pipeline/exec/table_function_operator.cpp
+++ b/be/src/pipeline/exec/table_function_operator.cpp
@@ -115,7 +115,7 @@ int TableFunctionLocalState::_find_last_fn_eos_idx() const {
 bool TableFunctionLocalState::_roll_table_functions(int last_eos_idx) {
     int i = last_eos_idx - 1;
     for (; i >= 0; --i) {
-        static_cast<void>(_fns[i]->forward());
+        _fns[i]->forward();
         if (!_fns[i]->eos()) {
             break;
         }
@@ -127,7 +127,7 @@ bool TableFunctionLocalState::_roll_table_functions(int 
last_eos_idx) {
     }
 
     for (int j = i + 1; j < _parent->cast<TableFunctionOperatorX>()._fn_num; 
++j) {
-        static_cast<void>(_fns[j]->reset());
+        _fns[j]->reset();
     }
 
     return true;
@@ -171,7 +171,7 @@ Status 
TableFunctionLocalState::get_expanded_block(RuntimeState* state,
             if (idx == 0 || skip_child_row) {
                 _copy_output_slots(columns);
                 // all table functions' results are exhausted, process next 
child row.
-                RETURN_IF_ERROR(process_next_child_row());
+                process_next_child_row();
                 if (_cur_child_offset == -1) {
                     break;
                 }
@@ -196,7 +196,7 @@ Status 
TableFunctionLocalState::get_expanded_block(RuntimeState* state,
                     _fns[i]->get_value(columns[i + p._child_slots.size()]);
                 }
                 _current_row_insert_times++;
-                static_cast<void>(_fns[p._fn_num - 1]->forward());
+                _fns[p._fn_num - 1]->forward();
             }
         }
     }
@@ -218,27 +218,25 @@ Status 
TableFunctionLocalState::get_expanded_block(RuntimeState* state,
     return Status::OK();
 }
 
-Status TableFunctionLocalState::process_next_child_row() {
+void TableFunctionLocalState::process_next_child_row() {
     _cur_child_offset++;
 
     if (_cur_child_offset >= _child_block->rows()) {
         // release block use count.
         for (vectorized::TableFunction* fn : _fns) {
-            RETURN_IF_ERROR(fn->process_close());
+            fn->process_close();
         }
 
         _child_block->clear_column_data(_parent->cast<TableFunctionOperatorX>()
                                                 ._child_x->row_desc()
                                                 .num_materialized_slots());
         _cur_child_offset = -1;
-        return Status::OK();
+        return;
     }
 
     for (vectorized::TableFunction* fn : _fns) {
-        RETURN_IF_ERROR(fn->process_row(_cur_child_offset));
+        fn->process_row(_cur_child_offset);
     }
-
-    return Status::OK();
 }
 
 TableFunctionOperatorX::TableFunctionOperatorX(ObjectPool* pool, const 
TPlanNode& tnode,
@@ -289,7 +287,7 @@ Status TableFunctionOperatorX::init(const TPlanNode& tnode, 
RuntimeState* state)
 Status TableFunctionOperatorX::prepare(RuntimeState* state) {
     RETURN_IF_ERROR(Base::prepare(state));
 
-    for (auto fn : _fns) {
+    for (auto* fn : _fns) {
         RETURN_IF_ERROR(fn->prepare());
     }
     RETURN_IF_ERROR(vectorized::VExpr::prepare(_vfn_ctxs, state, 
_row_descriptor));
diff --git a/be/src/pipeline/exec/table_function_operator.h 
b/be/src/pipeline/exec/table_function_operator.h
index 0d292c324fa..2198f336c8e 100644
--- a/be/src/pipeline/exec/table_function_operator.h
+++ b/be/src/pipeline/exec/table_function_operator.h
@@ -56,7 +56,7 @@ public:
     ~TableFunctionLocalState() override = default;
 
     Status init(RuntimeState* state, LocalStateInfo& info) override;
-    Status process_next_child_row();
+    void process_next_child_row();
     Status get_expanded_block(RuntimeState* state, vectorized::Block* 
output_block,
                               SourceState& source_state);
 
@@ -106,7 +106,7 @@ public:
         for (auto* fn : local_state._fns) {
             RETURN_IF_ERROR(fn->process_init(input_block, state));
         }
-        RETURN_IF_ERROR(local_state.process_next_child_row());
+        local_state.process_next_child_row();
         return Status::OK();
     }
 
diff --git a/be/src/vec/exec/vtable_function_node.cpp 
b/be/src/vec/exec/vtable_function_node.cpp
index be93bde0295..b7302aedcdc 100644
--- a/be/src/vec/exec/vtable_function_node.cpp
+++ b/be/src/vec/exec/vtable_function_node.cpp
@@ -106,7 +106,7 @@ Status VTableFunctionNode::prepare(RuntimeState* state) {
     SCOPED_TIMER(_exec_timer);
 
     _num_rows_filtered_counter = ADD_COUNTER(_runtime_profile, "RowsFiltered", 
TUnit::UNIT);
-    for (auto fn : _fns) {
+    for (auto* fn : _fns) {
         RETURN_IF_ERROR(fn->prepare());
     }
     RETURN_IF_ERROR(VExpr::prepare(_vfn_ctxs, state, _row_descriptor));
@@ -182,7 +182,7 @@ Status 
VTableFunctionNode::_get_expanded_block(RuntimeState* state, Block* outpu
             if (idx == 0 || skip_child_row) {
                 _copy_output_slots(columns);
                 // all table functions' results are exhausted, process next 
child row.
-                RETURN_IF_ERROR(_process_next_child_row());
+                _process_next_child_row();
                 if (_cur_child_offset == -1) {
                     break;
                 }
@@ -207,7 +207,7 @@ Status 
VTableFunctionNode::_get_expanded_block(RuntimeState* state, Block* outpu
                     _fns[i]->get_value(columns[i + _child_slots.size()]);
                 }
                 _current_row_insert_times++;
-                static_cast<void>(_fns[_fn_num - 1]->forward());
+                _fns[_fn_num - 1]->forward();
             }
         }
     }
@@ -226,25 +226,23 @@ Status 
VTableFunctionNode::_get_expanded_block(RuntimeState* state, Block* outpu
     return Status::OK();
 }
 
-Status VTableFunctionNode::_process_next_child_row() {
+void VTableFunctionNode::_process_next_child_row() {
     _cur_child_offset++;
 
     if (_cur_child_offset >= _child_block->rows()) {
         // release block use count.
         for (TableFunction* fn : _fns) {
-            RETURN_IF_ERROR(fn->process_close());
+            fn->process_close();
         }
 
         release_block_memory(*_child_block);
         _cur_child_offset = -1;
-        return Status::OK();
+        return;
     }
 
     for (TableFunction* fn : _fns) {
-        RETURN_IF_ERROR(fn->process_row(_cur_child_offset));
+        fn->process_row(_cur_child_offset);
     }
-
-    return Status::OK();
 }
 
 // Returns the index of fn of the last eos counted from back to front
@@ -287,7 +285,7 @@ int VTableFunctionNode::_find_last_fn_eos_idx() {
 bool VTableFunctionNode::_roll_table_functions(int last_eos_idx) {
     int i = last_eos_idx - 1;
     for (; i >= 0; --i) {
-        static_cast<void>(_fns[i]->forward());
+        _fns[i]->forward();
         if (!_fns[i]->eos()) {
             break;
         }
@@ -299,7 +297,7 @@ bool VTableFunctionNode::_roll_table_functions(int 
last_eos_idx) {
     }
 
     for (int j = i + 1; j < _fn_num; ++j) {
-        static_cast<void>(_fns[j]->reset());
+        _fns[j]->reset();
     }
 
     return true;
diff --git a/be/src/vec/exec/vtable_function_node.h 
b/be/src/vec/exec/vtable_function_node.h
index bcee8ced50f..0b64fe47cc5 100644
--- a/be/src/vec/exec/vtable_function_node.h
+++ b/be/src/vec/exec/vtable_function_node.h
@@ -17,8 +17,7 @@
 
 #pragma once
 
-#include <stdint.h>
-
+#include <cstdint>
 #include <vector>
 
 #include "common/global_types.h"
@@ -81,7 +80,7 @@ public:
         for (TableFunction* fn : _fns) {
             RETURN_IF_ERROR(fn->process_init(input_block, state));
         }
-        RETURN_IF_ERROR(_process_next_child_row());
+        _process_next_child_row();
         return Status::OK();
     }
 
@@ -106,7 +105,7 @@ private:
 
     bool _roll_table_functions(int last_eos_idx);
 
-    Status _process_next_child_row();
+    void _process_next_child_row();
 
     /*  Now the output tuples for table function node is base_table_tuple + 
tf1 + tf2 + ...
         But not all slots are used, the real used slots are inside 
table_function_node.outputSlotIds.
diff --git a/be/src/vec/exprs/table_function/table_function.h 
b/be/src/vec/exprs/table_function/table_function.h
index 04c80ba2203..98d81136439 100644
--- a/be/src/vec/exprs/table_function/table_function.h
+++ b/be/src/vec/exprs/table_function/table_function.h
@@ -38,20 +38,19 @@ public:
 
     virtual Status process_init(Block* block, RuntimeState* state) = 0;
 
-    virtual Status process_row(size_t row_idx) {
+    virtual void process_row(size_t row_idx) {
         if (!_is_const) {
             _cur_size = 0;
         }
-        return reset();
+        reset();
     }
 
     // only used for vectorized.
-    virtual Status process_close() = 0;
+    virtual void process_close() = 0;
 
-    virtual Status reset() {
+    virtual void reset() {
         _eos = false;
         _cur_offset = 0;
-        return Status::OK();
     }
 
     virtual void get_value(MutableColumnPtr& column) = 0;
@@ -61,14 +60,14 @@ public:
         int i = 0;
         for (; i < max_step && !eos(); i++) {
             get_value(column);
-            static_cast<void>(forward());
+            forward();
         }
         return i;
     }
 
     virtual Status close() { return Status::OK(); }
 
-    virtual Status forward(int step = 1) {
+    virtual void forward(int step = 1) {
         if (current_empty()) {
             _eos = true;
         } else {
@@ -77,7 +76,6 @@ public:
                 _eos = true;
             }
         }
-        return Status::OK();
     }
 
     std::string name() const { return _fn_name; }
diff --git a/be/src/vec/exprs/table_function/vexplode.cpp 
b/be/src/vec/exprs/table_function/vexplode.cpp
index 912b7acb5de..b505339ea7c 100644
--- a/be/src/vec/exprs/table_function/vexplode.cpp
+++ b/be/src/vec/exprs/table_function/vexplode.cpp
@@ -56,22 +56,20 @@ Status VExplodeTableFunction::process_init(Block* block, 
RuntimeState* state) {
     return Status::OK();
 }
 
-Status VExplodeTableFunction::process_row(size_t row_idx) {
+void VExplodeTableFunction::process_row(size_t row_idx) {
     DCHECK(row_idx < _array_column->size());
-    RETURN_IF_ERROR(TableFunction::process_row(row_idx));
+    TableFunction::process_row(row_idx);
 
     if (!_detail.array_nullmap_data || !_detail.array_nullmap_data[row_idx]) {
         _array_offset = (*_detail.offsets_ptr)[row_idx - 1];
         _cur_size = (*_detail.offsets_ptr)[row_idx] - _array_offset;
     }
-    return Status::OK();
 }
 
-Status VExplodeTableFunction::process_close() {
+void VExplodeTableFunction::process_close() {
     _array_column = nullptr;
     _detail.reset();
     _array_offset = 0;
-    return Status::OK();
 }
 
 void VExplodeTableFunction::get_value(MutableColumnPtr& column) {
diff --git a/be/src/vec/exprs/table_function/vexplode.h 
b/be/src/vec/exprs/table_function/vexplode.h
index 2da97d11a40..d5d84a70e2e 100644
--- a/be/src/vec/exprs/table_function/vexplode.h
+++ b/be/src/vec/exprs/table_function/vexplode.h
@@ -41,8 +41,8 @@ public:
     ~VExplodeTableFunction() override = default;
 
     Status process_init(Block* block, RuntimeState* state) override;
-    Status process_row(size_t row_idx) override;
-    Status process_close() override;
+    void process_row(size_t row_idx) override;
+    void process_close() override;
     void get_value(MutableColumnPtr& column) override;
 
 private:
diff --git a/be/src/vec/exprs/table_function/vexplode_bitmap.cpp 
b/be/src/vec/exprs/table_function/vexplode_bitmap.cpp
index 9ce77714549..ac037ea3ae8 100644
--- a/be/src/vec/exprs/table_function/vexplode_bitmap.cpp
+++ b/be/src/vec/exprs/table_function/vexplode_bitmap.cpp
@@ -19,6 +19,7 @@
 
 #include <glog/logging.h>
 
+#include <memory>
 #include <ostream>
 #include <vector>
 
@@ -53,22 +54,21 @@ Status VExplodeBitmapTableFunction::process_init(Block* 
block, RuntimeState* sta
     return Status::OK();
 }
 
-Status VExplodeBitmapTableFunction::reset() {
+void VExplodeBitmapTableFunction::reset() {
     _eos = false;
     _cur_offset = 0;
     if (!current_empty()) {
-        _cur_iter.reset(new BitmapValueIterator(*_cur_bitmap));
+        _cur_iter = std::make_unique<BitmapValueIterator>(*_cur_bitmap);
     }
-    return Status::OK();
 }
 
-Status VExplodeBitmapTableFunction::forward(int step) {
+void VExplodeBitmapTableFunction::forward(int step) {
     if (!current_empty()) {
         for (int i = 0; i < step; i++) {
             ++(*_cur_iter);
         }
     }
-    return TableFunction::forward(step);
+    TableFunction::forward(step);
 }
 
 void VExplodeBitmapTableFunction::get_value(MutableColumnPtr& column) {
@@ -88,8 +88,8 @@ void VExplodeBitmapTableFunction::get_value(MutableColumnPtr& 
column) {
     }
 }
 
-Status VExplodeBitmapTableFunction::process_row(size_t row_idx) {
-    RETURN_IF_ERROR(TableFunction::process_row(row_idx));
+void VExplodeBitmapTableFunction::process_row(size_t row_idx) {
+    TableFunction::process_row(row_idx);
 
     StringRef value = _value_column->get_data_at(row_idx);
 
@@ -98,16 +98,13 @@ Status VExplodeBitmapTableFunction::process_row(size_t 
row_idx) {
 
         _cur_size = _cur_bitmap->cardinality();
         if (!current_empty()) {
-            _cur_iter.reset(new BitmapValueIterator(*_cur_bitmap));
+            _cur_iter = std::make_unique<BitmapValueIterator>(*_cur_bitmap);
         }
     }
-
-    return Status::OK();
 }
 
-Status VExplodeBitmapTableFunction::process_close() {
+void VExplodeBitmapTableFunction::process_close() {
     _value_column = nullptr;
-    return Status::OK();
 }
 
 } // namespace doris::vectorized
diff --git a/be/src/vec/exprs/table_function/vexplode_bitmap.h 
b/be/src/vec/exprs/table_function/vexplode_bitmap.h
index bc11dd7ca8f..b3f2fe697fd 100644
--- a/be/src/vec/exprs/table_function/vexplode_bitmap.h
+++ b/be/src/vec/exprs/table_function/vexplode_bitmap.h
@@ -41,13 +41,13 @@ public:
     VExplodeBitmapTableFunction();
     ~VExplodeBitmapTableFunction() override = default;
 
-    Status reset() override;
+    void reset() override;
     void get_value(MutableColumnPtr& column) override;
-    Status forward(int step = 1) override;
+    void forward(int step = 1) override;
 
     Status process_init(Block* block, RuntimeState* state) override;
-    Status process_row(size_t row_idx) override;
-    Status process_close() override;
+    void process_row(size_t row_idx) override;
+    void process_close() override;
 
 private:
     void _reset_iterator();
diff --git a/be/src/vec/exprs/table_function/vexplode_json_array.cpp 
b/be/src/vec/exprs/table_function/vexplode_json_array.cpp
index 64dec1a7e3d..1a149d949af 100644
--- a/be/src/vec/exprs/table_function/vexplode_json_array.cpp
+++ b/be/src/vec/exprs/table_function/vexplode_json_array.cpp
@@ -195,8 +195,8 @@ Status VExplodeJsonArrayTableFunction::process_init(Block* 
block, RuntimeState*
     return Status::OK();
 }
 
-Status VExplodeJsonArrayTableFunction::process_row(size_t row_idx) {
-    RETURN_IF_ERROR(TableFunction::process_row(row_idx));
+void VExplodeJsonArrayTableFunction::process_row(size_t row_idx) {
+    TableFunction::process_row(row_idx);
 
     StringRef text = _text_column->get_data_at(row_idx);
     if (text.data != nullptr) {
@@ -206,12 +206,10 @@ Status VExplodeJsonArrayTableFunction::process_row(size_t 
row_idx) {
             _cur_size = _parsed_data.set_output(_type, document);
         }
     }
-    return Status::OK();
 }
 
-Status VExplodeJsonArrayTableFunction::process_close() {
+void VExplodeJsonArrayTableFunction::process_close() {
     _text_column = nullptr;
-    return Status::OK();
 }
 
 void VExplodeJsonArrayTableFunction::get_value(MutableColumnPtr& column) {
diff --git a/be/src/vec/exprs/table_function/vexplode_json_array.h 
b/be/src/vec/exprs/table_function/vexplode_json_array.h
index 62f818a0530..42b3cba2994 100644
--- a/be/src/vec/exprs/table_function/vexplode_json_array.h
+++ b/be/src/vec/exprs/table_function/vexplode_json_array.h
@@ -90,8 +90,8 @@ public:
     ~VExplodeJsonArrayTableFunction() override = default;
 
     Status process_init(Block* block, RuntimeState* state) override;
-    Status process_row(size_t row_idx) override;
-    Status process_close() override;
+    void process_row(size_t row_idx) override;
+    void process_close() override;
     void get_value(MutableColumnPtr& column) override;
 
 private:
diff --git a/be/src/vec/exprs/table_function/vexplode_numbers.cpp 
b/be/src/vec/exprs/table_function/vexplode_numbers.cpp
index 01f674f59e7..9b5f7ffcbbc 100644
--- a/be/src/vec/exprs/table_function/vexplode_numbers.cpp
+++ b/be/src/vec/exprs/table_function/vexplode_numbers.cpp
@@ -76,22 +76,20 @@ Status VExplodeNumbersTableFunction::process_init(Block* 
block, RuntimeState* st
     return Status::OK();
 }
 
-Status VExplodeNumbersTableFunction::process_row(size_t row_idx) {
-    RETURN_IF_ERROR(TableFunction::process_row(row_idx));
+void VExplodeNumbersTableFunction::process_row(size_t row_idx) {
+    TableFunction::process_row(row_idx);
     if (_is_const) {
-        return Status::OK();
+        return;
     }
 
     StringRef value = _value_column->get_data_at(row_idx);
     if (value.data != nullptr) {
         _cur_size = std::max(0, *reinterpret_cast<const int*>(value.data));
     }
-    return Status::OK();
 }
 
-Status VExplodeNumbersTableFunction::process_close() {
+void VExplodeNumbersTableFunction::process_close() {
     _value_column = nullptr;
-    return Status::OK();
 }
 
 void VExplodeNumbersTableFunction::get_value(MutableColumnPtr& column) {
diff --git a/be/src/vec/exprs/table_function/vexplode_numbers.h 
b/be/src/vec/exprs/table_function/vexplode_numbers.h
index d8c5c37da93..211565ec8b4 100644
--- a/be/src/vec/exprs/table_function/vexplode_numbers.h
+++ b/be/src/vec/exprs/table_function/vexplode_numbers.h
@@ -44,8 +44,8 @@ public:
     ~VExplodeNumbersTableFunction() override = default;
 
     Status process_init(Block* block, RuntimeState* state) override;
-    Status process_row(size_t row_idx) override;
-    Status process_close() override;
+    void process_row(size_t row_idx) override;
+    void process_close() override;
     void get_value(MutableColumnPtr& column) override;
     int get_value(MutableColumnPtr& column, int max_step) override {
         if (_is_const) {
@@ -62,7 +62,7 @@ public:
                         ->insert_range_from(*_elements_column, _cur_offset, 
max_step);
             }
 
-            static_cast<void>(forward(max_step));
+            forward(max_step);
             return max_step;
         }
 
diff --git a/be/src/vec/exprs/table_function/vexplode_split.cpp 
b/be/src/vec/exprs/table_function/vexplode_split.cpp
index c2a48f456ad..094e9010354 100644
--- a/be/src/vec/exprs/table_function/vexplode_split.cpp
+++ b/be/src/vec/exprs/table_function/vexplode_split.cpp
@@ -83,18 +83,18 @@ Status VExplodeSplitTableFunction::process_init(Block* 
block, RuntimeState* stat
     return Status::OK();
 }
 
-Status VExplodeSplitTableFunction::process_row(size_t row_idx) {
-    RETURN_IF_ERROR(TableFunction::process_row(row_idx));
+void VExplodeSplitTableFunction::process_row(size_t row_idx) {
+    TableFunction::process_row(row_idx);
 
     if (!(_test_null_map && _test_null_map[row_idx]) && _delimiter.data != 
nullptr) {
         // TODO: use the function to be better string_view/StringRef split
         auto split = [](std::string_view strv, std::string_view delims = " ") {
             std::vector<std::string_view> output;
-            auto first = strv.begin();
-            auto last = strv.end();
+            const auto* first = strv.begin();
+            const auto* last = strv.end();
 
             do {
-                const auto second =
+                const auto* second =
                         std::search(first, last, std::cbegin(delims), 
std::cend(delims));
                 if (first != second) {
                     
output.emplace_back(strv.substr(std::distance(strv.begin(), first),
@@ -115,15 +115,13 @@ Status VExplodeSplitTableFunction::process_row(size_t 
row_idx) {
 
         _cur_size = _backup.size();
     }
-    return Status::OK();
 }
 
-Status VExplodeSplitTableFunction::process_close() {
+void VExplodeSplitTableFunction::process_close() {
     _text_column = nullptr;
     _real_text_column = nullptr;
     _test_null_map = nullptr;
     _delimiter = {};
-    return Status::OK();
 }
 
 void VExplodeSplitTableFunction::get_value(MutableColumnPtr& column) {
diff --git a/be/src/vec/exprs/table_function/vexplode_split.h 
b/be/src/vec/exprs/table_function/vexplode_split.h
index 629e2259b65..343f83406cc 100644
--- a/be/src/vec/exprs/table_function/vexplode_split.h
+++ b/be/src/vec/exprs/table_function/vexplode_split.h
@@ -46,8 +46,8 @@ public:
 
     Status open() override;
     Status process_init(Block* block, RuntimeState* state) override;
-    Status process_row(size_t row_idx) override;
-    Status process_close() override;
+    void process_row(size_t row_idx) override;
+    void process_close() override;
     void get_value(MutableColumnPtr& column) override;
 
 private:
diff --git a/be/src/vec/exprs/vectorized_agg_fn.cpp 
b/be/src/vec/exprs/vectorized_agg_fn.cpp
index f0f1d3f815d..0e63838e87e 100644
--- a/be/src/vec/exprs/vectorized_agg_fn.cpp
+++ b/be/src/vec/exprs/vectorized_agg_fn.cpp
@@ -66,11 +66,7 @@ AggregateFunctionPtr get_agg_state_function(const DataTypes& 
argument_types,
 AggFnEvaluator::AggFnEvaluator(const TExprNode& desc)
         : _fn(desc.fn),
           _is_merge(desc.agg_expr.is_merge_agg),
-          _return_type(TypeDescriptor::from_thrift(desc.fn.ret_type)),
-          _intermediate_slot_desc(nullptr),
-          _output_slot_desc(nullptr),
-          _merge_timer(nullptr),
-          _expr_timer(nullptr) {
+          _return_type(TypeDescriptor::from_thrift(desc.fn.ret_type)) {
     bool nullable = true;
     if (desc.__isset.is_nullable) {
         nullable = desc.is_nullable;
@@ -78,10 +74,10 @@ AggFnEvaluator::AggFnEvaluator(const TExprNode& desc)
     _data_type = DataTypeFactory::instance().create_data_type(_return_type, 
nullable);
 
     if (desc.agg_expr.__isset.param_types) {
-        auto& param_types = desc.agg_expr.param_types;
-        for (int i = 0; i < param_types.size(); i++) {
+        const auto& param_types = desc.agg_expr.param_types;
+        for (const auto& param_type : param_types) {
             _argument_types_with_sort.push_back(
-                    
DataTypeFactory::instance().create_data_type(param_types[i]));
+                    DataTypeFactory::instance().create_data_type(param_type));
         }
     }
 }
@@ -134,10 +130,10 @@ Status AggFnEvaluator::prepare(RuntimeState* state, const 
RowDescriptor& desc,
     std::vector<std::string_view> child_expr_name;
 
     // prepare for argument
-    for (int i = 0; i < _input_exprs_ctxs.size(); ++i) {
-        auto data_type = _input_exprs_ctxs[i]->root()->data_type();
+    for (auto& _input_exprs_ctx : _input_exprs_ctxs) {
+        auto data_type = _input_exprs_ctx->root()->data_type();
         tmp_argument_types.emplace_back(data_type);
-        
child_expr_name.emplace_back(_input_exprs_ctxs[i]->root()->expr_name());
+        child_expr_name.emplace_back(_input_exprs_ctx->root()->expr_name());
     }
 
     const DataTypes& argument_types =
@@ -334,15 +330,14 @@ AggFnEvaluator::AggFnEvaluator(AggFnEvaluator& evaluator, 
RuntimeState* state)
         DataTypes tmp_argument_types;
         tmp_argument_types.reserve(evaluator._input_exprs_ctxs.size());
         // prepare for argument
-        for (int i = 0; i < evaluator._input_exprs_ctxs.size(); ++i) {
-            auto data_type = 
evaluator._input_exprs_ctxs[i]->root()->data_type();
+        for (auto& _input_exprs_ctx : evaluator._input_exprs_ctxs) {
+            auto data_type = _input_exprs_ctx->root()->data_type();
             tmp_argument_types.emplace_back(data_type);
         }
         const DataTypes& argument_types =
                 _real_argument_types.empty() ? tmp_argument_types : 
_real_argument_types;
         _function = AggregateJavaUdaf::create(evaluator._fn, argument_types, 
evaluator._data_type);
-        static_cast<void>(
-                
static_cast<AggregateJavaUdaf*>(_function.get())->check_udaf(evaluator._fn));
+        
THROW_IF_ERROR(static_cast<AggregateJavaUdaf*>(_function.get())->check_udaf(evaluator._fn));
     }
     DCHECK(_function != nullptr);
 
diff --git a/be/src/vec/exprs/vexpr.cpp b/be/src/vec/exprs/vexpr.cpp
index bcd06cb6640..97611867e78 100644
--- a/be/src/vec/exprs/vexpr.cpp
+++ b/be/src/vec/exprs/vexpr.cpp
@@ -61,85 +61,83 @@ TExprNode create_texpr_node_from(const void* data, const 
PrimitiveType& type, in
 
     switch (type) {
     case TYPE_BOOLEAN: {
-        static_cast<void>(create_texpr_literal_node<TYPE_BOOLEAN>(data, 
&node));
+        THROW_IF_ERROR(create_texpr_literal_node<TYPE_BOOLEAN>(data, &node));
         break;
     }
     case TYPE_TINYINT: {
-        static_cast<void>(create_texpr_literal_node<TYPE_TINYINT>(data, 
&node));
+        THROW_IF_ERROR(create_texpr_literal_node<TYPE_TINYINT>(data, &node));
         break;
     }
     case TYPE_SMALLINT: {
-        static_cast<void>(create_texpr_literal_node<TYPE_SMALLINT>(data, 
&node));
+        THROW_IF_ERROR(create_texpr_literal_node<TYPE_SMALLINT>(data, &node));
         break;
     }
     case TYPE_INT: {
-        static_cast<void>(create_texpr_literal_node<TYPE_INT>(data, &node));
+        THROW_IF_ERROR(create_texpr_literal_node<TYPE_INT>(data, &node));
         break;
     }
     case TYPE_BIGINT: {
-        static_cast<void>(create_texpr_literal_node<TYPE_BIGINT>(data, &node));
+        THROW_IF_ERROR(create_texpr_literal_node<TYPE_BIGINT>(data, &node));
         break;
     }
     case TYPE_LARGEINT: {
-        static_cast<void>(create_texpr_literal_node<TYPE_LARGEINT>(data, 
&node));
+        THROW_IF_ERROR(create_texpr_literal_node<TYPE_LARGEINT>(data, &node));
         break;
     }
     case TYPE_FLOAT: {
-        static_cast<void>(create_texpr_literal_node<TYPE_FLOAT>(data, &node));
+        THROW_IF_ERROR(create_texpr_literal_node<TYPE_FLOAT>(data, &node));
         break;
     }
     case TYPE_DOUBLE: {
-        static_cast<void>(create_texpr_literal_node<TYPE_DOUBLE>(data, &node));
+        THROW_IF_ERROR(create_texpr_literal_node<TYPE_DOUBLE>(data, &node));
         break;
     }
     case TYPE_DATEV2: {
-        static_cast<void>(create_texpr_literal_node<TYPE_DATEV2>(data, &node));
+        THROW_IF_ERROR(create_texpr_literal_node<TYPE_DATEV2>(data, &node));
         break;
     }
     case TYPE_DATETIMEV2: {
-        static_cast<void>(create_texpr_literal_node<TYPE_DATETIMEV2>(data, 
&node));
+        THROW_IF_ERROR(create_texpr_literal_node<TYPE_DATETIMEV2>(data, 
&node));
         break;
     }
     case TYPE_DATE: {
-        static_cast<void>(create_texpr_literal_node<TYPE_DATE>(data, &node));
+        THROW_IF_ERROR(create_texpr_literal_node<TYPE_DATE>(data, &node));
         break;
     }
     case TYPE_DATETIME: {
-        static_cast<void>(create_texpr_literal_node<TYPE_DATETIME>(data, 
&node));
+        THROW_IF_ERROR(create_texpr_literal_node<TYPE_DATETIME>(data, &node));
         break;
     }
     case TYPE_DECIMALV2: {
-        static_cast<void>(create_texpr_literal_node<TYPE_DECIMALV2>(data, 
&node, precision, scale));
+        THROW_IF_ERROR(create_texpr_literal_node<TYPE_DECIMALV2>(data, &node, 
precision, scale));
         break;
     }
     case TYPE_DECIMAL32: {
-        static_cast<void>(create_texpr_literal_node<TYPE_DECIMAL32>(data, 
&node, precision, scale));
+        THROW_IF_ERROR(create_texpr_literal_node<TYPE_DECIMAL32>(data, &node, 
precision, scale));
         break;
     }
     case TYPE_DECIMAL64: {
-        static_cast<void>(create_texpr_literal_node<TYPE_DECIMAL64>(data, 
&node, precision, scale));
+        THROW_IF_ERROR(create_texpr_literal_node<TYPE_DECIMAL64>(data, &node, 
precision, scale));
         break;
     }
     case TYPE_DECIMAL128I: {
-        static_cast<void>(
-                create_texpr_literal_node<TYPE_DECIMAL128I>(data, &node, 
precision, scale));
+        THROW_IF_ERROR(create_texpr_literal_node<TYPE_DECIMAL128I>(data, 
&node, precision, scale));
         break;
     }
     case TYPE_DECIMAL256: {
-        static_cast<void>(
-                create_texpr_literal_node<TYPE_DECIMAL256>(data, &node, 
precision, scale));
+        THROW_IF_ERROR(create_texpr_literal_node<TYPE_DECIMAL256>(data, &node, 
precision, scale));
         break;
     }
     case TYPE_CHAR: {
-        static_cast<void>(create_texpr_literal_node<TYPE_CHAR>(data, &node));
+        THROW_IF_ERROR(create_texpr_literal_node<TYPE_CHAR>(data, &node));
         break;
     }
     case TYPE_VARCHAR: {
-        static_cast<void>(create_texpr_literal_node<TYPE_VARCHAR>(data, 
&node));
+        THROW_IF_ERROR(create_texpr_literal_node<TYPE_VARCHAR>(data, &node));
         break;
     }
     case TYPE_STRING: {
-        static_cast<void>(create_texpr_literal_node<TYPE_STRING>(data, &node));
+        THROW_IF_ERROR(create_texpr_literal_node<TYPE_STRING>(data, &node));
         break;
     }
     default:
@@ -541,9 +539,10 @@ void VExpr::close_function_context(VExprContext* context, 
FunctionContext::Funct
                                    const FunctionBasePtr& function) const {
     if (_fn_context_index != -1) {
         FunctionContext* fn_ctx = context->fn_context(_fn_context_index);
-        static_cast<void>(function->close(fn_ctx, 
FunctionContext::THREAD_LOCAL));
+        // close failed will make system unstable. dont swallow it.
+        THROW_IF_ERROR(function->close(fn_ctx, FunctionContext::THREAD_LOCAL));
         if (scope == FunctionContext::FRAGMENT_LOCAL) {
-            static_cast<void>(function->close(fn_ctx, 
FunctionContext::FRAGMENT_LOCAL));
+            THROW_IF_ERROR(function->close(fn_ctx, 
FunctionContext::FRAGMENT_LOCAL));
         }
     }
 }
diff --git a/be/test/vec/function/function_test_util.cpp 
b/be/test/vec/function/function_test_util.cpp
index c0a1df599f9..4ae7907921f 100644
--- a/be/test/vec/function/function_test_util.cpp
+++ b/be/test/vec/function/function_test_util.cpp
@@ -356,10 +356,7 @@ Block* process_table_function(TableFunction* fn, Block* 
input_block,
 
     // process table function for all rows
     for (size_t row = 0; row < input_block->rows(); ++row) {
-        if (fn->process_row(row) != Status::OK()) {
-            LOG(WARNING) << "TableFunction process_row failed";
-            return nullptr;
-        }
+        fn->process_row(row);
 
         // consider outer
         if (!fn->is_outer() && fn->current_empty()) {
@@ -368,7 +365,7 @@ Block* process_table_function(TableFunction* fn, Block* 
input_block,
 
         do {
             fn->get_value(column);
-            static_cast<void>(fn->forward());
+            fn->forward();
         } while (!fn->eos());
     }
 


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


Reply via email to