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 40 41 42 43 44 45 46 47 48 49 50 | 1x 1x 1x 1x 1x 1x 43x 43x 43x 43x 43x 43x 43x 43x 43x 43x 43x 43x 43x 43x 43x 43x 43x 43x 43x 43x 43x 43x 43x 43x 43x 43x 43x 43x 43x 43x 43x 43x 43x 43x 43x 43x 43x 43x 43x 43x 43x 43x 1x | import {CDSAnnotation, CDSAs, CDSCondition, CDSInteger, CDSName, CDSParametersSelect, CDSPrefixedName, CDSString, CDSWithParameters} from ".";
import {Expression, opt, optPrio, seq, star, altPrio} from "../../abap/2_statements/combi";
import {IStatementRunnable} from "../../abap/2_statements/statement_runnable";
export class CDSDefineHierarchy extends Expression {
public getRunnable(): IStatementRunnable {
const field = seq(star(CDSAnnotation), optPrio("KEY"), CDSPrefixedName, optPrio(CDSAs));
const sortDirection = altPrio("ASCENDING", "DESCENDING");
const siblingsOrderField = seq(CDSPrefixedName, optPrio(sortDirection));
const siblingsOrder = seq("SIBLINGS", "ORDER", "BY", siblingsOrderField, star(seq(",", siblingsOrderField)));
const directory = seq("DIRECTORY", CDSName, "FILTER", "BY", CDSCondition);
// DATE PERIOD: period from <field> to <field> [valid from :p to :p]
const datePeriod = seq(
"PERIOD", "FROM", CDSName, "TO", CDSName,
opt(seq("VALID", "FROM", CDSPrefixedName, "TO", CDSPrefixedName)),
);
const depthValue = altPrio(CDSString, CDSInteger, CDSPrefixedName);
const loadMode = altPrio("BULK", "INCREMENTAL", CDSPrefixedName);
const hierarchyBody = seq(
"SOURCE", CDSName, opt(CDSParametersSelect),
"CHILD", "TO", "PARENT", "ASSOCIATION", CDSName,
opt(directory),
opt(datePeriod),
opt(seq("START", "WHERE", CDSCondition)),
opt(siblingsOrder),
opt(seq("LOAD", loadMode)),
opt(seq("DEPTH", depthValue)),
opt(seq("NODETYPE", CDSName)),
opt(seq("MULTIPLE", "PARENTS", altPrio("NOT ALLOWED", "ALLOWED", seq("LEAVES", optPrio("ONLY"))))),
opt(seq("ORPHANS", altPrio("IGNORE", "ROOT", "ERROR"))),
opt(seq("CYCLES", altPrio("BREAKUP", "ERROR"))),
opt(seq("GENERATE", "SPANTREE")),
opt(seq("CACHE", altPrio("ON", "OFF", "FORCE"))),
);
return seq(
star(CDSAnnotation),
opt("DEFINE"), "HIERARCHY", CDSName,
opt(CDSWithParameters),
"AS", "PARENT", "CHILD", "HIERARCHY", "(", hierarchyBody, ")",
"{", seq(field, star(seq(",", field))), "}",
opt(";"),
);
}
}
|