All files / src/cds/expressions cds_define_external_entity.ts

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

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 39 401x 1x 1x 1x 1x 1x 25x 25x 25x 25x 25x 25x 25x 25x 25x 25x 25x 25x 25x 25x 25x 25x 25x 25x 25x 25x 25x 25x 25x 25x 25x 25x 25x 25x 25x 25x 25x 25x 1x  
import {CDSAnnotation, CDSAssociation, CDSComposition, CDSName, CDSType, CDSWithParameters} from ".";
import {Expression, str, seq, star, opt, optPrio, altPrio, 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"),
      opt("ROOT"),
      alt(externalEntity, staticEntity),
      str("{"), body, str("}"),
      opt(seq("WITH", "FEDERATED", "DATA", optPrio(alt(
        seq("PROVIDED", "AT", "RUNTIME"),
        seq("PROVIDED", "BY", CDSName),
      )), optPrio(seq("ON", "UNLINKED", altPrio("FAIL", "IGNORE"))))),
      opt(";"),
    );
  }
}