| 147 | } |
| 148 | |
| 149 | Status ScanNode::Prepare(RuntimeState* state) { |
| 150 | SCOPED_TIMER(runtime_profile_->total_time_counter()); |
| 151 | runtime_state_ = state; |
| 152 | RETURN_IF_ERROR(ExecNode::Prepare(state)); |
| 153 | |
| 154 | for (const TRuntimeFilterDesc& filter_desc : plan_node_.tnode_->runtime_filters) { |
| 155 | filter_ctxs_.emplace_back(); |
| 156 | FilterContext& filter_ctx = filter_ctxs_.back(); |
| 157 | filter_ctx.filter = state->filter_bank()->RegisterConsumer(filter_desc); |
| 158 | string filter_profile_title = |
| 159 | Substitute("$0$1 ($2)", RuntimeProfile::PREFIX_FILTER, filter_desc.filter_id, |
| 160 | PrettyPrinter::Print(filter_ctx.filter->filter_size(), TUnit::BYTES)); |
| 161 | RuntimeProfile* profile = |
| 162 | RuntimeProfile::Create(state->obj_pool(), filter_profile_title, false); |
| 163 | runtime_profile_->AddChild(profile); |
| 164 | filter_ctx.stats = state->obj_pool()->Add(new FilterStats(profile)); |
| 165 | } |
| 166 | |
| 167 | rows_read_counter_ = PROFILE_RowsRead.Instantiate(runtime_profile()); |
| 168 | materialize_tuple_timer_ = PROFILE_MaterializeTupleTime.Instantiate(runtime_profile()); |
| 169 | |
| 170 | DCHECK_EQ(filter_exprs_.size(), filter_ctxs_.size()); |
| 171 | for (int i = 0; i < filter_exprs_.size(); ++i) { |
| 172 | RETURN_IF_ERROR(ScalarExprEvaluator::Create(*filter_exprs_[i], state, pool_, |
| 173 | expr_perm_pool(), expr_results_pool(), &filter_ctxs_[i].expr_eval)); |
| 174 | } |
| 175 | return Status::OK(); |
| 176 | } |
| 177 | |
| 178 | void ScanNode::AddBytesReadCounters() { |
| 179 | bytes_read_counter_ = PROFILE_BytesRead.Instantiate(runtime_profile()); |
nothing calls this directly
no test coverage detected