fixed problem with closing queries in progress

This commit is contained in:
Jan Prochazka
2023-02-26 11:08:20 +01:00
parent 5fd7982f06
commit 4dbb3a72d4

View File

@@ -21,6 +21,7 @@ let afterConnectCallbacks = [];
let lastPing = null; let lastPing = null;
let lastActivity = null; let lastActivity = null;
let currentProfiler = null; let currentProfiler = null;
let executingScripts = 0;
class TableWriter { class TableWriter {
constructor() { constructor() {
@@ -263,20 +264,25 @@ async function handleExecuteQuery({ sql }) {
//process.send({ msgtype: 'error', error: e.message }); //process.send({ msgtype: 'error', error: e.message });
} }
const resultIndexHolder = { executingScripts++;
value: 0, try {
}; const resultIndexHolder = {
for (const sqlItem of splitQuery(sql, { value: 0,
...driver.getQuerySplitterOptions('stream'), };
returnRichInfo: true, for (const sqlItem of splitQuery(sql, {
})) { ...driver.getQuerySplitterOptions('stream'),
await handleStream(driver, resultIndexHolder, sqlItem); returnRichInfo: true,
// const handler = new StreamHandler(resultIndex); })) {
// const stream = await driver.stream(systemConnection, sqlItem, handler); await handleStream(driver, resultIndexHolder, sqlItem);
// handler.stream = stream; // const handler = new StreamHandler(resultIndex);
// resultIndex = handler.resultIndex; // const stream = await driver.stream(systemConnection, sqlItem, handler);
// handler.stream = stream;
// resultIndex = handler.resultIndex;
}
process.send({ msgtype: 'done' });
} finally {
executingScripts--;
} }
process.send({ msgtype: 'done' });
} }
async function handleExecuteReader({ jslid, sql, fileName }) { async function handleExecuteReader({ jslid, sql, fileName }) {
@@ -349,7 +355,12 @@ function start() {
storedConnection && storedConnection.globalSettings storedConnection && storedConnection.globalSettings
? extractIntSettingsValue(storedConnection.globalSettings, 'session.autoCloseTimeout', 15, 1, 120) ? extractIntSettingsValue(storedConnection.globalSettings, 'session.autoCloseTimeout', 15, 1, 120)
: 15; : 15;
if (useSessionTimeout && time - lastActivity > sessionTimeout * 60 * 1000 && !currentProfiler) { if (
useSessionTimeout &&
time - lastActivity > sessionTimeout * 60 * 1000 &&
!currentProfiler &&
executingScripts == 0
) {
logger.info('Session not active, exiting'); logger.info('Session not active, exiting');
process.exit(0); process.exit(0);
} }