mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-18 20:46:01 +00:00
close dbhandles after shell script (missing tableReader)
This commit is contained in:
@@ -19,32 +19,39 @@ async function dataDuplicator({
|
|||||||
systemConnection,
|
systemConnection,
|
||||||
}) {
|
}) {
|
||||||
if (!driver) driver = requireEngineDriver(connection);
|
if (!driver) driver = requireEngineDriver(connection);
|
||||||
const pool = systemConnection || (await connectUtility(driver, connection, 'write'));
|
|
||||||
|
const dbhan = systemConnection || (await connectUtility(driver, connection, 'write'));
|
||||||
|
|
||||||
logger.info(`Connected.`);
|
try {
|
||||||
|
logger.info(`Connected.`);
|
||||||
|
|
||||||
if (!analysedStructure) {
|
if (!analysedStructure) {
|
||||||
analysedStructure = await driver.analyseFull(pool);
|
analysedStructure = await driver.analyseFull(dbhan);
|
||||||
|
}
|
||||||
|
|
||||||
|
const dupl = new DataDuplicator(
|
||||||
|
dbhan,
|
||||||
|
driver,
|
||||||
|
analysedStructure,
|
||||||
|
items.map(item => ({
|
||||||
|
name: item.name,
|
||||||
|
operation: item.operation,
|
||||||
|
matchColumns: item.matchColumns,
|
||||||
|
openStream:
|
||||||
|
item.openStream ||
|
||||||
|
(() => jsonLinesReader({ fileName: path.join(resolveArchiveFolder(archive), `${item.name}.jsonl`) })),
|
||||||
|
})),
|
||||||
|
stream,
|
||||||
|
copyStream,
|
||||||
|
options
|
||||||
|
);
|
||||||
|
|
||||||
|
await dupl.run();
|
||||||
|
} finally {
|
||||||
|
if (!systemConnection) {
|
||||||
|
await driver.close(dbhan);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const dupl = new DataDuplicator(
|
|
||||||
pool,
|
|
||||||
driver,
|
|
||||||
analysedStructure,
|
|
||||||
items.map(item => ({
|
|
||||||
name: item.name,
|
|
||||||
operation: item.operation,
|
|
||||||
matchColumns: item.matchColumns,
|
|
||||||
openStream:
|
|
||||||
item.openStream ||
|
|
||||||
(() => jsonLinesReader({ fileName: path.join(resolveArchiveFolder(archive), `${item.name}.jsonl`) })),
|
|
||||||
})),
|
|
||||||
stream,
|
|
||||||
copyStream,
|
|
||||||
options
|
|
||||||
);
|
|
||||||
|
|
||||||
await dupl.run();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = dataDuplicator;
|
module.exports = dataDuplicator;
|
||||||
|
|||||||
@@ -27,15 +27,23 @@ async function dumpDatabase({
|
|||||||
logger.info(`Dumping database`);
|
logger.info(`Dumping database`);
|
||||||
|
|
||||||
if (!driver) driver = requireEngineDriver(connection);
|
if (!driver) driver = requireEngineDriver(connection);
|
||||||
const pool = systemConnection || (await connectUtility(driver, connection, 'read', { forceRowsAsObjects: true }));
|
|
||||||
logger.info(`Connected.`);
|
|
||||||
|
|
||||||
const dumper = await driver.createBackupDumper(pool, {
|
const dbhan = systemConnection || (await connectUtility(driver, connection, 'read', { forceRowsAsObjects: true }));
|
||||||
outputFile,
|
|
||||||
databaseName,
|
try {
|
||||||
schemaName,
|
logger.info(`Connected.`);
|
||||||
});
|
|
||||||
await doDump(dumper);
|
const dumper = await driver.createBackupDumper(dbhan, {
|
||||||
|
outputFile,
|
||||||
|
databaseName,
|
||||||
|
schemaName,
|
||||||
|
});
|
||||||
|
await doDump(dumper);
|
||||||
|
} finally {
|
||||||
|
if (!systemConnection) {
|
||||||
|
await driver.close(dbhan);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = dumpDatabase;
|
module.exports = dumpDatabase;
|
||||||
|
|||||||
@@ -9,12 +9,15 @@ async function executeQuery({ connection = undefined, systemConnection = undefin
|
|||||||
|
|
||||||
if (!driver) driver = requireEngineDriver(connection);
|
if (!driver) driver = requireEngineDriver(connection);
|
||||||
const dbhan = systemConnection || (await connectUtility(driver, connection, 'script'));
|
const dbhan = systemConnection || (await connectUtility(driver, connection, 'script'));
|
||||||
logger.info(`Connected.`);
|
|
||||||
|
|
||||||
await driver.script(dbhan, sql);
|
try {
|
||||||
|
logger.info(`Connected.`);
|
||||||
|
|
||||||
if (!systemConnection) {
|
await driver.script(dbhan, sql);
|
||||||
await driver.close(dbhan);
|
} finally {
|
||||||
|
if (!systemConnection) {
|
||||||
|
await driver.close(dbhan);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -22,44 +22,48 @@ async function generateDeploySql({
|
|||||||
if (!driver) driver = requireEngineDriver(connection);
|
if (!driver) driver = requireEngineDriver(connection);
|
||||||
|
|
||||||
const dbhan = systemConnection || (await connectUtility(driver, connection, 'read'));
|
const dbhan = systemConnection || (await connectUtility(driver, connection, 'read'));
|
||||||
if (!analysedStructure) {
|
|
||||||
analysedStructure = await driver.analyseFull(dbhan);
|
try {
|
||||||
|
if (!analysedStructure) {
|
||||||
|
analysedStructure = await driver.analyseFull(dbhan);
|
||||||
|
}
|
||||||
|
|
||||||
|
const deployedModel = generateDbPairingId(
|
||||||
|
extendDatabaseInfo(loadedDbModel ? databaseInfoFromYamlModel(loadedDbModel) : await importDbModel(modelFolder))
|
||||||
|
);
|
||||||
|
const currentModel = generateDbPairingId(extendDatabaseInfo(analysedStructure));
|
||||||
|
const opts = {
|
||||||
|
...modelCompareDbDiffOptions,
|
||||||
|
|
||||||
|
noDropTable: true,
|
||||||
|
noDropColumn: true,
|
||||||
|
noDropConstraint: true,
|
||||||
|
noDropSqlObject: true,
|
||||||
|
noRenameTable: true,
|
||||||
|
noRenameColumn: true,
|
||||||
|
};
|
||||||
|
const currentModelPaired = matchPairedObjects(deployedModel, currentModel, opts);
|
||||||
|
const currentModelPairedPreloaded = await enrichWithPreloadedRows(deployedModel, currentModelPaired, dbhan, driver);
|
||||||
|
|
||||||
|
// console.log('currentModelPairedPreloaded', currentModelPairedPreloaded.tables[0]);
|
||||||
|
// console.log('deployedModel', deployedModel.tables[0]);
|
||||||
|
// console.log('currentModel', currentModel.tables[0]);
|
||||||
|
// console.log('currentModelPaired', currentModelPaired.tables[0]);
|
||||||
|
const res = getAlterDatabaseScript(
|
||||||
|
currentModelPairedPreloaded,
|
||||||
|
deployedModel,
|
||||||
|
opts,
|
||||||
|
currentModelPairedPreloaded,
|
||||||
|
deployedModel,
|
||||||
|
driver
|
||||||
|
);
|
||||||
|
|
||||||
|
return res;
|
||||||
|
} finally {
|
||||||
|
if (!systemConnection) {
|
||||||
|
await driver.close(dbhan);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const deployedModel = generateDbPairingId(
|
|
||||||
extendDatabaseInfo(loadedDbModel ? databaseInfoFromYamlModel(loadedDbModel) : await importDbModel(modelFolder))
|
|
||||||
);
|
|
||||||
const currentModel = generateDbPairingId(extendDatabaseInfo(analysedStructure));
|
|
||||||
const opts = {
|
|
||||||
...modelCompareDbDiffOptions,
|
|
||||||
|
|
||||||
noDropTable: true,
|
|
||||||
noDropColumn: true,
|
|
||||||
noDropConstraint: true,
|
|
||||||
noDropSqlObject: true,
|
|
||||||
noRenameTable: true,
|
|
||||||
noRenameColumn: true,
|
|
||||||
};
|
|
||||||
const currentModelPaired = matchPairedObjects(deployedModel, currentModel, opts);
|
|
||||||
const currentModelPairedPreloaded = await enrichWithPreloadedRows(deployedModel, currentModelPaired, dbhan, driver);
|
|
||||||
|
|
||||||
// console.log('currentModelPairedPreloaded', currentModelPairedPreloaded.tables[0]);
|
|
||||||
// console.log('deployedModel', deployedModel.tables[0]);
|
|
||||||
// console.log('currentModel', currentModel.tables[0]);
|
|
||||||
// console.log('currentModelPaired', currentModelPaired.tables[0]);
|
|
||||||
const res = getAlterDatabaseScript(
|
|
||||||
currentModelPairedPreloaded,
|
|
||||||
deployedModel,
|
|
||||||
opts,
|
|
||||||
currentModelPairedPreloaded,
|
|
||||||
deployedModel,
|
|
||||||
driver
|
|
||||||
);
|
|
||||||
|
|
||||||
if (!systemConnection) {
|
|
||||||
await driver.close(dbhan);
|
|
||||||
}
|
|
||||||
return res;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = generateDeploySql;
|
module.exports = generateDeploySql;
|
||||||
|
|||||||
@@ -59,21 +59,27 @@ async function importDatabase({ connection = undefined, systemConnection = undef
|
|||||||
|
|
||||||
if (!driver) driver = requireEngineDriver(connection);
|
if (!driver) driver = requireEngineDriver(connection);
|
||||||
const dbhan = systemConnection || (await connectUtility(driver, connection, 'write'));
|
const dbhan = systemConnection || (await connectUtility(driver, connection, 'write'));
|
||||||
logger.info(`Connected.`);
|
try {
|
||||||
|
logger.info(`Connected.`);
|
||||||
|
|
||||||
logger.info(`Input file: ${inputFile}`);
|
logger.info(`Input file: ${inputFile}`);
|
||||||
const downloadedFile = await download(inputFile);
|
const downloadedFile = await download(inputFile);
|
||||||
logger.info(`Downloaded file: ${downloadedFile}`);
|
logger.info(`Downloaded file: ${downloadedFile}`);
|
||||||
|
|
||||||
const fileStream = fs.createReadStream(downloadedFile, 'utf-8');
|
const fileStream = fs.createReadStream(downloadedFile, 'utf-8');
|
||||||
const splittedStream = splitQueryStream(fileStream, {
|
const splittedStream = splitQueryStream(fileStream, {
|
||||||
...driver.getQuerySplitterOptions('import'),
|
...driver.getQuerySplitterOptions('import'),
|
||||||
returnRichInfo: true,
|
returnRichInfo: true,
|
||||||
});
|
});
|
||||||
const importStream = new ImportStream(dbhan, driver);
|
const importStream = new ImportStream(dbhan, driver);
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
splittedStream.pipe(importStream);
|
splittedStream.pipe(importStream);
|
||||||
await awaitStreamEnd(importStream);
|
await awaitStreamEnd(importStream);
|
||||||
|
} finally {
|
||||||
|
if (!systemConnection) {
|
||||||
|
await driver.close(dbhan);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = importDatabase;
|
module.exports = importDatabase;
|
||||||
|
|||||||
@@ -9,13 +9,19 @@ async function loadDatabase({ connection = undefined, systemConnection = undefin
|
|||||||
logger.info(`Analysing database`);
|
logger.info(`Analysing database`);
|
||||||
|
|
||||||
if (!driver) driver = requireEngineDriver(connection);
|
if (!driver) driver = requireEngineDriver(connection);
|
||||||
const pool = systemConnection || (await connectUtility(driver, connection, 'read', { forceRowsAsObjects: true }));
|
const dbhan = systemConnection || (await connectUtility(driver, connection, 'read', { forceRowsAsObjects: true }));
|
||||||
logger.info(`Connected.`);
|
try {
|
||||||
|
logger.info(`Connected.`);
|
||||||
|
|
||||||
const dbInfo = await driver.analyseFull(pool);
|
const dbInfo = await driver.analyseFull(dbhan);
|
||||||
logger.info(`Analyse finished`);
|
logger.info(`Analyse finished`);
|
||||||
|
|
||||||
await exportDbModel(dbInfo, outputDir);
|
await exportDbModel(dbInfo, outputDir);
|
||||||
|
} finally {
|
||||||
|
if (!systemConnection) {
|
||||||
|
await driver.close(dbhan);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = loadDatabase;
|
module.exports = loadDatabase;
|
||||||
|
|||||||
@@ -3,9 +3,9 @@ const requireEngineDriver = require('../utility/requireEngineDriver');
|
|||||||
const connectUtility = require('../utility/connectUtility');
|
const connectUtility = require('../utility/connectUtility');
|
||||||
const logger = getLogger('tableReader');
|
const logger = getLogger('tableReader');
|
||||||
|
|
||||||
async function tableReader({ connection, pureName, schemaName }) {
|
async function tableReader({ connection, systemConnection, pureName, schemaName }) {
|
||||||
const driver = requireEngineDriver(connection);
|
const driver = requireEngineDriver(connection);
|
||||||
const pool = await connectUtility(driver, connection, 'read');
|
const dbhan = systemConnection || (await connectUtility(driver, connection, 'read'));
|
||||||
logger.info(`Connected.`);
|
logger.info(`Connected.`);
|
||||||
|
|
||||||
const fullName = { pureName, schemaName };
|
const fullName = { pureName, schemaName };
|
||||||
@@ -14,26 +14,26 @@ async function tableReader({ connection, pureName, schemaName }) {
|
|||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
logger.info(`Reading collection ${fullNameToString(fullName)}`);
|
logger.info(`Reading collection ${fullNameToString(fullName)}`);
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
return await driver.readQuery(pool, JSON.stringify(fullName));
|
return await driver.readQuery(dbhan, JSON.stringify(fullName));
|
||||||
}
|
}
|
||||||
|
|
||||||
const table = await driver.analyseSingleObject(pool, fullName, 'tables');
|
const table = await driver.analyseSingleObject(dbhan, fullName, 'tables');
|
||||||
const query = `select * from ${quoteFullName(driver.dialect, fullName)}`;
|
const query = `select * from ${quoteFullName(driver.dialect, fullName)}`;
|
||||||
if (table) {
|
if (table) {
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
logger.info(`Reading table ${fullNameToString(table)}`);
|
logger.info(`Reading table ${fullNameToString(table)}`);
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
return await driver.readQuery(pool, query, table);
|
return await driver.readQuery(dbhan, query, table);
|
||||||
}
|
}
|
||||||
const view = await driver.analyseSingleObject(pool, fullName, 'views');
|
const view = await driver.analyseSingleObject(dbhan, fullName, 'views');
|
||||||
if (view) {
|
if (view) {
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
logger.info(`Reading view ${fullNameToString(view)}`);
|
logger.info(`Reading view ${fullNameToString(view)}`);
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
return await driver.readQuery(pool, query, view);
|
return await driver.readQuery(dbhan, query, view);
|
||||||
}
|
}
|
||||||
|
|
||||||
return await driver.readQuery(pool, query);
|
return await driver.readQuery(dbhan, query);
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = tableReader;
|
module.exports = tableReader;
|
||||||
|
|||||||
@@ -9,10 +9,16 @@ async function tableWriter({ connection, schemaName, pureName, driver, systemCon
|
|||||||
if (!driver) {
|
if (!driver) {
|
||||||
driver = requireEngineDriver(connection);
|
driver = requireEngineDriver(connection);
|
||||||
}
|
}
|
||||||
const pool = systemConnection || (await connectUtility(driver, connection, 'write'));
|
const dbhan = systemConnection || (await connectUtility(driver, connection, 'write'));
|
||||||
|
|
||||||
logger.info(`Connected.`);
|
try {
|
||||||
return await driver.writeTable(pool, { schemaName, pureName }, options);
|
logger.info(`Connected.`);
|
||||||
|
return await driver.writeTable(dbhan, { schemaName, pureName }, options);
|
||||||
|
} finally {
|
||||||
|
if (!systemConnection) {
|
||||||
|
await driver.close(dbhan);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = tableWriter;
|
module.exports = tableWriter;
|
||||||
|
|||||||
Reference in New Issue
Block a user