UNPKG

@abaplint/transpiler

Version:
57 lines 2.75 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.DeleteInternalTranspiler = void 0; const abaplint = require("@abaplint/core"); const chunk_1 = require("../chunk"); class DeleteInternalTranspiler { transpile(node, traversal) { const target = traversal.traverse(node.findDirectExpression(abaplint.Expressions.Target)).getCode(); const concat = node.concatTokens().toUpperCase(); const extra = []; const componentCond = node.findDirectExpression(abaplint.Expressions.ComponentCond); if (componentCond) { extra.push("where: async " + traversal.traverse(componentCond).getCode()); } const componentCompare = node.findDirectExpression(abaplint.Expressions.ComponentCompare); if (componentCompare) { // todo: this can be optimized, WITH TABLE KEY extra.push("where: async " + traversal.traverse(componentCompare).getCode()); } // todo, this is not completely correct, fields might have the name ADJACENT // comparisons should be on table key unless other is specified, but we're unaware if (node.findDirectTokenByText("ADJACENT")) { extra.push("adjacent: true"); if (node.findDirectTokenByText("COMPARING") && !concat.includes("COMPARING ALL FIELDS")) { const comparing = node.findAllExpressions(abaplint.Expressions.SimpleFieldChain2); if (comparing) { const compareFields = comparing.map(i => "'" + i.getFirstToken().getStr() + "'").join(","); extra.push("comparing: [" + compareFields + "]"); } } } const index = node.findExpressionAfterToken("INDEX"); if (index) { extra.push("index: " + traversal.traverse(index).getCode()); } const from = node.findExpressionAfterToken("FROM"); if (from && node.findDirectTokenByText("ADJACENT") === undefined) { if (concat.startsWith("DELETE TABLE ") === true) { extra.push("fromValue: " + traversal.traverse(from).getCode()); } else { extra.push("from: " + traversal.traverse(from).getCode()); } } const to = node.findExpressionAfterToken("TO"); if (to) { extra.push("to: " + traversal.traverse(to).getCode()); } let blah = ""; if (extra.length > 0) { blah = ",{" + extra.join(",") + "}"; } return new chunk_1.Chunk("await abap.statements.deleteInternal(" + target + blah + ");"); } } exports.DeleteInternalTranspiler = DeleteInternalTranspiler; //# sourceMappingURL=delete_internal.js.map