Skip to content

Commit d837170

Browse files
Move compileAndRunQueryOnMultipleDatabases to top level
1 parent c3f4a01 commit d837170

1 file changed

Lines changed: 106 additions & 75 deletions

File tree

extensions/ql-vscode/src/extension.ts

Lines changed: 106 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -737,79 +737,6 @@ async function activateWithInstalledDistribution(
737737
void extLogger.log("Initializing source archive filesystem provider.");
738738
archiveFilesystemProvider_activate(ctx);
739739

740-
async function compileAndRunQueryOnMultipleDatabases(
741-
progress: ProgressCallback,
742-
token: CancellationToken,
743-
uri: Uri | undefined,
744-
): Promise<void> {
745-
let filteredDBs = dbm.databaseItems;
746-
if (filteredDBs.length === 0) {
747-
void showAndLogErrorMessage(
748-
"No databases found. Please add a suitable database to your workspace.",
749-
);
750-
return;
751-
}
752-
// If possible, only show databases with the right language (otherwise show all databases).
753-
const queryLanguage = await findLanguage(cliServer, uri);
754-
if (queryLanguage) {
755-
filteredDBs = dbm.databaseItems.filter(
756-
(db) => db.language === queryLanguage,
757-
);
758-
if (filteredDBs.length === 0) {
759-
void showAndLogErrorMessage(
760-
`No databases found for language ${queryLanguage}. Please add a suitable database to your workspace.`,
761-
);
762-
return;
763-
}
764-
}
765-
const quickPickItems = filteredDBs.map<DatabaseQuickPickItem>((dbItem) => ({
766-
databaseItem: dbItem,
767-
label: dbItem.name,
768-
description: dbItem.language,
769-
}));
770-
/**
771-
* Databases that were selected in the quick pick menu.
772-
*/
773-
const quickpick = await window.showQuickPick<DatabaseQuickPickItem>(
774-
quickPickItems,
775-
{ canPickMany: true, ignoreFocusOut: true },
776-
);
777-
if (quickpick !== undefined) {
778-
// Collect all skipped databases and display them at the end (instead of popping up individual errors)
779-
const skippedDatabases = [];
780-
const errors = [];
781-
for (const item of quickpick) {
782-
try {
783-
await compileAndRunQuery(
784-
qs,
785-
qhm,
786-
databaseUI,
787-
localQueryResultsView,
788-
queryStorageDir,
789-
false,
790-
uri,
791-
progress,
792-
token,
793-
item.databaseItem,
794-
);
795-
} catch (e) {
796-
skippedDatabases.push(item.label);
797-
errors.push(getErrorMessage(e));
798-
}
799-
}
800-
if (skippedDatabases.length > 0) {
801-
void extLogger.log(`Errors:\n${errors.join("\n")}`);
802-
void showAndLogWarningMessage(
803-
`The following databases were skipped:\n${skippedDatabases.join(
804-
"\n",
805-
)}.\nFor details about the errors, see the logs.`,
806-
);
807-
}
808-
} else {
809-
void showAndLogErrorMessage("No databases selected.");
810-
}
811-
}
812-
813740
const qhelpTmpDir = dirSync({
814741
prefix: "qhelp_",
815742
keep: false,
@@ -961,7 +888,19 @@ async function activateWithInstalledDistribution(
961888
progress: ProgressCallback,
962889
token: CancellationToken,
963890
uri: Uri | undefined,
964-
) => await compileAndRunQueryOnMultipleDatabases(progress, token, uri),
891+
) =>
892+
await compileAndRunQueryOnMultipleDatabases(
893+
cliServer,
894+
qs,
895+
qhm,
896+
dbm,
897+
databaseUI,
898+
localQueryResultsView,
899+
queryStorageDir,
900+
progress,
901+
token,
902+
uri,
903+
),
965904
{
966905
title: "Running query on selected databases",
967906
cancellable: true,
@@ -976,7 +915,19 @@ async function activateWithInstalledDistribution(
976915
progress: ProgressCallback,
977916
token: CancellationToken,
978917
uri: Uri | undefined,
979-
) => await compileAndRunQueryOnMultipleDatabases(progress, token, uri),
918+
) =>
919+
await compileAndRunQueryOnMultipleDatabases(
920+
cliServer,
921+
qs,
922+
qhm,
923+
dbm,
924+
databaseUI,
925+
localQueryResultsView,
926+
queryStorageDir,
927+
progress,
928+
token,
929+
uri,
930+
),
980931
{
981932
title: "Running query on selected databases",
982933
cancellable: true,
@@ -1844,6 +1795,86 @@ async function compileAndRunQuery(
18441795
}
18451796
}
18461797

1798+
async function compileAndRunQueryOnMultipleDatabases(
1799+
cliServer: CodeQLCliServer,
1800+
qs: QueryRunner,
1801+
qhm: QueryHistoryManager,
1802+
dbm: DatabaseManager,
1803+
databaseUI: DatabaseUI,
1804+
localQueryResultsView: ResultsView,
1805+
queryStorageDir: string,
1806+
progress: ProgressCallback,
1807+
token: CancellationToken,
1808+
uri: Uri | undefined,
1809+
): Promise<void> {
1810+
let filteredDBs = dbm.databaseItems;
1811+
if (filteredDBs.length === 0) {
1812+
void showAndLogErrorMessage(
1813+
"No databases found. Please add a suitable database to your workspace.",
1814+
);
1815+
return;
1816+
}
1817+
// If possible, only show databases with the right language (otherwise show all databases).
1818+
const queryLanguage = await findLanguage(cliServer, uri);
1819+
if (queryLanguage) {
1820+
filteredDBs = dbm.databaseItems.filter(
1821+
(db) => db.language === queryLanguage,
1822+
);
1823+
if (filteredDBs.length === 0) {
1824+
void showAndLogErrorMessage(
1825+
`No databases found for language ${queryLanguage}. Please add a suitable database to your workspace.`,
1826+
);
1827+
return;
1828+
}
1829+
}
1830+
const quickPickItems = filteredDBs.map<DatabaseQuickPickItem>((dbItem) => ({
1831+
databaseItem: dbItem,
1832+
label: dbItem.name,
1833+
description: dbItem.language,
1834+
}));
1835+
/**
1836+
* Databases that were selected in the quick pick menu.
1837+
*/
1838+
const quickpick = await window.showQuickPick<DatabaseQuickPickItem>(
1839+
quickPickItems,
1840+
{ canPickMany: true, ignoreFocusOut: true },
1841+
);
1842+
if (quickpick !== undefined) {
1843+
// Collect all skipped databases and display them at the end (instead of popping up individual errors)
1844+
const skippedDatabases = [];
1845+
const errors = [];
1846+
for (const item of quickpick) {
1847+
try {
1848+
await compileAndRunQuery(
1849+
qs,
1850+
qhm,
1851+
databaseUI,
1852+
localQueryResultsView,
1853+
queryStorageDir,
1854+
false,
1855+
uri,
1856+
progress,
1857+
token,
1858+
item.databaseItem,
1859+
);
1860+
} catch (e) {
1861+
skippedDatabases.push(item.label);
1862+
errors.push(getErrorMessage(e));
1863+
}
1864+
}
1865+
if (skippedDatabases.length > 0) {
1866+
void extLogger.log(`Errors:\n${errors.join("\n")}`);
1867+
void showAndLogWarningMessage(
1868+
`The following databases were skipped:\n${skippedDatabases.join(
1869+
"\n",
1870+
)}.\nFor details about the errors, see the logs.`,
1871+
);
1872+
}
1873+
} else {
1874+
void showAndLogErrorMessage("No databases selected.");
1875+
}
1876+
}
1877+
18471878
function addUnhandledRejectionListener() {
18481879
const handler = (error: unknown) => {
18491880
// This listener will be triggered for errors from other extensions as

0 commit comments

Comments
 (0)