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

yiguolei 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 153f42a873 [enhancement](exprcontext) modify 
get_output_block_after_execute_expr method more clear to avoid mis usage 
(#19310)
153f42a873 is described below

commit 153f42a87372c45782b1a95a1cdb362ff1f9375a
Author: yiguolei <676222...@qq.com>
AuthorDate: Sat May 6 09:03:22 2023 +0800

    [enhancement](exprcontext) modify get_output_block_after_execute_expr 
method more clear to avoid mis usage (#19310)
    
    The original method signature is Block 
VExprContext::get_output_block_after_execute_exprs(
    const std::vectorvectorized::VExprContext*& output_vexpr_ctxs, const Block& 
input_block,
    Status& status)
    It return error status as a out parameter and the block as return value. It 
has to check the block.rows == 0 and then check error status.
    It is not conforming to the convention.
    
    
    ---------
    
    Co-authored-by: yiguolei <yiguo...@gmail.com>
---
 be/src/vec/exprs/vexpr_context.cpp         | 13 +++++--------
 be/src/vec/exprs/vexpr_context.h           |  4 ++--
 be/src/vec/runtime/vfile_result_writer.cpp |  9 +++------
 be/src/vec/sink/vjdbc_table_sink.cpp       |  6 +++---
 be/src/vec/sink/vmysql_result_writer.cpp   |  8 +++-----
 be/src/vec/sink/vmysql_table_writer.cpp    | 10 +++-------
 be/src/vec/sink/vodbc_table_sink.cpp       |  6 +++---
 be/src/vec/sink/vtablet_sink.cpp           |  7 ++-----
 8 files changed, 24 insertions(+), 39 deletions(-)

diff --git a/be/src/vec/exprs/vexpr_context.cpp 
b/be/src/vec/exprs/vexpr_context.cpp
index 37155455bf..6fc72fb03a 100644
--- a/be/src/vec/exprs/vexpr_context.cpp
+++ b/be/src/vec/exprs/vexpr_context.cpp
@@ -127,22 +127,19 @@ Status VExprContext::filter_block(VExprContext* 
vexpr_ctx, Block* block, int col
     return Block::filter_block(block, result_column_id, column_to_keep);
 }
 
-Block VExprContext::get_output_block_after_execute_exprs(
+Status VExprContext::get_output_block_after_execute_exprs(
         const std::vector<vectorized::VExprContext*>& output_vexpr_ctxs, const 
Block& input_block,
-        Status& status) {
+        Block* output_block) {
     vectorized::Block tmp_block(input_block.get_columns_with_type_and_name());
     vectorized::ColumnsWithTypeAndName result_columns;
     for (auto vexpr_ctx : output_vexpr_ctxs) {
         int result_column_id = -1;
-        status = vexpr_ctx->execute(&tmp_block, &result_column_id);
-        if (UNLIKELY(!status)) {
-            return {};
-        }
+        RETURN_IF_ERROR(vexpr_ctx->execute(&tmp_block, &result_column_id));
         DCHECK(result_column_id != -1);
         
result_columns.emplace_back(tmp_block.get_by_position(result_column_id));
     }
-
-    return {result_columns};
+    *output_block = {result_columns};
+    return Status::OK();
 }
 
 } // namespace doris::vectorized
diff --git a/be/src/vec/exprs/vexpr_context.h b/be/src/vec/exprs/vexpr_context.h
index 1629860f6b..91410fa02a 100644
--- a/be/src/vec/exprs/vexpr_context.h
+++ b/be/src/vec/exprs/vexpr_context.h
@@ -69,8 +69,8 @@ public:
     [[nodiscard]] static Status filter_block(VExprContext* vexpr_ctx, Block* 
block,
                                              int column_to_keep);
 
-    static Block get_output_block_after_execute_exprs(const 
std::vector<vectorized::VExprContext*>&,
-                                                      const Block&, Status&);
+    [[nodiscard]] static Status get_output_block_after_execute_exprs(
+            const std::vector<vectorized::VExprContext*>&, const Block&, 
Block*);
 
     int get_last_result_column_id() const {
         DCHECK(_last_result_column_id != -1);
diff --git a/be/src/vec/runtime/vfile_result_writer.cpp 
b/be/src/vec/runtime/vfile_result_writer.cpp
index c94c7f9752..cefebb4ea2 100644
--- a/be/src/vec/runtime/vfile_result_writer.cpp
+++ b/be/src/vec/runtime/vfile_result_writer.cpp
@@ -229,12 +229,9 @@ Status VFileResultWriter::append_block(Block& block) {
     Status status = Status::OK();
     // Exec vectorized expr here to speed up, block.rows() == 0 means expr exec
     // failed, just return the error status
-    auto output_block =
-            
VExprContext::get_output_block_after_execute_exprs(_output_vexpr_ctxs, block, 
status);
-    auto num_rows = output_block.rows();
-    if (UNLIKELY(num_rows == 0)) {
-        return status;
-    }
+    Block output_block;
+    
RETURN_IF_ERROR(VExprContext::get_output_block_after_execute_exprs(_output_vexpr_ctxs,
 block,
+                                                                       
&output_block));
     if (_vfile_writer) {
         _write_file(output_block);
     } else {
diff --git a/be/src/vec/sink/vjdbc_table_sink.cpp 
b/be/src/vec/sink/vjdbc_table_sink.cpp
index 671c736e12..38526e1e5e 100644
--- a/be/src/vec/sink/vjdbc_table_sink.cpp
+++ b/be/src/vec/sink/vjdbc_table_sink.cpp
@@ -82,9 +82,9 @@ Status VJdbcTableSink::send(RuntimeState* state, Block* 
block, bool eos) {
     if (block == nullptr || block->rows() == 0) {
         return status;
     }
-
-    auto output_block = 
vectorized::VExprContext::get_output_block_after_execute_exprs(
-            _output_vexpr_ctxs, *block, status);
+    Block output_block;
+    
RETURN_IF_ERROR(vectorized::VExprContext::get_output_block_after_execute_exprs(
+            _output_vexpr_ctxs, *block, &output_block));
     materialize_block_inplace(output_block);
 
     uint32_t start_send_row = 0;
diff --git a/be/src/vec/sink/vmysql_result_writer.cpp 
b/be/src/vec/sink/vmysql_result_writer.cpp
index fcb133db10..086e28aec0 100644
--- a/be/src/vec/sink/vmysql_result_writer.cpp
+++ b/be/src/vec/sink/vmysql_result_writer.cpp
@@ -588,12 +588,10 @@ Status 
VMysqlResultWriter<is_binary_format>::append_block(Block& input_block) {
 
     // Exec vectorized expr here to speed up, block.rows() == 0 means expr exec
     // failed, just return the error status
-    auto block = 
VExprContext::get_output_block_after_execute_exprs(_output_vexpr_ctxs, 
input_block,
-                                                                    status);
+    Block block;
+    
RETURN_IF_ERROR(VExprContext::get_output_block_after_execute_exprs(_output_vexpr_ctxs,
+                                                                       
input_block, &block));
     auto num_rows = block.rows();
-    if (UNLIKELY(num_rows == 0)) {
-        return status;
-    }
     std::vector<MysqlRowBuffer<is_binary_format>> rows_buffer;
     rows_buffer.resize(num_rows);
     if constexpr (is_binary_format) {
diff --git a/be/src/vec/sink/vmysql_table_writer.cpp 
b/be/src/vec/sink/vmysql_table_writer.cpp
index 661b1c7f00..c4c7e48393 100644
--- a/be/src/vec/sink/vmysql_table_writer.cpp
+++ b/be/src/vec/sink/vmysql_table_writer.cpp
@@ -102,14 +102,10 @@ Status VMysqlTableWriter::append(vectorized::Block* 
block) {
     if (block == nullptr || block->rows() == 0) {
         return status;
     }
-
-    auto output_block = 
vectorized::VExprContext::get_output_block_after_execute_exprs(
-            _vec_output_expr_ctxs, *block, status);
-
+    Block output_block;
+    
RETURN_IF_ERROR(vectorized::VExprContext::get_output_block_after_execute_exprs(
+            _vec_output_expr_ctxs, *block, &output_block));
     auto num_rows = output_block.rows();
-    if (UNLIKELY(num_rows == 0)) {
-        return status;
-    }
     materialize_block_inplace(output_block);
     for (int i = 0; i < num_rows; ++i) {
         RETURN_IF_ERROR(insert_row(output_block, i));
diff --git a/be/src/vec/sink/vodbc_table_sink.cpp 
b/be/src/vec/sink/vodbc_table_sink.cpp
index 1cdf1a6d24..2b8a1e8806 100644
--- a/be/src/vec/sink/vodbc_table_sink.cpp
+++ b/be/src/vec/sink/vodbc_table_sink.cpp
@@ -71,9 +71,9 @@ Status VOdbcTableSink::send(RuntimeState* state, Block* 
block, bool eos) {
     if (block == nullptr || block->rows() == 0) {
         return status;
     }
-
-    auto output_block = 
vectorized::VExprContext::get_output_block_after_execute_exprs(
-            _output_vexpr_ctxs, *block, status);
+    Block output_block;
+    
RETURN_IF_ERROR(vectorized::VExprContext::get_output_block_after_execute_exprs(
+            _output_vexpr_ctxs, *block, &output_block));
     materialize_block_inplace(output_block);
 
     uint32_t start_send_row = 0;
diff --git a/be/src/vec/sink/vtablet_sink.cpp b/be/src/vec/sink/vtablet_sink.cpp
index 398e2a0cb2..6feda4278e 100644
--- a/be/src/vec/sink/vtablet_sink.cpp
+++ b/be/src/vec/sink/vtablet_sink.cpp
@@ -1184,11 +1184,8 @@ Status VOlapTableSink::send(RuntimeState* state, 
vectorized::Block* input_block,
     vectorized::Block block(input_block->get_columns_with_type_and_name());
     if (!_output_vexpr_ctxs.empty()) {
         // Do vectorized expr here to speed up load
-        block = vectorized::VExprContext::get_output_block_after_execute_exprs(
-                _output_vexpr_ctxs, *input_block, status);
-        if (UNLIKELY(block.rows() == 0)) {
-            return status;
-        }
+        
RETURN_IF_ERROR(vectorized::VExprContext::get_output_block_after_execute_exprs(
+                _output_vexpr_ctxs, *input_block, &block));
     }
 
     auto num_rows = block.rows();


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

Reply via email to