All files / src/cds/expressions cds_define_external_entity.ts

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

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 37 38 391x 1x 1x 1x 1x 1x 17x 17x 17x 17x 17x 17x 17x 17x 17x 17x 17x 17x 17x 17x 17x 17x 17x 17x 17x 17x 17x 17x 17x 17x 17x 17x 17x 17x 17x 17x 17x 1x  
import {CDSAnnotation, CDSAssociation, CDSComposition, CDSName, CDSType, CDSWithParameters} from ".";
import {Expression, str, seq, star, opt, optPrio, plus, alt, regex} from "../../abap/2_statements/combi";
import {IStatementRunnable} from "../../abap/2_statements/statement_runnable";
 
export class CDSDefineExternalEntity extends Expression {
  public getRunnable(): IStatementRunnable {
    const extNameValue = alt(CDSName, regex(/^"[^"]*"$/));
    const externalName = seq("EXTERNAL", "NAME", extNameValue);
    const nullability = optPrio(alt("NOT NULL", "NULL"));
    const field = seq(star(CDSAnnotation), optPrio(str("KEY")), CDSName, ":", CDSType, nullability, optPrio(externalName), ";");
    const assocOrComp = seq(star(CDSAnnotation), CDSName, ":", alt(CDSComposition, CDSAssociation), ";");
    const body = plus(alt(field, assocOrComp));
 
    const externalEntity = seq(
      opt("WRITABLE"),
      "EXTERNAL", "ENTITY", CDSName,
      opt(externalName),
      opt(CDSWithParameters),
    );
 
    const staticEntity = seq(
      "STATIC", "ENTITY", CDSName,
      opt(externalName),
    );
 
    return seq(
      star(CDSAnnotation),
      opt("DEFINE"),
      alt(externalEntity, staticEntity),
      str("{"), body, str("}"),
      opt(seq("WITH", "FEDERATED", "DATA", optPrio(alt(
        seq("PROVIDED", "AT", "RUNTIME"),
        seq("PROVIDED", "BY", CDSName),
      )))),
      opt(";"),
    );
  }
}