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 8b10a1a3f7 [enhancement](VSlotRef) enhance column_id check in execute function during runtime (#11862) 8b10a1a3f7 is described below commit 8b10a1a3f76edb341cc686087c809ec334a372e4 Author: AlexYue <yj976240...@qq.com> AuthorDate: Thu Aug 18 09:12:26 2022 +0800 [enhancement](VSlotRef) enhance column_id check in execute function during runtime (#11862) The column id check in VSlotRef::execute function before is too strict for fuzzy test to continuously produce random query. Temporarily loosen the check logic. Moreover, there exists some careless call to VExpr::get_const_col, it might return a nullptr but not every function call checks if it's valid. It's an underlying problem. --- be/src/vec/exprs/table_function/vexplode.cpp | 4 +++- be/src/vec/exprs/table_function/vexplode_bitmap.cpp | 4 +++- be/src/vec/exprs/table_function/vexplode_json_array.cpp | 3 ++- be/src/vec/exprs/table_function/vexplode_numbers.cpp | 4 +++- be/src/vec/exprs/table_function/vexplode_split.cpp | 6 ++++-- be/src/vec/exprs/vbloom_predicate.cpp | 3 ++- be/src/vec/exprs/vcase_expr.cpp | 3 ++- be/src/vec/exprs/vcast_expr.cpp | 2 +- be/src/vec/exprs/vectorized_fn_call.cpp | 3 ++- be/src/vec/exprs/vin_predicate.cpp | 3 ++- be/src/vec/exprs/vslot_ref.cpp | 6 +++++- 11 files changed, 29 insertions(+), 12 deletions(-) diff --git a/be/src/vec/exprs/table_function/vexplode.cpp b/be/src/vec/exprs/table_function/vexplode.cpp index ba33a680cc..aa0249916a 100644 --- a/be/src/vec/exprs/table_function/vexplode.cpp +++ b/be/src/vec/exprs/table_function/vexplode.cpp @@ -17,6 +17,7 @@ #include "vec/exprs/table_function/vexplode.h" +#include "common/status.h" #include "vec/exprs/vexpr.h" namespace doris::vectorized { @@ -31,7 +32,8 @@ Status VExplodeTableFunction::process_init(vectorized::Block* block) { << _vexpr_context->root()->children().size(); int value_column_idx = -1; - _vexpr_context->root()->children()[0]->execute(_vexpr_context, block, &value_column_idx); + RETURN_IF_ERROR(_vexpr_context->root()->children()[0]->execute(_vexpr_context, block, + &value_column_idx)); _array_column = block->get_by_position(value_column_idx).column->convert_to_full_column_if_const(); diff --git a/be/src/vec/exprs/table_function/vexplode_bitmap.cpp b/be/src/vec/exprs/table_function/vexplode_bitmap.cpp index 0dec849980..f015ac7330 100644 --- a/be/src/vec/exprs/table_function/vexplode_bitmap.cpp +++ b/be/src/vec/exprs/table_function/vexplode_bitmap.cpp @@ -17,6 +17,7 @@ #include "vec/exprs/table_function/vexplode_bitmap.h" +#include "common/status.h" #include "util/bitmap_value.h" #include "vec/exprs/vexpr.h" @@ -32,7 +33,8 @@ Status VExplodeBitmapTableFunction::process_init(vectorized::Block* block) { << _vexpr_context->root()->children().size(); int value_column_idx = -1; - _vexpr_context->root()->children()[0]->execute(_vexpr_context, block, &value_column_idx); + RETURN_IF_ERROR(_vexpr_context->root()->children()[0]->execute(_vexpr_context, block, + &value_column_idx)); _value_column = block->get_by_position(value_column_idx).column; return Status::OK(); 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 aedcc53643..8ee1815117 100644 --- a/be/src/vec/exprs/table_function/vexplode_json_array.cpp +++ b/be/src/vec/exprs/table_function/vexplode_json_array.cpp @@ -32,7 +32,8 @@ Status VExplodeJsonArrayTableFunction::process_init(vectorized::Block* block) { << _vexpr_context->root()->children().size(); int text_column_idx = -1; - _vexpr_context->root()->children()[0]->execute(_vexpr_context, block, &text_column_idx); + RETURN_IF_ERROR(_vexpr_context->root()->children()[0]->execute(_vexpr_context, block, + &text_column_idx)); _text_column = block->get_by_position(text_column_idx).column; return Status::OK(); diff --git a/be/src/vec/exprs/table_function/vexplode_numbers.cpp b/be/src/vec/exprs/table_function/vexplode_numbers.cpp index c5b6629c06..1c01653ed2 100644 --- a/be/src/vec/exprs/table_function/vexplode_numbers.cpp +++ b/be/src/vec/exprs/table_function/vexplode_numbers.cpp @@ -17,6 +17,7 @@ #include "vec/exprs/table_function/vexplode_numbers.h" +#include "common/status.h" #include "vec/exprs/vexpr.h" namespace doris::vectorized { @@ -31,7 +32,8 @@ Status VExplodeNumbersTableFunction::process_init(vectorized::Block* block) { << _vexpr_context->root()->children().size(); int value_column_idx = -1; - _vexpr_context->root()->children()[0]->execute(_vexpr_context, block, &value_column_idx); + RETURN_IF_ERROR(_vexpr_context->root()->children()[0]->execute(_vexpr_context, block, + &value_column_idx)); _value_column = block->get_by_position(value_column_idx).column; return Status::OK(); diff --git a/be/src/vec/exprs/table_function/vexplode_split.cpp b/be/src/vec/exprs/table_function/vexplode_split.cpp index 1e124f5781..fbd37d4d3f 100644 --- a/be/src/vec/exprs/table_function/vexplode_split.cpp +++ b/be/src/vec/exprs/table_function/vexplode_split.cpp @@ -40,8 +40,10 @@ Status VExplodeSplitTableFunction::process_init(vectorized::Block* block) { int text_column_idx = -1; int delimiter_column_idx = -1; - _vexpr_context->root()->children()[0]->execute(_vexpr_context, block, &text_column_idx); - _vexpr_context->root()->children()[1]->execute(_vexpr_context, block, &delimiter_column_idx); + RETURN_IF_ERROR(_vexpr_context->root()->children()[0]->execute(_vexpr_context, block, + &text_column_idx)); + RETURN_IF_ERROR(_vexpr_context->root()->children()[1]->execute(_vexpr_context, block, + &delimiter_column_idx)); _text_column = block->get_by_position(text_column_idx).column; _delimiter_column = block->get_by_position(delimiter_column_idx).column; diff --git a/be/src/vec/exprs/vbloom_predicate.cpp b/be/src/vec/exprs/vbloom_predicate.cpp index 83e1443ec6..1613d839e7 100644 --- a/be/src/vec/exprs/vbloom_predicate.cpp +++ b/be/src/vec/exprs/vbloom_predicate.cpp @@ -19,6 +19,7 @@ #include <string_view> +#include "common/status.h" #include "vec/data_types/data_type_nullable.h" namespace doris::vectorized { @@ -63,7 +64,7 @@ Status VBloomPredicate::execute(VExprContext* context, Block* block, int* result doris::vectorized::ColumnNumbers arguments(_children.size()); for (int i = 0; i < _children.size(); ++i) { int column_id = -1; - _children[i]->execute(context, block, &column_id); + RETURN_IF_ERROR(_children[i]->execute(context, block, &column_id)); arguments[i] = column_id; } // call function diff --git a/be/src/vec/exprs/vcase_expr.cpp b/be/src/vec/exprs/vcase_expr.cpp index f11c9ef1e5..9058aa1710 100644 --- a/be/src/vec/exprs/vcase_expr.cpp +++ b/be/src/vec/exprs/vcase_expr.cpp @@ -17,6 +17,7 @@ #include "vec/exprs/vcase_expr.h" +#include "common/status.h" #include "vec/columns/column_nullable.h" namespace doris::vectorized { @@ -94,7 +95,7 @@ Status VCaseExpr::execute(VExprContext* context, Block* block, int* result_colum for (int i = 0; i < _children.size(); i++) { int column_id = -1; - _children[i]->execute(context, block, &column_id); + RETURN_IF_ERROR(_children[i]->execute(context, block, &column_id)); arguments[i] = column_id; block->replace_by_position_if_const(column_id); diff --git a/be/src/vec/exprs/vcast_expr.cpp b/be/src/vec/exprs/vcast_expr.cpp index b30cd14c40..e257e6fe8c 100644 --- a/be/src/vec/exprs/vcast_expr.cpp +++ b/be/src/vec/exprs/vcast_expr.cpp @@ -75,7 +75,7 @@ doris::Status VCastExpr::execute(VExprContext* context, doris::vectorized::Block int* result_column_id) { // for each child call execute int column_id = 0; - _children[0]->execute(context, block, &column_id); + RETURN_IF_ERROR(_children[0]->execute(context, block, &column_id)); size_t const_param_id = VExpr::insert_param( block, {_cast_param, _cast_param_data_type, _target_data_type_name}, block->rows()); diff --git a/be/src/vec/exprs/vectorized_fn_call.cpp b/be/src/vec/exprs/vectorized_fn_call.cpp index 99641090a8..f2fd7bcb5f 100644 --- a/be/src/vec/exprs/vectorized_fn_call.cpp +++ b/be/src/vec/exprs/vectorized_fn_call.cpp @@ -19,6 +19,7 @@ #include <string_view> +#include "common/status.h" #include "exprs/anyval_util.h" #include "exprs/rpc_fn.h" #include "fmt/format.h" @@ -85,7 +86,7 @@ doris::Status VectorizedFnCall::execute(VExprContext* context, doris::vectorized doris::vectorized::ColumnNumbers arguments(_children.size()); for (int i = 0; i < _children.size(); ++i) { int column_id = -1; - _children[i]->execute(context, block, &column_id); + RETURN_IF_ERROR(_children[i]->execute(context, block, &column_id)); arguments[i] = column_id; } // call function diff --git a/be/src/vec/exprs/vin_predicate.cpp b/be/src/vec/exprs/vin_predicate.cpp index 5f2d321ac8..fb36206a11 100644 --- a/be/src/vec/exprs/vin_predicate.cpp +++ b/be/src/vec/exprs/vin_predicate.cpp @@ -19,6 +19,7 @@ #include <string_view> +#include "common/status.h" #include "exprs/create_predicate_function.h" #include "vec/columns/column_set.h" #include "vec/core/field.h" @@ -85,7 +86,7 @@ Status VInPredicate::execute(VExprContext* context, Block* block, int* result_co doris::vectorized::ColumnNumbers arguments(_children.size()); for (int i = 0; i < _children.size(); ++i) { int column_id = -1; - _children[i]->execute(context, block, &column_id); + RETURN_IF_ERROR(_children[i]->execute(context, block, &column_id)); arguments[i] = column_id; } // call function diff --git a/be/src/vec/exprs/vslot_ref.cpp b/be/src/vec/exprs/vslot_ref.cpp index 0e44be9eb5..7ef39786da 100644 --- a/be/src/vec/exprs/vslot_ref.cpp +++ b/be/src/vec/exprs/vslot_ref.cpp @@ -55,7 +55,11 @@ Status VSlotRef::prepare(doris::RuntimeState* state, const doris::RowDescriptor& } Status VSlotRef::execute(VExprContext* context, Block* block, int* result_column_id) { - DCHECK_GE(_column_id, 0); + // comment DCHECK temporarily to make fuzzy test run smoothly + // DCHECK_GE(_column_id, 0); + if (_column_id < 0) { + return Status::InternalError("invalid column id {}", _column_id); + } *result_column_id = _column_id; return Status::OK(); } --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org