Skip to content

Commit 608e373

Browse files
committed
Add version check for db registration
Database registration is available in versions >= 2.4.1
1 parent ac0f640 commit 608e373

3 files changed

Lines changed: 20 additions & 9 deletions

File tree

extensions/ql-vscode/src/cli.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ export class CodeQLCliServer implements Disposable {
133133
nullBuffer: Buffer;
134134

135135
/** Version of current cli, lazily computed by the `getVersion()` method */
136-
_version: SemVer | undefined;
136+
private _version: SemVer | undefined;
137137

138138
/** Path to current codeQL executable, or undefined if not running yet. */
139139
codeQlPath: string | undefined;
@@ -699,7 +699,7 @@ export class CodeQLCliServer implements Disposable {
699699
);
700700
}
701701

702-
private async getVersion() {
702+
public async getVersion() {
703703
if (!this._version) {
704704
this._version = await this.refreshVersion();
705705
}

extensions/ql-vscode/src/databases.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -622,7 +622,7 @@ export class DatabaseManager extends DisposableObject {
622622
const databaseItem = await this.createDatabaseItemFromPersistedState(progress, token, database);
623623
try {
624624
await databaseItem.refresh();
625-
await this.registerDatabases(progress, token, databaseItem);
625+
await this.registerDatabase(progress, token, databaseItem);
626626
if (currentDatabaseUri === database.uri) {
627627
this.setCurrentDatabaseItem(databaseItem, true);
628628
}
@@ -697,7 +697,7 @@ export class DatabaseManager extends DisposableObject {
697697
// Database items reconstituted from persisted state
698698
// will not have their contents yet.
699699
if (item.contents?.datasetUri) {
700-
await this.registerDatabases(progress, token, item);
700+
await this.registerDatabase(progress, token, item);
701701
}
702702
// note that we use undefined as the item in order to reset the entire tree
703703
this._onDidChangeDatabaseItem.fire({
@@ -748,7 +748,7 @@ export class DatabaseManager extends DisposableObject {
748748
}
749749

750750
// Remove this database item from the allow-list
751-
await this.deregisterDatabases(progress, token, item);
751+
await this.deregisterDatabase(progress, token, item);
752752

753753
// note that we use undefined as the item in order to reset the entire tree
754754
this._onDidChangeDatabaseItem.fire({
@@ -757,12 +757,12 @@ export class DatabaseManager extends DisposableObject {
757757
});
758758
}
759759

760-
private async deregisterDatabases(
760+
private async deregisterDatabase(
761761
progress: ProgressCallback,
762762
token: vscode.CancellationToken,
763763
dbItem: DatabaseItem,
764764
) {
765-
if (dbItem.contents) {
765+
if (dbItem.contents && (await this.qs.supportsDatabaseRegistration())) {
766766
const databases: Dataset[] = [{
767767
dbDir: dbItem.contents.datasetUri.fsPath,
768768
workingSet: 'default'
@@ -771,12 +771,12 @@ export class DatabaseManager extends DisposableObject {
771771
}
772772
}
773773

774-
private async registerDatabases(
774+
private async registerDatabase(
775775
progress: ProgressCallback,
776776
token: vscode.CancellationToken,
777777
dbItem: DatabaseItem,
778778
) {
779-
if (dbItem.contents) {
779+
if (dbItem.contents && (await this.qs.supportsDatabaseRegistration())) {
780780
const databases: Dataset[] = [{
781781
dbDir: dbItem.contents.datasetUri.fsPath,
782782
workingSet: 'default'

extensions/ql-vscode/src/queryserver-client.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import { QueryServerConfig } from './config';
88
import { Logger, ProgressReporter } from './logging';
99
import { completeQuery, EvaluationResult, progress, ProgressMessage, WithProgressId } from './pure/messages';
1010
import * as messages from './pure/messages';
11+
import { SemVer } from 'semver';
1112

1213
type ServerOpts = {
1314
logger: Logger;
@@ -47,6 +48,12 @@ type WithProgressReporting = (task: (progress: ProgressReporter, token: Cancella
4748
* to restart it (which disposes the existing process and starts a new one).
4849
*/
4950
export class QueryServerClient extends DisposableObject {
51+
52+
/**
53+
* Query Server version where database registration was introduced
54+
*/
55+
private static VERSION_WITH_DB_REGISTRATION = new SemVer('2.4.1');
56+
5057
serverProcess?: ServerProcess;
5158
evaluationResultCallbacks: { [key: number]: (res: EvaluationResult) => void };
5259
progressCallbacks: { [key: number]: ((res: ProgressMessage) => void) | undefined };
@@ -161,6 +168,10 @@ export class QueryServerClient extends DisposableObject {
161168
this.evaluationResultCallbacks = {};
162169
}
163170

171+
async supportsDatabaseRegistration() {
172+
return (await this.cliServer.getVersion()).compare(QueryServerClient.VERSION_WITH_DB_REGISTRATION) >= 0;
173+
}
174+
164175
registerCallback(callback: (res: EvaluationResult) => void): number {
165176
const id = this.nextCallback++;
166177
this.evaluationResultCallbacks[id] = callback;

0 commit comments

Comments
 (0)