UNPKG

@abaplint/core

Version:
43 lines 3.44 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.CDSPrefixedName = void 0; const combi_1 = require("../../abap/2_statements/combi"); const cds_name_1 = require("./cds_name"); const cds_parameters_1 = require("./cds_parameters"); const cds_parameters_select_1 = require("./cds_parameters_select"); const cds_condition_1 = require("./cds_condition"); const cds_integer_1 = require("./cds_integer"); const cds_string_1 = require("./cds_string"); class CDSPrefixedName extends combi_1.Expression { getRunnable() { // Path filter variants: // [inner], [left outer], [cross] — join-type redirect // [1:left outer], [1:inner] — cardinality + join-type // [1: condition] — cardinality + filter condition // [condition] — filter condition only const joinType = (0, combi_1.altPrio)("LEFT OUTER", "INNER", "CROSS"); const joinRedirect = (0, combi_1.seq)("[", joinType, "]"); // Cardinality spec: integer or * (e.g. [*:inner], [1:inner]) const cardSpec = (0, combi_1.altPrio)(cds_integer_1.CDSInteger, "*"); const cardinalityJoin = (0, combi_1.seq)("[", cardSpec, ":", joinType, "]"); // [1: left outer where condition] — cardinality + join-type + WHERE filter const cardinalityJoinWhere = (0, combi_1.seq)("[", cardSpec, ":", joinType, "WHERE", cds_condition_1.CDSCondition, "]"); // [left outer where condition] — join-type + WHERE filter (no cardinality prefix) const joinWhere = (0, combi_1.seq)("[", joinType, "WHERE", cds_condition_1.CDSCondition, "]"); // Text cardinality forms: [to one: cond], [to many: cond] const textCard = (0, combi_1.altPrio)("TO ONE", "TO MANY"); const textCardFilter = (0, combi_1.seq)("[", textCard, ":", cds_condition_1.CDSCondition, "]"); // Numeric range cardinality: [0..1: cond], [1..1: cond], [0..*: cond], [n..m: cond] const cardNum = (0, combi_1.altPrio)(cds_integer_1.CDSInteger, "*"); const rangeCard = (0, combi_1.seq)(cds_integer_1.CDSInteger, ".", ".", cardNum); const rangeCardFilter = (0, combi_1.seq)("[", rangeCard, ":", cds_condition_1.CDSCondition, "]"); const pathFilter = (0, combi_1.altPrio)(cardinalityJoinWhere, joinWhere, cardinalityJoin, joinRedirect, textCardFilter, rangeCardFilter, (0, combi_1.seq)("[", cardSpec, ":", cds_condition_1.CDSCondition, "]"), (0, combi_1.seq)("[", cds_condition_1.CDSCondition, "]")); // Each dotted segment may have its own path filter: A[cond].B[cond].C // The final segment may also be a string literal: #enum.'value' // A segment may have a parameterized call: _Assoc( P_Key : value ) or _Assoc[filter] const segment = (0, combi_1.seq)(".", (0, combi_1.altPrio)(cds_string_1.CDSString, cds_name_1.CDSName), (0, combi_1.optPrio)((0, combi_1.altPrio)(cds_parameters_select_1.CDSParametersSelect, cds_parameters_1.CDSParameters)), (0, combi_1.optPrio)(pathFilter)); return (0, combi_1.seq)(cds_name_1.CDSName, (0, combi_1.optPrio)((0, combi_1.altPrio)(cds_parameters_1.CDSParameters, cds_parameters_select_1.CDSParametersSelect)), (0, combi_1.optPrio)(pathFilter), (0, combi_1.star)(segment)); } } exports.CDSPrefixedName = CDSPrefixedName; //# sourceMappingURL=cds_prefixed_name.js.map