| 168 | } |
| 169 | |
| 170 | Status UnionNode::Open(RuntimeState* state) { |
| 171 | SCOPED_TIMER(runtime_profile_->total_time_counter()); |
| 172 | ScopedOpenEventAdder ea(this); |
| 173 | RETURN_IF_ERROR(ExecNode::Open(state)); |
| 174 | // Open const expr lists. |
| 175 | for (const vector<ScalarExprEvaluator*>& evals : const_expr_evals_lists_) { |
| 176 | RETURN_IF_ERROR(ScalarExprEvaluator::Open(evals, state)); |
| 177 | } |
| 178 | // Open result expr lists. |
| 179 | for (const vector<ScalarExprEvaluator*>& evals : child_expr_evals_lists_) { |
| 180 | RETURN_IF_ERROR(ScalarExprEvaluator::Open(evals, state)); |
| 181 | } |
| 182 | |
| 183 | // Ensures that rows are available for clients to fetch after this Open() has |
| 184 | // succeeded. |
| 185 | if (!children_.empty()) RETURN_IF_ERROR(child(child_idx_)->Open(state)); |
| 186 | return Status::OK(); |
| 187 | } |
| 188 | |
| 189 | Status UnionNode::GetNextPassThrough(RuntimeState* state, RowBatch* row_batch) { |
| 190 | DCHECK(!ReachedLimit()); |
no test coverage detected