* Evaluates wrapped-aggregate expressions against the aggregated row. * Copies synthetic __agg_N values into finalResults so the compiled wrapper * expressions can reference them, evaluates each wrapper, then removes the * synthetic keys so they don't leak onto user-visible result rows.
( finalResults: Record<string, any>, aggregatedRow: Record<string, any>, wrappedAggExprs: Record<string, (data: any) => any>, groupKeyCount: number = 0, )
| 633 | * synthetic keys so they don't leak onto user-visible result rows. |
| 634 | */ |
| 635 | function evaluateWrappedAggregates( |
| 636 | finalResults: Record<string, any>, |
| 637 | aggregatedRow: Record<string, any>, |
| 638 | wrappedAggExprs: Record<string, (data: any) => any>, |
| 639 | groupKeyCount: number = 0, |
| 640 | ): void { |
| 641 | for (const key of Object.keys(aggregatedRow)) { |
| 642 | if (key.startsWith(`__agg_`)) { |
| 643 | finalResults[key] = aggregatedRow[key] |
| 644 | } |
| 645 | } |
| 646 | for (let i = 0; i < groupKeyCount; i++) { |
| 647 | finalResults[`${GROUP_KEY_REF_PREFIX}${i}`] = aggregatedRow[`__key_${i}`] |
| 648 | } |
| 649 | for (const [alias, evaluator] of Object.entries(wrappedAggExprs)) { |
| 650 | finalResults[alias] = evaluator({ $selected: finalResults }) |
| 651 | } |
| 652 | for (const key of Object.keys(finalResults)) { |
| 653 | if (key.startsWith(`__agg_`) || key.startsWith(GROUP_KEY_REF_PREFIX)) { |
| 654 | delete finalResults[key] |
| 655 | } |
| 656 | } |
| 657 | } |
| 658 | |
| 659 | /** |
| 660 | * Checks whether an expression contains an aggregate anywhere in its tree. |
no test coverage detected