mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-01-22 09:35:37 -05:00
Set original database for connection done through connection dialog (#17266)
* check if database connection * Change name of isMaster and remove import * Set to false * take out connecttodatabase * remove connecttodatabase * Original database * remove empty string check * clean * set original database for when saving connection * pass unit test * map -> find * PR changes * Comments for original database
This commit is contained in:
@@ -70,6 +70,9 @@ export class ConnectionProfile extends ProviderConnectionInfo implements interfa
|
||||
this.options.expiresOn = model.options.expiresOn;
|
||||
}
|
||||
}
|
||||
if (model.options?.originalDatabase) {
|
||||
this.originalDatabase = model.options.originalDatabase;
|
||||
}
|
||||
} else {
|
||||
//Default for a new connection
|
||||
this.savePassword = false;
|
||||
@@ -142,6 +145,19 @@ export class ConnectionProfile extends ProviderConnectionInfo implements interfa
|
||||
this.options['azureResourceId'] = value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Database of server specified before connection.
|
||||
* Some providers will modify the database field of the connection once a connection is made
|
||||
* so that it reflects the actual database that was connected to.
|
||||
*/
|
||||
public get originalDatabase() {
|
||||
return this.options['originalDatabase'];
|
||||
}
|
||||
|
||||
public set originalDatabase(value: string | undefined) {
|
||||
this.options['originalDatabase'] = value;
|
||||
}
|
||||
|
||||
public get registeredServerDescription(): string {
|
||||
return this.options['registeredServerDescription'];
|
||||
}
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
import { IConnectionProfile } from 'sql/platform/connection/common/interfaces';
|
||||
import { ConnectionProfile } from 'sql/platform/connection/common/connectionProfile';
|
||||
import { ConnectionProfileGroup } from 'sql/platform/connection/common/connectionProfileGroup';
|
||||
import { mssqlProviderName } from 'sql/platform/connection/common/constants';
|
||||
|
||||
// CONSTANTS //////////////////////////////////////////////////////////////////////////////////////
|
||||
const msInH = 3.6e6;
|
||||
@@ -134,9 +133,7 @@ export function findProfileInGroup(og: IConnectionProfile, groups: ConnectionPro
|
||||
return undefined;
|
||||
}
|
||||
|
||||
export function isMaster(profile: IConnectionProfile): boolean {
|
||||
// TODO: the connection profile should have a property to indicate whether the connection is a server connection or database connection
|
||||
// created issue to track the problem: https://github.com/Microsoft/azuredatastudio/issues/5193.
|
||||
return (profile.providerName === mssqlProviderName && profile.databaseName?.toLowerCase() === 'master')
|
||||
|| (profile.providerName.toLowerCase() === 'pgsql' && profile.databaseName?.toLowerCase() === 'postgres');
|
||||
export function isServerConnection(profile: IConnectionProfile): boolean {
|
||||
// If the user did not specify a database in the original connection, then this is considered a server-level connection
|
||||
return !profile.options.originalDatabase;
|
||||
}
|
||||
|
||||
@@ -150,7 +150,7 @@ export class AsmtResultsViewComponent extends TabChild implements IAssessmentCom
|
||||
let self = this;
|
||||
const profile = this._commonService.connectionManagementService.connectionInfo.connectionProfile;
|
||||
|
||||
this.isServerMode = !profile.databaseName || Utils.isMaster(profile);
|
||||
this.isServerMode = !profile.databaseName || Utils.isServerConnection(profile);
|
||||
|
||||
if (this.isServerMode) {
|
||||
this.placeholderNoResultsLabel = nls.localize('asmt.TargetInstanceComplient', "Instance {0} is totally compliant with the best practices. Good job!", profile.serverName);
|
||||
|
||||
@@ -40,7 +40,7 @@ export class DashboardComponent extends AngularDisposable implements OnInit {
|
||||
this._register(this.themeService.onDidColorThemeChange(this.updateTheme, this));
|
||||
this.updateTheme(this.themeService.getColorTheme());
|
||||
const profile: IConnectionProfile = this._bootstrapService.getOriginalConnectionProfile();
|
||||
if (profile && (!profile.databaseName || Utils.isMaster(profile))) {
|
||||
if (profile && (!profile.databaseName || Utils.isServerConnection(profile))) {
|
||||
// Route to the server page as this is the default database
|
||||
this._router.navigate(['server-dashboard']).catch(onUnexpectedError);
|
||||
}
|
||||
|
||||
@@ -47,7 +47,7 @@ suite('Connection Utilities tests', () => {
|
||||
|
||||
|
||||
test('isMaster - test if isMaster recognizes Connection Profile as server connection', () => {
|
||||
assert(ConnectionUtils.isMaster(connection));
|
||||
assert(ConnectionUtils.isServerConnection(connection));
|
||||
});
|
||||
|
||||
test('parseTimeString - test if time is parsed correctly', () => {
|
||||
|
||||
@@ -472,6 +472,9 @@ export class ConnectionManagementService extends Disposable implements IConnecti
|
||||
if (!tokenFillSuccess) {
|
||||
throw new Error(nls.localize('connection.noAzureAccount', "Failed to get Azure account token for connection"));
|
||||
}
|
||||
if (options.saveTheConnection) {
|
||||
connection.options.originalDatabase = connection.databaseName;
|
||||
}
|
||||
return this.createNewConnection(uri, connection).then(async connectionResult => {
|
||||
if (connectionResult && connectionResult.connected) {
|
||||
// The connected succeeded so add it to our active connections now, optionally adding it to the MRU based on
|
||||
@@ -629,27 +632,20 @@ export class ConnectionManagementService extends Disposable implements IConnecti
|
||||
}
|
||||
|
||||
private focusDashboard(profile: interfaces.IConnectionProfile): boolean {
|
||||
let found: boolean = false;
|
||||
const matchingEditor = this._editorService.editors.find(editor => {
|
||||
return editor instanceof DashboardInput && DashboardInput.profileMatches(profile, editor.connectionProfile);
|
||||
}) as DashboardInput;
|
||||
|
||||
this._editorService.editors.map(editor => {
|
||||
if (editor instanceof DashboardInput) {
|
||||
if (DashboardInput.profileMatches(profile, editor.connectionProfile)) {
|
||||
editor.connectionProfile.connectionName = profile.connectionName;
|
||||
editor.connectionProfile.databaseName = profile.databaseName;
|
||||
this._editorService.openEditor(editor)
|
||||
.then(() => {
|
||||
if (!profile.databaseName || Utils.isMaster(profile)) {
|
||||
this._angularEventing.sendAngularEvent(editor.uri, AngularEventType.NAV_SERVER);
|
||||
} else {
|
||||
this._angularEventing.sendAngularEvent(editor.uri, AngularEventType.NAV_DATABASE);
|
||||
}
|
||||
found = true;
|
||||
}, errors.onUnexpectedError);
|
||||
}
|
||||
}
|
||||
});
|
||||
if (matchingEditor) {
|
||||
matchingEditor.connectionProfile.connectionName = profile.connectionName;
|
||||
matchingEditor.connectionProfile.databaseName = profile.databaseName;
|
||||
this._editorService.openEditor(matchingEditor).then(() => {
|
||||
const target = !profile.databaseName || Utils.isServerConnection(profile) ? AngularEventType.NAV_SERVER : AngularEventType.NAV_DATABASE;
|
||||
this._angularEventing.sendAngularEvent(matchingEditor.uri, target);
|
||||
}, errors.onUnexpectedError);
|
||||
}
|
||||
|
||||
return found;
|
||||
return !!matchingEditor;
|
||||
}
|
||||
|
||||
public closeDashboard(uri: string): void {
|
||||
|
||||
Reference in New Issue
Block a user