@abaplint/transpiler
Version:
48 lines • 2.14 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.InsertDatabaseTranspiler = void 0;
exports.findConnection = findConnection;
const abaplint = require("@abaplint/core");
const chunk_1 = require("../chunk");
const expressions_1 = require("../expressions");
class InsertDatabaseTranspiler {
transpile(node, traversal) {
const dbtab = node.findFirstExpression(abaplint.Expressions.DatabaseTable);
if (dbtab === undefined) {
throw new Error("internal error, InsertDatabaseTranspiler");
}
const table = new expressions_1.DatabaseTableTranspiler(false).transpile(dbtab, traversal);
const options = [];
const values = node.findExpressionAfterToken("VALUES");
if (values) {
const tvalues = traversal.traverse(values);
options.push(`"values": ` + tvalues.getCode());
}
const from = node.findExpressionAfterToken("FROM");
if (from && from.get() instanceof abaplint.Expressions.SQLSource) {
const tvalues = traversal.traverse(from);
options.push(`"values": ` + tvalues.getCode());
}
const fromTable = node.findExpressionAfterToken("TABLE");
if (fromTable && fromTable.get() instanceof abaplint.Expressions.SQLSource) {
const tvalues = traversal.traverse(fromTable);
options.push(`"table": ` + tvalues.getCode());
}
const connection = node.findDirectExpression(abaplint.Expressions.DatabaseConnection);
if (connection) {
const con = findConnection(connection);
options.push(`"connection": "${con}"`);
}
return new chunk_1.Chunk(`await abap.statements.insertDatabase(${table.getCode()}, {${options.join(", ")}});`);
}
}
exports.InsertDatabaseTranspiler = InsertDatabaseTranspiler;
function findConnection(connection) {
let con = connection.getLastToken().getStr().toUpperCase();
if (con === "DEFAULT_") {
// todo, workaround for replacing of keywords,
con = "DEFAULT";
}
return con;
}
//# sourceMappingURL=insert_database.js.map