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 367x 367x 367x 367x 367x 367x 367x 367x 367x 367x 367x 367x 367x 367x 367x 367x 367x 367x 367x 367x 367x 1x  
import {CDSAnnotation} 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 parenSelect = seq("(", CDSSelect, ")");
    const unionBranch = altPrio(parenSelect, CDSSelect);
    const topLevelSelect = altPrio(
      seq(parenSelect, star(altPrio(seq("UNION", opt("ALL"), unionBranch), seq("EXCEPT", unionBranch), seq("INTERSECT", unionBranch)))),
      CDSSelect,
    );
    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(";"));
  }
}