UNPKG

@abaplint/transpiler

Version:
90 lines 4.06 kB
"use strict"; 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