@abaplint/transpiler
Version:
90 lines • 4.06 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.DatabaseSetup = void 0;
const abaplint = require("@abaplint/core");
const sqlite_database_schema_1 = require("./schema_generation/sqlite_database_schema");
const pg_database_schema_1 = require("./schema_generation/pg_database_schema");
const snowflake_database_schema_1 = require("./schema_generation/snowflake_database_schema");
const populate_tables_1 = require("./populate_tables");
/////////////////////////
// NOTES
/////////////////////////
// Postgres is case sensitive, so all column names should be lower case
// Sqlite escapes field names with single qoute, postgres with double
class DatabaseSetup {
reg;
constructor(reg) {
this.reg = reg;
}
run(options) {
return {
schemas: {
sqlite: this.driver(new sqlite_database_schema_1.SQLiteDatabaseSchema(this.reg)),
hdb: ["todo"],
pg: this.driver(new pg_database_schema_1.PGDatabaseSchema(this.reg)),
snowflake: this.driver(new snowflake_database_schema_1.SnowflakeDatabaseSchema(this.reg)),
},
insert: this.buildInsert(options),
};
}
////////////////////
driver(schemaGenerator) {
const statements = [];
// CREATE TABLEs
for (const obj of this.reg.getObjects()) {
if (obj instanceof abaplint.Objects.Table
&& obj.getTableCategory() === abaplint.Objects.TableCategory.Transparent) {
statements.push(schemaGenerator.buildTABL(obj).trim());
}
}
// CREATE VIEWs after TABLEs
// todo: what if the view is based on another view?
for (const obj of this.reg.getObjects()) {
if (obj instanceof abaplint.Objects.View) {
statements.push(schemaGenerator.buildVIEW(obj).trim());
}
}
return statements;
}
buildInsert(options) {
// note: avoid hitting maximum statement size by splitting into multiple statements
const insert = [];
const populateTables = new populate_tables_1.PopulateTables(this.reg);
// INSERT data
for (const obj of this.reg.getObjects()) {
if (options?.populateTables?.tadir !== false) {
insert.push(populateTables.insertTADIR(obj));
}
if (obj instanceof abaplint.Objects.MessageClass) {
insert.push(...populateTables.insertT100(obj));
}
else if (options?.populateTables?.wwwparams !== false
&& obj instanceof abaplint.Objects.WebMIME) {
insert.push(...populateTables.insertWWWPARAMS(obj));
}
else if (obj instanceof abaplint.Objects.Class
|| obj instanceof abaplint.Objects.Interface
|| obj instanceof abaplint.Objects.Program) {
if (options?.populateTables?.reposrc !== false) {
insert.push(populateTables.insertREPOSRC(obj));
}
if ((obj instanceof abaplint.Objects.Class || obj instanceof abaplint.Objects.Interface)
&& options?.populateTables?.seosubco !== false) {
insert.push(...populateTables.insertSEOSUBCO(obj));
}
if ((obj instanceof abaplint.Objects.Class || obj instanceof abaplint.Objects.Interface)
&& options?.populateTables?.seosubcodf !== false) {
insert.push(...populateTables.insertSEOSUBCODF(obj));
}
if ((obj instanceof abaplint.Objects.Class || obj instanceof abaplint.Objects.Interface)
&& options?.populateTables?.seosubcotx !== false) {
insert.push(...populateTables.insertSEOSUBCOTX(obj));
}
}
}
insert.push(populateTables.insertT000());
return insert;
}
}
exports.DatabaseSetup = DatabaseSetup;
//# sourceMappingURL=index.js.map