| 56 | needs_finalize_(taggregator.need_finalize) {} |
| 57 | |
| 58 | Status AggregatorConfig::Init( |
| 59 | const TAggregator& taggregator, FragmentState* state, PlanNode* pnode) { |
| 60 | DCHECK(intermediate_tuple_desc_ != nullptr); |
| 61 | DCHECK(output_tuple_desc_ != nullptr); |
| 62 | DCHECK_EQ(intermediate_tuple_desc_->slots().size(), output_tuple_desc_->slots().size()); |
| 63 | int j = taggregator.grouping_exprs.size(); |
| 64 | for (int i = 0; i < taggregator.aggregate_functions.size(); ++i, ++j) { |
| 65 | SlotDescriptor* intermediate_slot_desc = intermediate_tuple_desc_->slots()[j]; |
| 66 | SlotDescriptor* output_slot_desc = output_tuple_desc_->slots()[j]; |
| 67 | AggFn* agg_fn; |
| 68 | RETURN_IF_ERROR(AggFn::Create(taggregator.aggregate_functions[i], input_row_desc_, |
| 69 | *intermediate_slot_desc, *output_slot_desc, state, &agg_fn)); |
| 70 | aggregate_functions_.push_back(agg_fn); |
| 71 | } |
| 72 | |
| 73 | RETURN_IF_ERROR( |
| 74 | ScalarExpr::Create(pnode->tnode_->conjuncts, row_desc_, state, &conjuncts_)); |
| 75 | return Status::OK(); |
| 76 | } |
| 77 | |
| 78 | void AggregatorConfig::Close() { |
| 79 | ScalarExpr::Close(conjuncts_); |
no test coverage detected