diff --git a/be/src/pipeline/exec/multi_cast_data_stream_source.cpp b/be/src/pipeline/exec/multi_cast_data_stream_source.cpp index 3ef71000633ecb..dfb53349062cce 100644 --- a/be/src/pipeline/exec/multi_cast_data_stream_source.cpp +++ b/be/src/pipeline/exec/multi_cast_data_stream_source.cpp @@ -86,6 +86,12 @@ Status MultiCastDataStreamerSourceOperator::get_block(RuntimeState* state, vecto SourceState& source_state) { bool eos = false; _multi_cast_data_streamer->pull(_consumer_id, block, &eos); + + if (!_conjuncts.empty()) { + RETURN_IF_ERROR( + vectorized::VExprContext::filter_block(_conjuncts, block, block->columns())); + } + if (!_output_expr_contexts.empty()) { vectorized::Block output_block; RETURN_IF_ERROR(vectorized::VExprContext::get_output_block_after_execute_exprs( @@ -93,12 +99,6 @@ Status MultiCastDataStreamerSourceOperator::get_block(RuntimeState* state, vecto materialize_block_inplace(output_block); block->swap(output_block); } - - if (!_conjuncts.empty()) { - RETURN_IF_ERROR( - vectorized::VExprContext::filter_block(_conjuncts, block, block->columns())); - } - if (eos) { source_state = SourceState::FINISHED; } diff --git a/be/src/vec/exec/vselect_node.h b/be/src/vec/exec/vselect_node.h index 1b425e80afc864..d6783d72372948 100644 --- a/be/src/vec/exec/vselect_node.h +++ b/be/src/vec/exec/vselect_node.h @@ -37,6 +37,7 @@ class VSelectNode final : public ExecNode { Status get_next(RuntimeState* state, vectorized::Block* block, bool* eos) override; Status close(RuntimeState* state) override; Status pull(RuntimeState* state, vectorized::Block* output_block, bool* eos) override; + private: // true if last get_next() call on child signalled eos bool _child_eos;