Skip to content

Commit 3e3eb0d

Browse files
committed
Re-use existing database if one for the same language is already downloaded
We'd like to select an existing database for our query, if on is already downloaded and matches the query language. Previously we were re-using the database if the language and name matched (e.g. the name would be `github/codeql`).
1 parent 460da1e commit 3e3eb0d

File tree

3 files changed

+30
-5
lines changed

3 files changed

+30
-5
lines changed

extensions/ql-vscode/src/local-databases.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -911,6 +911,17 @@ export class DatabaseManager extends DisposableObject {
911911
return dbs[0];
912912
}
913913

914+
public async digForDatabaseWithSameLanguage(
915+
language: string,
916+
): Promise<DatabaseItem | undefined> {
917+
const dbItems = this.databaseItems || [];
918+
const dbs = dbItems.filter((db) => db.language === language);
919+
if (dbs.length === 0) {
920+
return undefined;
921+
}
922+
return dbs[0];
923+
}
924+
914925
/**
915926
* Returns the index of the workspace folder that corresponds to the source archive of `item`
916927
* if there is one, and -1 otherwise.

extensions/ql-vscode/src/skeleton-query-wizard.ts

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -231,17 +231,30 @@ export class SkeletonQueryWizard {
231231

232232
const databaseNwo = QUERY_LANGUAGE_TO_DATABASE_REPO[this.language];
233233

234-
const databaseItem = await this.databaseManager.digForDatabaseItem(
234+
// Check that we haven't already downloaded a database for this language
235+
const existingDatabaseItem = await this.databaseManager.digForDatabaseItem(
235236
this.language,
236237
databaseNwo,
237238
);
238239

239-
if (databaseItem) {
240+
if (existingDatabaseItem) {
240241
// select the found database
241-
await this.databaseManager.setCurrentDatabaseItem(databaseItem);
242+
await this.databaseManager.setCurrentDatabaseItem(existingDatabaseItem);
242243
} else {
243-
// download new database and select it
244-
await this.downloadDatabase();
244+
const sameLanguageDatabaseItem =
245+
await this.databaseManager.digForDatabaseWithSameLanguage(
246+
this.language,
247+
);
248+
249+
if (sameLanguageDatabaseItem) {
250+
// select the found database
251+
await this.databaseManager.setCurrentDatabaseItem(
252+
sameLanguageDatabaseItem,
253+
);
254+
} else {
255+
// download new database and select it
256+
await this.downloadDatabase();
257+
}
245258
}
246259
}
247260
}

extensions/ql-vscode/test/vscode-tests/cli-integration/skeleton-query-wizard.test.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ describe("SkeletonQueryWizard", () => {
4242
const mockDatabaseManager = mockedObject<DatabaseManager>({
4343
setCurrentDatabaseItem: jest.fn(),
4444
digForDatabaseItem: jest.fn(),
45+
digForDatabaseWithSameLanguage: jest.fn(),
4546
});
4647
const mockCli = mockedObject<CodeQLCliServer>({
4748
resolveLanguages: jest

0 commit comments

Comments
 (0)