import SQL dump POC

This commit is contained in:
Jan Prochazka
2022-04-18 14:22:16 +02:00
parent c7c667bbe0
commit a75e931fd5
6 changed files with 207 additions and 29 deletions

View File

@@ -0,0 +1,50 @@
const fs = require('fs');
const byline = require('byline');
const requireEngineDriver = require('../utility/requireEngineDriver');
const connectUtility = require('../utility/connectUtility');
const { splitQueryStream } = require('dbgate-query-splitter/lib/splitQueryStream');
const download = require('./download');
const stream = require('stream');
class ImportStream extends stream.Transform {
constructor(pool, driver) {
super({ objectMode: true });
this.pool = pool;
this.driver = driver;
}
async _transform(chunk, encoding, cb) {
await this.driver.script(this.pool, chunk);
cb();
}
}
function awaitStreamEnd(stream) {
return new Promise((resolve, reject) => {
stream.once('end', () => {
resolve(true);
});
stream.once('error', err => {
reject(err);
});
});
}
async function importDatabase({ connection = undefined, systemConnection = undefined, driver = undefined, inputFile }) {
console.log(`Importing database`);
if (!driver) driver = requireEngineDriver(connection);
const pool = systemConnection || (await connectUtility(driver, connection, 'write'));
console.log(`Connected.`);
const downloadedFile = await download(inputFile);
const fileStream = fs.createReadStream(downloadedFile, 'utf-8');
const lineStream = byline(fileStream);
const splittedStream = splitQueryStream(lineStream, driver.getQuerySplitterOptions());
const importStream = new ImportStream(pool, driver);
// @ts-ignore
splittedStream.pipe(importStream);
await awaitStreamEnd(splittedStream);
}
module.exports = importDatabase;

View File

@@ -22,6 +22,7 @@ const loadFile = require('./loadFile');
const deployDb = require('./deployDb');
const initializeApiEnvironment = require('./initializeApiEnvironment');
const dumpDatabase = require('./dumpDatabase');
const importDatabase = require('./importDatabase');
const dbgateApi = {
queryReader,
@@ -47,6 +48,7 @@ const dbgateApi = {
deployDb,
initializeApiEnvironment,
dumpDatabase,
importDatabase,
};
requirePlugin.initializeDbgateApi(dbgateApi);