UNPKG

@abaplint/core

Version:
28 lines 2.05 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.CDSJoin = void 0; const _1 = require("."); const combi_1 = require("../../abap/2_statements/combi"); const cds_condition_1 = require("./cds_condition"); class CDSJoin extends combi_1.Expression { getRunnable() { const cardSide = (0, combi_1.altPrio)("EXACT ONE", "ONE", "MANY"); // LEFT OUTER [card TO card] — structured to cover all combinations const leftOuterCard = (0, combi_1.seq)("LEFT OUTER", cardSide, "TO", cardSide); const leftOuterToCard = (0, combi_1.seq)("LEFT OUTER TO", (0, combi_1.altPrio)("EXACT ONE", "ONE", "MANY")); // INNER [card TO card] const innerCard = (0, combi_1.seq)("INNER", cardSide, "TO", cardSide); const innerToCard = (0, combi_1.seq)("INNER TO", (0, combi_1.altPrio)("EXACT ONE", "ONE", "MANY")); const joinTypes = (0, combi_1.optPrio)((0, combi_1.altPrio)(leftOuterCard, leftOuterToCard, "LEFT OUTER", innerCard, innerToCard, "INNER", "CROSS", "RIGHT OUTER")); const cond = (0, combi_1.seq)(_1.CDSSource, "ON", cds_condition_1.CDSCondition); const foo = (0, combi_1.altPrio)((0, combi_1.seq)("(", cond, ")"), cond); // Parenthesized join sub-expression: JOIN (src innerJOIN src ON cond) ON outerCond const innerJoin = (0, combi_1.seq)(joinTypes, "JOIN", (0, combi_1.altPrio)((0, combi_1.seq)("(", cond, ")"), cond)); const parenJoinChain = (0, combi_1.seq)("(", _1.CDSSource, (0, combi_1.star)(innerJoin), ")", "ON", cds_condition_1.CDSCondition); // Inline nested join: JOIN src [JOIN src ON cond]* ON outerCond const inlineChain = (0, combi_1.seq)(_1.CDSSource, (0, combi_1.star)((0, combi_1.seq)(joinTypes, "JOIN", _1.CDSSource, "ON", cds_condition_1.CDSCondition)), "ON", cds_condition_1.CDSCondition); return (0, combi_1.seq)(joinTypes, "JOIN", (0, combi_1.altPrio)(parenJoinChain, inlineChain, foo, _1.CDSSource)); } } exports.CDSJoin = CDSJoin; //# sourceMappingURL=cds_join.js.map