@abaplint/transpiler
Version:
57 lines • 2.75 kB
JavaScript
;
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