MCPcopy Create free account
hub / github.com/apache/impala / Update

Method Update

be/src/exprs/agg-fn-evaluator.cc:310–378  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

308}
309
310void AggFnEvaluator::Update(const TupleRow* row, Tuple* dst, void* fn) {
311 if (fn == nullptr) return;
312
313 const SlotDescriptor& slot_desc = intermediate_slot_desc();
314 SetAnyVal(slot_desc, dst, staging_intermediate_val_);
315
316 for (int i = 0; i < input_evals_.size(); ++i) {
317 void* src_slot = input_evals_[i]->GetValue(row);
318 DCHECK(&input_evals_[i]->root() == agg_fn_.GetChild(i));
319 AnyValUtil::SetAnyVal(src_slot, agg_fn_.GetChild(i)->type(), staging_input_vals_[i]);
320 }
321
322 // TODO: this part is not so good and not scalable. It can be replaced with
323 // codegen but we can also consider leaving it for the first few cases for
324 // debugging.
325 switch (input_evals_.size()) {
326 case 0:
327 reinterpret_cast<UpdateFn0>(fn)(agg_fn_ctx_.get(), staging_intermediate_val_);
328 break;
329 case 1:
330 reinterpret_cast<UpdateFn1>(fn)(agg_fn_ctx_.get(),
331 *staging_input_vals_[0], staging_intermediate_val_);
332 break;
333 case 2:
334 reinterpret_cast<UpdateFn2>(fn)(agg_fn_ctx_.get(),
335 *staging_input_vals_[0], *staging_input_vals_[1], staging_intermediate_val_);
336 break;
337 case 3:
338 reinterpret_cast<UpdateFn3>(fn)(agg_fn_ctx_.get(),
339 *staging_input_vals_[0], *staging_input_vals_[1],
340 *staging_input_vals_[2], staging_intermediate_val_);
341 break;
342 case 4:
343 reinterpret_cast<UpdateFn4>(fn)(agg_fn_ctx_.get(),
344 *staging_input_vals_[0], *staging_input_vals_[1],
345 *staging_input_vals_[2], *staging_input_vals_[3], staging_intermediate_val_);
346 break;
347 case 5:
348 reinterpret_cast<UpdateFn5>(fn)(agg_fn_ctx_.get(),
349 *staging_input_vals_[0], *staging_input_vals_[1],
350 *staging_input_vals_[2], *staging_input_vals_[3],
351 *staging_input_vals_[4], staging_intermediate_val_);
352 break;
353 case 6:
354 reinterpret_cast<UpdateFn6>(fn)(agg_fn_ctx_.get(),
355 *staging_input_vals_[0], *staging_input_vals_[1],
356 *staging_input_vals_[2], *staging_input_vals_[3],
357 *staging_input_vals_[4], *staging_input_vals_[5], staging_intermediate_val_);
358 break;
359 case 7:
360 reinterpret_cast<UpdateFn7>(fn)(agg_fn_ctx_.get(),
361 *staging_input_vals_[0], *staging_input_vals_[1],
362 *staging_input_vals_[2], *staging_input_vals_[3],
363 *staging_input_vals_[4], *staging_input_vals_[5],
364 *staging_input_vals_[6], staging_intermediate_val_);
365 break;
366 case 8:
367 reinterpret_cast<UpdateFn8>(fn)(agg_fn_ctx_.get(),

Callers

nothing calls this directly

Calls 7

SetAnyValFunction · 0.85
rootMethod · 0.80
GetChildMethod · 0.80
getMethod · 0.65
sizeMethod · 0.45
GetValueMethod · 0.45
typeMethod · 0.45

Tested by

no test coverage detected