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 | 1x 1x 1x 1x 1x 1x 1x 1x 10x 10x 10x 10x 10x 10x 10x 10x 10x 10x 10x 10x 10x 10x 10x 10x 10x 10x 10x 10x 10x 10x 10x 10x 10x 10x 10x 10x 10x 10x 1x | import {CDSAnnotation, CDSElement, CDSJoin, CDSName,
CDSSource, CDSTableField, CDSWhere, CDSWithParameters,
CDSAssociation, CDSComposition} from ".";
import {Expression, str, seq, star, opt, optPrio, plus, altPrio} from "../../abap/2_statements/combi";
import {IStatementRunnable} from "../../abap/2_statements/statement_runnable";
export class CDSDefineTableEntity extends Expression {
public getRunnable(): IStatementRunnable {
// Inline `{ ... }` body: one or more table-field entries. Each entry is
// wrapped in a CDSTableField node so downstream tooling can pair each
// field name with its own annotations.
const inlineBody = plus(CDSTableField);
const elementList = seq(CDSElement, star(seq(",", CDSElement)), opt(","));
const elements = seq(str("{"), altPrio("*", elementList), str("}"));
const selectBody = seq(
"AS", "SELECT", "FROM",
CDSSource,
star(CDSJoin),
star(altPrio(CDSComposition, CDSAssociation)),
opt(elements),
optPrio(CDSWhere),
);
return seq(
star(CDSAnnotation),
opt("DEFINE"),
opt("ROOT"),
"TABLE", "ENTITY", CDSName,
opt(CDSWithParameters),
altPrio(
seq(str("{"), inlineBody, str("}")),
selectBody,
),
opt(";"),
);
}
}
|