MCPcopy Create free account
hub / github.com/FirebirdSQL/firebird / execute

Method execute

src/dsql/AggNodes.cpp:448–488  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

446}
447
448dsc* AggNode::execute(thread_db* tdbb, Request* request) const
449{
450 impure_value_ex* impure = request->getImpure<impure_value_ex>(impureOffset);
451
452 if (impure->vlu_blob)
453 {
454 impure->vlu_blob->BLB_close(tdbb);
455 impure->vlu_blob = NULL;
456 }
457
458 if (distinct)
459 {
460 impure_agg_sort* asbImpure = request->getImpure<impure_agg_sort>(asb->impure);
461 dsc desc = asb->desc;
462
463 // Sort the values already "put" to sort.
464 asbImpure->iasb_sort->sort(tdbb);
465
466 // Now get the sorted/projected values and compute the aggregate.
467
468 while (true)
469 {
470 UCHAR* data;
471 asbImpure->iasb_sort->get(tdbb, reinterpret_cast<ULONG**>(&data));
472
473 if (!data)
474 {
475 // We are done, close the sort.
476 delete asbImpure->iasb_sort;
477 asbImpure->iasb_sort = NULL;
478 break;
479 }
480
481 desc.dsc_address = data + (asb->intl ? asb->keyItems[1].getSkdOffset() : 0);
482
483 aggPass(tdbb, request, &desc);
484 }
485 }
486
487 return aggExecute(tdbb, request);
488}
489
490
491//--------------------

Callers 2

DSQL_executeFunction · 0.45
DSQL_execute_immediateFunction · 0.45

Calls 4

BLB_closeMethod · 0.80
getSkdOffsetMethod · 0.80
sortMethod · 0.45
getMethod · 0.45

Tested by

no test coverage detected