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 404x 404x 404x 404x 404x 404x 404x 404x 404x 404x 404x 404x 404x 404x 404x 404x 404x 404x 404x 404x 404x 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(";"));
  }
}