diff --git a/plugins/dbgate-plugin-mssql/src/backend/driver.js b/plugins/dbgate-plugin-mssql/src/backend/driver.js index 0f6a00140..4168015c5 100644 --- a/plugins/dbgate-plugin-mssql/src/backend/driver.js +++ b/plugins/dbgate-plugin-mssql/src/backend/driver.js @@ -9,7 +9,7 @@ const nativeDriver = require('./nativeDriver'); const lock = new AsyncLock(); const { tediousConnect, tediousQueryCore, tediousReadQuery, tediousStream } = require('./tediousDriver'); const { nativeConnect, nativeQueryCore, nativeReadQuery, nativeStream } = nativeDriver; -let msnodesqlv8; +let requireMsnodesqlv8; const versionQuery = ` SELECT @@ -52,12 +52,12 @@ const driver = { analyserClass: MsSqlAnalyser, getAuthTypes() { - return msnodesqlv8 ? windowsAuthTypes : null; + return requireMsnodesqlv8 ? windowsAuthTypes : null; }, async connect(conn) { const { authType } = conn; - if (msnodesqlv8 && (authType == 'sspi' || authType == 'sql')) { + if (requireMsnodesqlv8 && (authType == 'sspi' || authType == 'sql')) { return nativeConnect(conn); } @@ -119,7 +119,7 @@ const driver = { driver.initialize = dbgateEnv => { if (dbgateEnv.nativeModules && dbgateEnv.nativeModules.msnodesqlv8) { - msnodesqlv8 = dbgateEnv.nativeModules.msnodesqlv8(); + requireMsnodesqlv8 = dbgateEnv.nativeModules.msnodesqlv8; } nativeDriver.initialize(dbgateEnv); }; diff --git a/plugins/dbgate-plugin-mssql/src/backend/nativeDriver.js b/plugins/dbgate-plugin-mssql/src/backend/nativeDriver.js index 0546799d3..5c2de8d23 100644 --- a/plugins/dbgate-plugin-mssql/src/backend/nativeDriver.js +++ b/plugins/dbgate-plugin-mssql/src/backend/nativeDriver.js @@ -1,7 +1,7 @@ const _ = require('lodash'); const stream = require('stream'); const makeUniqueColumnNames = require('./makeUniqueColumnNames'); -let msnodesqlv8; +let requireMsnodesqlv8; // async function nativeQueryCore(pool, sql, options) { // if (sql == null) { @@ -20,6 +20,14 @@ let msnodesqlv8; // }); // } +let msnodesqlv8Value; +function getMsnodesqlv8() { + if (!msnodesqlv8Value) { + msnodesqlv8Value = requireMsnodesqlv8(); + } + return msnodesqlv8Value; +} + function extractNativeColumns(meta) { const res = meta.map(col => { const resCol = { @@ -51,7 +59,7 @@ async function connectWithDriver({ server, port, user, password, database, authT else connectionString += `;UID=${user};PWD=${password}`; if (database) connectionString += `;Database=${database}`; return new Promise((resolve, reject) => { - msnodesqlv8.open(connectionString, (err, conn) => { + getMsnodesqlv8().open(connectionString, (err, conn) => { if (err) { reject(err); } else { @@ -219,7 +227,7 @@ async function nativeStream(pool, sql, options) { const initialize = dbgateEnv => { if (dbgateEnv.nativeModules && dbgateEnv.nativeModules.msnodesqlv8) { - msnodesqlv8 = dbgateEnv.nativeModules.msnodesqlv8(); + requireMsnodesqlv8 = dbgateEnv.nativeModules.msnodesqlv8; } }; diff --git a/plugins/dbgate-plugin-oracle/src/backend/drivers.js b/plugins/dbgate-plugin-oracle/src/backend/drivers.js index c5ac36533..8e71ba589 100644 --- a/plugins/dbgate-plugin-oracle/src/backend/drivers.js +++ b/plugins/dbgate-plugin-oracle/src/backend/drivers.js @@ -5,9 +5,19 @@ const driverBases = require('../frontend/drivers'); const Analyser = require('./Analyser'); //--const pg = require('pg'); //const oracledb = require('oracledb'); -let oracledb; // native module const { createBulkInsertStreamBase, makeUniqueColumnNames } = require('dbgate-tools'); + +let requireOracledb; // native module + +let oracledbValue; +function getOracledb() { + if (!oracledbValue) { + oracledbValue = requireOracledb(); + } + return oracledbValue; +} + /* pg.types.setTypeParser(1082, 'text', val => val); // date pg.types.setTypeParser(1114, 'text', val => val); // timestamp without timezone @@ -52,7 +62,7 @@ const drivers = driverBases.map(driverBase => ({ authType, socketPath, }) { - client = await oracledb.getConnection({ + client = await getOracledb().getConnection({ user, password, connectString: useDatabaseUrl ? databaseUrl : port ? `${server}:${port}` : server, @@ -275,7 +285,7 @@ const drivers = driverBases.map(driverBase => ({ drivers.initialize = dbgateEnv => { if (dbgateEnv.nativeModules && dbgateEnv.nativeModules.oracledb) { - oracledb = dbgateEnv.nativeModules.oracledb(); + requireOracledb = dbgateEnv.nativeModules.oracledb; } }; diff --git a/plugins/dbgate-plugin-sqlite/src/backend/driver.js b/plugins/dbgate-plugin-sqlite/src/backend/driver.js index c75f919e1..25b530cad 100644 --- a/plugins/dbgate-plugin-sqlite/src/backend/driver.js +++ b/plugins/dbgate-plugin-sqlite/src/backend/driver.js @@ -8,7 +8,15 @@ const { getLogger } = global.DBGATE_TOOLS; const logger = getLogger('sqliteDriver'); -let Database; +let requireBetterSqlite; + +let betterSqliteValue; +function getBetterSqlite() { + if (!betterSqliteValue) { + betterSqliteValue = requireBetterSqlite(); + } + return betterSqliteValue; +} async function waitForDrain(stream) { return new Promise((resolve) => { @@ -56,6 +64,7 @@ const driver = { ...driverBase, analyserClass: Analyser, async connect({ databaseFile, isReadOnly }) { + const Database = getBetterSqlite(); const pool = new Database(databaseFile, { readonly: !!isReadOnly }); return pool; }, @@ -179,7 +188,7 @@ const driver = { driver.initialize = (dbgateEnv) => { if (dbgateEnv.nativeModules && dbgateEnv.nativeModules['better-sqlite3']) { - Database = dbgateEnv.nativeModules['better-sqlite3'](); + requireBetterSqlite = dbgateEnv.nativeModules['better-sqlite3']; } };