All files / src/cds/expressions cds_define_projection.ts

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

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 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 371x 1x 1x 1x 1x 1x 1x 87x 87x 87x 87x 87x 87x 87x 87x 87x 87x 87x 87x 87x 87x 87x 87x 87x 87x 87x 87x 87x 87x 87x 87x 87x 87x 87x 87x 1x  
import {CDSAnnotation, CDSAs, CDSAssociation, CDSElement, CDSName, CDSParametersSelect, CDSProviderContract, CDSWhere, CDSWithParameters} from ".";
import {Release} from "../..";
import {Expression, seq, star, opt, str, ver, altPrio, optPrio} from "../../abap/2_statements/combi";
import {IStatementRunnable} from "../../abap/2_statements/statement_runnable";
 
export class CDSDefineProjection extends Expression {
  public getRunnable(): IStatementRunnable {
    // redefine association _Assoc redirected to [composition child | parent] Entity
    const redefineAssoc = seq(
      "REDEFINE", "ASSOCIATION", CDSName,
      "REDIRECTED", "TO",
      optPrio(altPrio(seq("COMPOSITION", "CHILD"), "PARENT")),
      CDSName,
    );
 
    return seq(star(CDSAnnotation),
               opt("DEFINE"),
               opt("ROOT"),
               opt("TRANSIENT"),
               "VIEW",
               ver(Release.v755, opt("ENTITY")),
               CDSName,
               opt(CDSProviderContract),
               opt(CDSWithParameters),
               "AS PROJECTION ON",
               CDSName,
               opt(CDSParametersSelect),
               opt(CDSAs),
               star(altPrio(CDSAssociation, redefineAssoc)),
               str("{"),
               seq(CDSElement, star(seq(",", CDSElement)), opt(",")),
               str("}"),
               opt(CDSWhere),
               opt(";"));
  }
}