@abaplint/core
Version:
abaplint - Core API
32 lines • 2.49 kB
JavaScript
;
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, "]");
const cardinalityJoin = (0, combi_1.seq)("[", cds_integer_1.CDSInteger, ":", joinType, "]");
// [1: left outer where (condition)] — cardinality + join-type + WHERE filter
const cardinalityJoinWhere = (0, combi_1.seq)("[", cds_integer_1.CDSInteger, ":", joinType, "WHERE", cds_condition_1.CDSCondition, "]");
const pathFilter = (0, combi_1.altPrio)(cardinalityJoinWhere, cardinalityJoin, joinRedirect, (0, combi_1.seq)("[", cds_integer_1.CDSInteger, ":", 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.opt)((0, combi_1.altPrio)(cds_parameters_select_1.CDSParametersSelect, cds_parameters_1.CDSParameters)), (0, combi_1.opt)(pathFilter));
return (0, combi_1.seq)(cds_name_1.CDSName, (0, combi_1.opt)((0, combi_1.altPrio)(cds_parameters_1.CDSParameters, cds_parameters_select_1.CDSParametersSelect)), (0, combi_1.opt)(pathFilter), (0, combi_1.starPrio)(segment));
}
}
exports.CDSPrefixedName = CDSPrefixedName;
//# sourceMappingURL=cds_prefixed_name.js.map