All files / src/cds/expressions cds_aggregate.ts

100% Statements 14/14
100% Branches 1/1
100% Functions 1/1
100% Lines 14/14

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 141x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x
import {CDSArithmetics, CDSCase, CDSCast, CDSFunction, CDSPrefixedName, CDSString, CDSType} from ".";
import {altPrio, Expression, optPrio, seq} from "../../abap/2_statements/combi";
import {IStatementRunnable} from "../../abap/2_statements/statement_runnable";
 
export class CDSAggregate extends Expression {
  public getRunnable(): IStatementRunnable {
    // CDSPrefixedName handles dotted paths with path filters e.g. a._Assoc[filter].Field
    // CDSArithmetics handles expressions like sum(A + B), max(A * 100)
    // fieldAsType handles avg(field AS type) / sum(field AS type) — SAP inline type coercion
    const fieldAsType = seq(CDSPrefixedName, "AS", CDSType);
    const value = altPrio(CDSArithmetics, CDSCast, CDSCase, CDSFunction, fieldAsType, CDSPrefixedName, CDSString, "*");
    return seq(altPrio("MAX", "MIN", "SUM", "AVG", "COUNT"), "(", optPrio(altPrio("DISTINCT", "ALL")), value, ")");
  }
}