Files
dbgate/packages/api/src/utility/exportDbModelSql.js
SPRINX0\prochazka 904fc4d500 missing file
2024-11-06 12:19:42 +01:00

67 lines
1.8 KiB
JavaScript

const fs = require('fs-extra');
const path = require('path');
const yaml = require('js-yaml');
const { mkdirp } = require('mkdirp');
async function exportDbModelSql(dbModel, driver, outputDir, outputFile) {
const { tables, views, procedures, functions, triggers, matviews } = dbModel;
async function writeLists(writeList) {
await writeList(views, 'views');
await writeList(procedures, 'procedures');
await writeList(functions, 'functions');
await writeList(triggers, 'triggers');
await writeList(matviews, 'matviews');
}
if (outputFile) {
const dmp = driver.createDumper();
for (const table of tables || []) {
dmp.createTable({
...table,
foreignKeys: [],
dependencies: [],
});
}
for (const table of tables || []) {
for (const fk of table.foreignKeys || []) {
dmp.createForeignKey(fk);
}
}
writeLists((list, folder) => {
for (const obj of list || []) {
dmp.createSqlObject(obj);
}
});
const script = dmp.s;
await fs.writeFile(outputFile, script);
}
if (outputDir) {
await mkdirp(path.join(outputDir, 'tables'));
for (const table of tables || []) {
const dmp = driver.createDumper();
dmp.createTable({
...table,
foreignKeys: [],
dependencies: [],
});
await fs.writeFile(path.join(outputDir, 'tables', `${table.pureName}.sql`), dmp.s);
}
await writeLists(async (list, folder) => {
if (list.length > 0) {
await mkdirp(path.join(outputDir, folder));
}
for (const obj of list || []) {
const dmp = driver.createDumper();
dmp.createSqlObject(obj);
await fs.writeFile(path.join(outputDir, folder, `${obj.pureName}.sql`), dmp.s);
}
});
}
}
module.exports = exportDbModelSql;