diff --git a/src/classes/insightsConnection.ts b/src/classes/insightsConnection.ts index f740b528..7908b0e3 100644 --- a/src/classes/insightsConnection.ts +++ b/src/classes/insightsConnection.ts @@ -403,9 +403,6 @@ export class InsightsConnection { ): Promise { if (this.connected && this.connEndpoints) { const isTableView = ext.isResultsTabVisible; - const queryMsg = isStarting - ? "Starting scratchpad..." - : "Query is executing..."; const scratchpadURL = new url.URL( this.connEndpoints.scratchpad.scratchpad, this.node.details.server, @@ -453,10 +450,13 @@ export class InsightsConnection { }, async (progress, token) => { token.onCancellationRequested(() => { - kdbOutputLog(`User cancelled the Scrathpad execution.`, "WARNING"); + kdbOutputLog(`User cancelled the scratchpad execution.`, "WARNING"); }); - progress.report({ message: queryMsg }); + if (isStarting) { + progress.report({ message: "Starting scratchpad..." }); + } + const spRes = await axios .post(scratchpadURL.toString(), body, { headers, diff --git a/src/commands/dataSourceCommand.ts b/src/commands/dataSourceCommand.ts index c01f21f5..9236256e 100644 --- a/src/commands/dataSourceCommand.ts +++ b/src/commands/dataSourceCommand.ts @@ -170,7 +170,7 @@ export async function runDataSource( const resultCount = typeof res === "string" ? "0" : res.rows.length; kdbOutputLog(`[DATASOURCE] Results: ${resultCount} rows`, "INFO"); } - writeQueryResultsToView( + await writeQueryResultsToView( success ? res : res.error, query, connLabel, @@ -185,7 +185,7 @@ export async function runDataSource( "INFO", ); } - writeQueryResultsToConsole( + await writeQueryResultsToConsole( success ? res : res.error, query, connLabel, diff --git a/src/commands/serverCommand.ts b/src/commands/serverCommand.ts index 09a7a6f0..ae632b42 100644 --- a/src/commands/serverCommand.ts +++ b/src/commands/serverCommand.ts @@ -15,7 +15,9 @@ import { readFileSync } from "fs-extra"; import { join } from "path"; import * as url from "url"; import { + CancellationToken, Position, + ProgressLocation, Range, Uri, ViewColumn, @@ -790,6 +792,37 @@ export async function executeQuery( isPython: boolean, isWorkbook: boolean, isFromConnTree?: boolean, +): Promise { + await window.withProgress( + { + cancellable: true, + location: ProgressLocation.Window, + title: `Executing query (${executorName})`, + }, + async (_progress, token) => { + await _executeQuery( + query, + connLabel, + executorName, + context, + isPython, + isWorkbook, + isFromConnTree, + token, + ); + }, + ); +} + +async function _executeQuery( + query: string, + connLabel: string, + executorName: string, + context: string, + isPython: boolean, + isWorkbook: boolean, + isFromConnTree?: boolean, + token?: CancellationToken, ): Promise { const connMngService = new ConnectionManagementService(); const queryConsole = ExecutionConsole.start(); @@ -842,9 +875,14 @@ export async function executeQuery( const endTime = Date.now(); const duration = (endTime - startTime).toString(); + /* istanbul ignore next */ + if (token?.isCancellationRequested) { + return undefined; + } + // set context for root nodes if (selectedConn instanceof InsightsConnection) { - writeScratchpadResult( + await writeScratchpadResult( results, query, connLabel, @@ -875,7 +913,7 @@ export async function executeQuery( await setUriContent(uri, JSON.stringify(plot)); } } else if (ext.isResultsTabVisible) { - writeQueryResultsToView( + await writeQueryResultsToView( results, query, connLabel, @@ -888,7 +926,7 @@ export async function executeQuery( connVersion, ); } else { - writeQueryResultsToConsole( + await writeQueryResultsToConsole( results, query, connLabel, @@ -1123,7 +1161,7 @@ export async function exportConnections(connLabel?: string) { } } -export function writeQueryResultsToConsole( +export async function writeQueryResultsToConsole( result: string | string[], query: string, connLabel: string, @@ -1133,7 +1171,7 @@ export function writeQueryResultsToConsole( isPython?: boolean, duration?: string, isFromConnTree?: boolean, -): void { +): Promise { const queryConsole = ExecutionConsole.start(); const isNonEmptyArray = Array.isArray(result) && result.length > 0; const valueToDecode = isNonEmptyArray ? result[0] : result.toString(); @@ -1169,7 +1207,7 @@ export function writeQueryResultsToConsole( } } -export function writeQueryResultsToView( +export async function writeQueryResultsToView( result: any, query: string, connLabel: string, @@ -1180,8 +1218,8 @@ export function writeQueryResultsToView( duration?: string, isFromConnTree?: boolean, connVersion?: number, -): void { - commands.executeCommand( +): Promise { + await commands.executeCommand( "kdb.resultsPanel.update", result, isInsights, @@ -1204,7 +1242,7 @@ export function writeQueryResultsToView( } } -export function writeScratchpadResult( +export async function writeScratchpadResult( result: ScratchpadResult, query: string, connLabel: string, @@ -1213,7 +1251,7 @@ export function writeScratchpadResult( isWorkbook: boolean, duration: string, connVersion: number, -): void { +): Promise { let errorMsg; if (result.error) { @@ -1226,7 +1264,7 @@ export function writeScratchpadResult( } if (ext.isResultsTabVisible) { - writeQueryResultsToView( + await writeQueryResultsToView( errorMsg ?? result, query, connLabel, @@ -1239,7 +1277,7 @@ export function writeScratchpadResult( connVersion, ); } else { - writeQueryResultsToConsole( + await writeQueryResultsToConsole( errorMsg ?? result.data, query, connLabel,