All files / src/cds/expressions cds_define_view.ts

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

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 331x 1x 1x 1x 1x 1x 1x 1x 1x 1x 451x 451x 451x 451x 451x 451x 451x 451x 451x 451x 451x 451x 451x 451x 451x 451x 451x 451x 451x 451x 451x 1x  
import {CDSAnnotation, CDSParenSelect} from ".";
import {Release} from "../..";
import {altPrio, Expression, opt, seq, star, ver} from "../../abap/2_statements/combi";
import {IStatementRunnable} from "../../abap/2_statements/statement_runnable";
import {CDSName} from "./cds_name";
import {CDSSelect} from "./cds_select";
import {CDSWithParameters} from "./cds_with_parameters";
 
export class CDSDefineView extends Expression {
  public getRunnable(): IStatementRunnable {
    const columnAlias = seq("(", CDSName, star(seq(",", CDSName)), ")");
    const unionBranch = altPrio(CDSParenSelect, CDSSelect);
    const unionOps = star(altPrio(seq("UNION", opt("ALL"), unionBranch), seq("EXCEPT", unionBranch), seq("INTERSECT", unionBranch)));
    const topLevelSelect = altPrio(
      seq(CDSParenSelect, unionOps),
      seq(CDSSelect, unionOps),
    );
    return seq(star(CDSAnnotation),
               opt("DEFINE"),
               opt("ROOT"),
               opt("WRITABLE"),
               "VIEW",
               ver(Release.v755, opt("ENTITY")),
               CDSName,
               opt(columnAlias),
               opt(CDSWithParameters),
               "AS",
               topLevelSelect,
               opt(seq("WITH", "HIERARCHY", CDSName)),
               opt(";"));
  }
}