mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-16 10:58:30 -05:00
Fix getUriForConnection API returning wrong URIs (#2202)
* Fix connection URI api to return working URI * run tsfmt * Keep using hand-built connection string for now in import * Use connection ID instead of URI to get connection string
This commit is contained in:
committed by
Karl Burtram
parent
efa3658ced
commit
3001640eec
@@ -159,7 +159,8 @@ export class GetCurrentConnectionStringAction extends Action {
|
||||
if (activeInput && (activeInput instanceof QueryInput || activeInput instanceof EditDataInput || activeInput instanceof DashboardInput)
|
||||
&& this._connectionManagementService.isConnected(activeInput.uri)) {
|
||||
let includePassword = false;
|
||||
this._connectionManagementService.getConnectionString(activeInput.uri, includePassword).then(result => {
|
||||
let connectionProfile = this._connectionManagementService.getConnectionProfile(activeInput.uri);
|
||||
this._connectionManagementService.getConnectionString(connectionProfile.id, includePassword).then(result => {
|
||||
let message = result
|
||||
? result
|
||||
: nls.localize('connectionAction.connectionString', "Connection string not available");
|
||||
|
||||
@@ -263,9 +263,9 @@ export interface IConnectionManagementService {
|
||||
getActiveConnectionCredentials(profileId: string): { [name: string]: string };
|
||||
|
||||
/**
|
||||
* Get the connection string for the provided connection profile
|
||||
* Get the connection string for the provided connection ID
|
||||
*/
|
||||
getConnectionString(ownerUri: string, includePassword: boolean): Thenable<string>;
|
||||
getConnectionString(connectionId: string, includePassword: boolean): Thenable<string>;
|
||||
|
||||
/**
|
||||
* Serialize connection string with optional provider
|
||||
|
||||
@@ -649,9 +649,9 @@ export class ConnectionManagementService extends Disposable implements IConnecti
|
||||
}
|
||||
|
||||
public getConnectionUriFromId(connectionId: string): string {
|
||||
let connection = this.getActiveConnections().find(connection => connection.id === connectionId);
|
||||
if (connection) {
|
||||
return this.getConnectionUri(connection);
|
||||
let connectionInfo = this._connectionStatusManager.findConnectionByProfileId(connectionId);
|
||||
if (connectionInfo) {
|
||||
return connectionInfo.ownerUri;
|
||||
} else {
|
||||
return undefined;
|
||||
}
|
||||
@@ -1348,9 +1348,11 @@ export class ConnectionManagementService extends Disposable implements IConnecti
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the connection string for the provided connection profile
|
||||
* Get the connection string for the provided connection ID
|
||||
*/
|
||||
public getConnectionString(ownerUri: string, includePassword: boolean = false): Thenable<string> {
|
||||
public getConnectionString(connectionId: string, includePassword: boolean = false): Thenable<string> {
|
||||
let ownerUri = this.getConnectionUriFromId(connectionId);
|
||||
|
||||
if (!ownerUri) {
|
||||
return Promise.resolve(undefined);
|
||||
}
|
||||
|
||||
@@ -22,14 +22,18 @@ export class ConnectionStatusManager {
|
||||
this._providerCapabilitiesMap = {};
|
||||
}
|
||||
|
||||
public findConnection(id: string): ConnectionManagementInfo {
|
||||
if (id in this._connections) {
|
||||
return this._connections[id];
|
||||
public findConnection(uri: string): ConnectionManagementInfo {
|
||||
if (uri in this._connections) {
|
||||
return this._connections[uri];
|
||||
} else {
|
||||
return undefined;
|
||||
}
|
||||
}
|
||||
|
||||
public findConnectionByProfileId(profileId: string): ConnectionManagementInfo {
|
||||
return Object.values(this._connections).find((connection: ConnectionManagementInfo) => connection.connectionProfile.id === profileId);
|
||||
}
|
||||
|
||||
public findConnectionProfile(connectionProfile: IConnectionProfile): ConnectionManagementInfo {
|
||||
let id = Utils.generateUri(connectionProfile);
|
||||
return this.findConnection(id);
|
||||
|
||||
@@ -61,15 +61,13 @@ export class MainThreadConnectionManagement implements MainThreadConnectionManag
|
||||
}
|
||||
|
||||
public async $listDatabases(connectionId: string): Promise<string[]> {
|
||||
let connection = this._connectionManagementService.getActiveConnections().find(profile => profile.id === connectionId);
|
||||
let connectionUri = this._connectionManagementService.getConnectionUri(connection);
|
||||
let connectionUri = await this.$getUriForConnection(connectionId);
|
||||
let result = await this._connectionManagementService.listDatabases(connectionUri);
|
||||
return result.databaseNames;
|
||||
}
|
||||
|
||||
public async $getConnectionString(connectionId: string, includePassword: boolean): Promise<string> {
|
||||
let connection = this._connectionManagementService.getActiveConnections().find(profile => profile.id === connectionId);
|
||||
return await this._connectionManagementService.getConnectionString(connectionId, includePassword);
|
||||
return this._connectionManagementService.getConnectionString(connectionId, includePassword);
|
||||
}
|
||||
|
||||
public $getUriForConnection(connectionId: string): Thenable<string> {
|
||||
|
||||
@@ -797,7 +797,7 @@ suite('SQL ConnectionManagementService tests', () => {
|
||||
|
||||
test('getActiveConnectionCredentials returns the credentials dictionary for a connection profile', () => {
|
||||
let profile = Object.assign({}, connectionProfile);
|
||||
profile.options = {password: profile.password};
|
||||
profile.options = { password: profile.password };
|
||||
profile.id = 'test_id';
|
||||
connectionStatusManager.addConnection(profile, 'test_uri');
|
||||
(connectionManagementService as any)._connectionStatusManager = connectionStatusManager;
|
||||
@@ -807,7 +807,7 @@ suite('SQL ConnectionManagementService tests', () => {
|
||||
|
||||
test('getConnectionUriFromId returns a URI of an active connection with the given id', () => {
|
||||
let profile = Object.assign({}, connectionProfile);
|
||||
profile.options = {password: profile.password};
|
||||
profile.options = { password: profile.password };
|
||||
profile.id = 'test_id';
|
||||
let uri = 'test_initial_uri';
|
||||
connectionStatusManager.addConnection(profile, uri);
|
||||
@@ -816,13 +816,13 @@ suite('SQL ConnectionManagementService tests', () => {
|
||||
// If I call getConnectionUriFromId on the given connection
|
||||
let foundUri = connectionManagementService.getConnectionUriFromId(profile.id);
|
||||
|
||||
// Then the returned URI matches the connection's
|
||||
assert.equal(foundUri, Utils.generateUri(new ConnectionProfile(capabilitiesService, profile)));
|
||||
// Then the returned URI matches the connection's original URI
|
||||
assert.equal(foundUri, uri);
|
||||
});
|
||||
|
||||
test('getConectionUriFromId returns undefined if the given connection is not active', () => {
|
||||
let profile = Object.assign({}, connectionProfile);
|
||||
profile.options = {password: profile.password};
|
||||
profile.options = { password: profile.password };
|
||||
profile.id = 'test_id';
|
||||
connectionStatusManager.addConnection(profile, Utils.generateUri(profile));
|
||||
(connectionManagementService as any)._connectionStatusManager = connectionStatusManager;
|
||||
|
||||
@@ -254,7 +254,7 @@ export class TestConnectionManagementService implements IConnectionManagementSer
|
||||
return undefined;
|
||||
}
|
||||
|
||||
getConnectionString(ownerUri: string): Thenable<string> {
|
||||
getConnectionString(connectionId: string): Thenable<string> {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user