Skip to content

Commit e2e197f

Browse files
Move compileAndRunQuery to top level
1 parent c366342 commit e2e197f

1 file changed

Lines changed: 177 additions & 70 deletions

File tree

extensions/ql-vscode/src/extension.ts

Lines changed: 177 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -733,68 +733,6 @@ async function activateWithInstalledDistribution(
733733
void extLogger.log("Initializing source archive filesystem provider.");
734734
archiveFilesystemProvider_activate(ctx);
735735

736-
async function compileAndRunQuery(
737-
quickEval: boolean,
738-
selectedQuery: Uri | undefined,
739-
progress: ProgressCallback,
740-
token: CancellationToken,
741-
databaseItem: DatabaseItem | undefined,
742-
range?: Range,
743-
): Promise<void> {
744-
if (qs !== undefined) {
745-
// If no databaseItem is specified, use the database currently selected in the Databases UI
746-
databaseItem =
747-
databaseItem || (await databaseUI.getDatabaseItem(progress, token));
748-
if (databaseItem === undefined) {
749-
throw new Error("Can't run query without a selected database");
750-
}
751-
const databaseInfo = {
752-
name: databaseItem.name,
753-
databaseUri: databaseItem.databaseUri.toString(),
754-
};
755-
756-
// handle cancellation from the history view.
757-
const source = new CancellationTokenSource();
758-
token.onCancellationRequested(() => source.cancel());
759-
760-
const initialInfo = await createInitialQueryInfo(
761-
selectedQuery,
762-
databaseInfo,
763-
quickEval,
764-
range,
765-
);
766-
const item = new LocalQueryInfo(initialInfo, source);
767-
qhm.addQuery(item);
768-
try {
769-
const completedQueryInfo = await qs.compileAndRunQueryAgainstDatabase(
770-
databaseItem,
771-
initialInfo,
772-
queryStorageDir,
773-
progress,
774-
source.token,
775-
undefined,
776-
item,
777-
);
778-
qhm.completeQuery(item, completedQueryInfo);
779-
await showResultsForCompletedQuery(
780-
localQueryResultsView,
781-
item as CompletedLocalQueryInfo,
782-
WebviewReveal.Forced,
783-
);
784-
// Note we must update the query history view after showing results as the
785-
// display and sorting might depend on the number of results
786-
} catch (e) {
787-
const err = asError(e);
788-
err.message = `Error running query: ${err.message}`;
789-
item.failureReason = err.message;
790-
throw e;
791-
} finally {
792-
await qhm.refreshTreeView();
793-
source.dispose();
794-
}
795-
}
796-
}
797-
798736
async function compileAndRunQueryOnMultipleDatabases(
799737
progress: ProgressCallback,
800738
token: CancellationToken,
@@ -839,6 +777,11 @@ async function activateWithInstalledDistribution(
839777
for (const item of quickpick) {
840778
try {
841779
await compileAndRunQuery(
780+
qs,
781+
qhm,
782+
databaseUI,
783+
localQueryResultsView,
784+
queryStorageDir,
842785
false,
843786
uri,
844787
progress,
@@ -954,7 +897,19 @@ async function activateWithInstalledDistribution(
954897
progress: ProgressCallback,
955898
token: CancellationToken,
956899
uri: Uri | undefined,
957-
) => await compileAndRunQuery(false, uri, progress, token, undefined),
900+
) =>
901+
await compileAndRunQuery(
902+
qs,
903+
qhm,
904+
databaseUI,
905+
localQueryResultsView,
906+
queryStorageDir,
907+
false,
908+
uri,
909+
progress,
910+
token,
911+
undefined,
912+
),
958913
{
959914
title: "Running query",
960915
cancellable: true,
@@ -973,7 +928,19 @@ async function activateWithInstalledDistribution(
973928
progress: ProgressCallback,
974929
token: CancellationToken,
975930
uri: Uri | undefined,
976-
) => await compileAndRunQuery(false, uri, progress, token, undefined),
931+
) =>
932+
await compileAndRunQuery(
933+
qs,
934+
qhm,
935+
databaseUI,
936+
localQueryResultsView,
937+
queryStorageDir,
938+
false,
939+
uri,
940+
progress,
941+
token,
942+
undefined,
943+
),
977944
{
978945
title: "Running query",
979946
cancellable: true,
@@ -1068,6 +1035,11 @@ async function activateWithInstalledDistribution(
10681035
await Promise.all(
10691036
queryUris.map(async (uri) =>
10701037
compileAndRunQuery(
1038+
qs,
1039+
qhm,
1040+
databaseUI,
1041+
localQueryResultsView,
1042+
queryStorageDir,
10711043
false,
10721044
uri,
10731045
wrappedProgress,
@@ -1094,7 +1066,19 @@ async function activateWithInstalledDistribution(
10941066
progress: ProgressCallback,
10951067
token: CancellationToken,
10961068
uri: Uri | undefined,
1097-
) => await compileAndRunQuery(true, uri, progress, token, undefined),
1069+
) =>
1070+
await compileAndRunQuery(
1071+
qs,
1072+
qhm,
1073+
databaseUI,
1074+
localQueryResultsView,
1075+
queryStorageDir,
1076+
true,
1077+
uri,
1078+
progress,
1079+
token,
1080+
undefined,
1081+
),
10981082
{
10991083
title: "Running query",
11001084
cancellable: true,
@@ -1112,7 +1096,19 @@ async function activateWithInstalledDistribution(
11121096
progress: ProgressCallback,
11131097
token: CancellationToken,
11141098
uri: Uri | undefined,
1115-
) => await compileAndRunQuery(true, uri, progress, token, undefined),
1099+
) =>
1100+
await compileAndRunQuery(
1101+
qs,
1102+
qhm,
1103+
databaseUI,
1104+
localQueryResultsView,
1105+
queryStorageDir,
1106+
true,
1107+
uri,
1108+
progress,
1109+
token,
1110+
undefined,
1111+
),
11161112
{
11171113
title: "Running query",
11181114
cancellable: true,
@@ -1131,7 +1127,19 @@ async function activateWithInstalledDistribution(
11311127
uri: Uri,
11321128
range: Range,
11331129
) =>
1134-
await compileAndRunQuery(true, uri, progress, token, undefined, range),
1130+
await compileAndRunQuery(
1131+
qs,
1132+
qhm,
1133+
databaseUI,
1134+
localQueryResultsView,
1135+
queryStorageDir,
1136+
true,
1137+
uri,
1138+
progress,
1139+
token,
1140+
undefined,
1141+
range,
1142+
),
11351143
{
11361144
title: "Running query",
11371145
cancellable: true,
@@ -1610,7 +1618,18 @@ async function activateWithInstalledDistribution(
16101618
window.activeTextEditor?.document,
16111619
);
16121620
if (res) {
1613-
await compileAndRunQuery(false, res[0], progress, token, undefined);
1621+
await compileAndRunQuery(
1622+
qs,
1623+
qhm,
1624+
databaseUI,
1625+
localQueryResultsView,
1626+
queryStorageDir,
1627+
false,
1628+
res[0],
1629+
progress,
1630+
token,
1631+
undefined,
1632+
);
16141633
}
16151634
},
16161635
{
@@ -1629,7 +1648,18 @@ async function activateWithInstalledDistribution(
16291648
window.activeTextEditor?.document,
16301649
);
16311650
if (res) {
1632-
await compileAndRunQuery(false, res[0], progress, token, undefined);
1651+
await compileAndRunQuery(
1652+
qs,
1653+
qhm,
1654+
databaseUI,
1655+
localQueryResultsView,
1656+
queryStorageDir,
1657+
false,
1658+
res[0],
1659+
progress,
1660+
token,
1661+
undefined,
1662+
);
16331663
}
16341664
},
16351665
{
@@ -1648,7 +1678,18 @@ async function activateWithInstalledDistribution(
16481678
window.activeTextEditor?.document,
16491679
);
16501680
if (res) {
1651-
await compileAndRunQuery(false, res[0], progress, token, undefined);
1681+
await compileAndRunQuery(
1682+
qs,
1683+
qhm,
1684+
databaseUI,
1685+
localQueryResultsView,
1686+
queryStorageDir,
1687+
false,
1688+
res[0],
1689+
progress,
1690+
token,
1691+
undefined,
1692+
);
16521693
}
16531694
},
16541695
{
@@ -1735,6 +1776,72 @@ async function showResultsForCompletedQuery(
17351776
): Promise<void> {
17361777
await localQueryResultsView.showResults(query, forceReveal, false);
17371778
}
1779+
async function compileAndRunQuery(
1780+
qs: QueryRunner,
1781+
qhm: QueryHistoryManager,
1782+
databaseUI: DatabaseUI,
1783+
localQueryResultsView: ResultsView,
1784+
queryStorageDir: string,
1785+
quickEval: boolean,
1786+
selectedQuery: Uri | undefined,
1787+
progress: ProgressCallback,
1788+
token: CancellationToken,
1789+
databaseItem: DatabaseItem | undefined,
1790+
range?: Range,
1791+
): Promise<void> {
1792+
if (qs !== undefined) {
1793+
// If no databaseItem is specified, use the database currently selected in the Databases UI
1794+
databaseItem =
1795+
databaseItem || (await databaseUI.getDatabaseItem(progress, token));
1796+
if (databaseItem === undefined) {
1797+
throw new Error("Can't run query without a selected database");
1798+
}
1799+
const databaseInfo = {
1800+
name: databaseItem.name,
1801+
databaseUri: databaseItem.databaseUri.toString(),
1802+
};
1803+
1804+
// handle cancellation from the history view.
1805+
const source = new CancellationTokenSource();
1806+
token.onCancellationRequested(() => source.cancel());
1807+
1808+
const initialInfo = await createInitialQueryInfo(
1809+
selectedQuery,
1810+
databaseInfo,
1811+
quickEval,
1812+
range,
1813+
);
1814+
const item = new LocalQueryInfo(initialInfo, source);
1815+
qhm.addQuery(item);
1816+
try {
1817+
const completedQueryInfo = await qs.compileAndRunQueryAgainstDatabase(
1818+
databaseItem,
1819+
initialInfo,
1820+
queryStorageDir,
1821+
progress,
1822+
source.token,
1823+
undefined,
1824+
item,
1825+
);
1826+
qhm.completeQuery(item, completedQueryInfo);
1827+
await showResultsForCompletedQuery(
1828+
localQueryResultsView,
1829+
item as CompletedLocalQueryInfo,
1830+
WebviewReveal.Forced,
1831+
);
1832+
// Note we must update the query history view after showing results as the
1833+
// display and sorting might depend on the number of results
1834+
} catch (e) {
1835+
const err = asError(e);
1836+
err.message = `Error running query: ${err.message}`;
1837+
item.failureReason = err.message;
1838+
throw e;
1839+
} finally {
1840+
await qhm.refreshTreeView();
1841+
source.dispose();
1842+
}
1843+
}
1844+
}
17381845

17391846
function addUnhandledRejectionListener() {
17401847
const handler = (error: unknown) => {

0 commit comments

Comments
 (0)