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 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x | import {CDSElement, CDSComposition, CDSGroupBy, CDSSource, CDSWhere, CDSHaving, CDSName, CDSPrefixedName, CDSString} from ".";
import {Expression, seq, str, opt, optPrio, star, altPrio, starPrio} from "../../abap/2_statements/combi";
import {IStatementRunnable} from "../../abap/2_statements/statement_runnable";
import {CDSAssociation} from "./cds_association";
import {CDSJoin} from "./cds_join";
export class CDSSelect extends Expression {
public getRunnable(): IStatementRunnable {
const fields = seq(star(seq(CDSElement, ",")), CDSElement);
const distinct = str("DISTINCT");
const elementList = seq(CDSElement, star(seq(",", CDSElement)), opt(","));
const elements = seq(str("{"), altPrio("*", elementList), str("}"));
const aspectValue = altPrio(CDSString, CDSPrefixedName);
const aspectBinding = seq(CDSPrefixedName, "=", ">", aspectValue);
const bindAspect = seq(
"BIND", "ASPECT", CDSName,
"(", aspectBinding, starPrio(seq(",", aspectBinding)), ")",
optPrio(seq("AS", CDSName)),
);
const parenSelect = seq("(", CDSSelect, ")");
const unionBranch = altPrio(parenSelect, CDSSelect);
return seq("SELECT",
optPrio(distinct),
opt(altPrio("*", fields)),
"FROM",
CDSSource,
star(CDSJoin),
star(altPrio(CDSComposition, CDSAssociation)),
starPrio(bindAspect),
opt(elements),
optPrio(CDSWhere),
optPrio(CDSGroupBy),
optPrio(CDSHaving),
optPrio(altPrio(
seq("UNION", optPrio("ALL"), unionBranch),
seq("EXCEPT", unionBranch),
seq("INTERSECT", unionBranch),
)));
}
}
|