mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-17 02:51:36 -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;
|
this.options.expiresOn = model.options.expiresOn;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (model.options?.originalDatabase) {
|
||||||
|
this.originalDatabase = model.options.originalDatabase;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
//Default for a new connection
|
//Default for a new connection
|
||||||
this.savePassword = false;
|
this.savePassword = false;
|
||||||
@@ -142,6 +145,19 @@ export class ConnectionProfile extends ProviderConnectionInfo implements interfa
|
|||||||
this.options['azureResourceId'] = value;
|
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 {
|
public get registeredServerDescription(): string {
|
||||||
return this.options['registeredServerDescription'];
|
return this.options['registeredServerDescription'];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,7 +6,6 @@
|
|||||||
import { IConnectionProfile } from 'sql/platform/connection/common/interfaces';
|
import { IConnectionProfile } from 'sql/platform/connection/common/interfaces';
|
||||||
import { ConnectionProfile } from 'sql/platform/connection/common/connectionProfile';
|
import { ConnectionProfile } from 'sql/platform/connection/common/connectionProfile';
|
||||||
import { ConnectionProfileGroup } from 'sql/platform/connection/common/connectionProfileGroup';
|
import { ConnectionProfileGroup } from 'sql/platform/connection/common/connectionProfileGroup';
|
||||||
import { mssqlProviderName } from 'sql/platform/connection/common/constants';
|
|
||||||
|
|
||||||
// CONSTANTS //////////////////////////////////////////////////////////////////////////////////////
|
// CONSTANTS //////////////////////////////////////////////////////////////////////////////////////
|
||||||
const msInH = 3.6e6;
|
const msInH = 3.6e6;
|
||||||
@@ -134,9 +133,7 @@ export function findProfileInGroup(og: IConnectionProfile, groups: ConnectionPro
|
|||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function isMaster(profile: IConnectionProfile): boolean {
|
export function isServerConnection(profile: IConnectionProfile): boolean {
|
||||||
// TODO: the connection profile should have a property to indicate whether the connection is a server connection or database connection
|
// If the user did not specify a database in the original connection, then this is considered a server-level connection
|
||||||
// created issue to track the problem: https://github.com/Microsoft/azuredatastudio/issues/5193.
|
return !profile.options.originalDatabase;
|
||||||
return (profile.providerName === mssqlProviderName && profile.databaseName?.toLowerCase() === 'master')
|
|
||||||
|| (profile.providerName.toLowerCase() === 'pgsql' && profile.databaseName?.toLowerCase() === 'postgres');
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -150,7 +150,7 @@ export class AsmtResultsViewComponent extends TabChild implements IAssessmentCom
|
|||||||
let self = this;
|
let self = this;
|
||||||
const profile = this._commonService.connectionManagementService.connectionInfo.connectionProfile;
|
const profile = this._commonService.connectionManagementService.connectionInfo.connectionProfile;
|
||||||
|
|
||||||
this.isServerMode = !profile.databaseName || Utils.isMaster(profile);
|
this.isServerMode = !profile.databaseName || Utils.isServerConnection(profile);
|
||||||
|
|
||||||
if (this.isServerMode) {
|
if (this.isServerMode) {
|
||||||
this.placeholderNoResultsLabel = nls.localize('asmt.TargetInstanceComplient', "Instance {0} is totally compliant with the best practices. Good job!", profile.serverName);
|
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._register(this.themeService.onDidColorThemeChange(this.updateTheme, this));
|
||||||
this.updateTheme(this.themeService.getColorTheme());
|
this.updateTheme(this.themeService.getColorTheme());
|
||||||
const profile: IConnectionProfile = this._bootstrapService.getOriginalConnectionProfile();
|
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
|
// Route to the server page as this is the default database
|
||||||
this._router.navigate(['server-dashboard']).catch(onUnexpectedError);
|
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', () => {
|
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', () => {
|
test('parseTimeString - test if time is parsed correctly', () => {
|
||||||
|
|||||||
@@ -472,6 +472,9 @@ export class ConnectionManagementService extends Disposable implements IConnecti
|
|||||||
if (!tokenFillSuccess) {
|
if (!tokenFillSuccess) {
|
||||||
throw new Error(nls.localize('connection.noAzureAccount', "Failed to get Azure account token for connection"));
|
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 => {
|
return this.createNewConnection(uri, connection).then(async connectionResult => {
|
||||||
if (connectionResult && connectionResult.connected) {
|
if (connectionResult && connectionResult.connected) {
|
||||||
// The connected succeeded so add it to our active connections now, optionally adding it to the MRU based on
|
// 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 {
|
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 (matchingEditor) {
|
||||||
if (editor instanceof DashboardInput) {
|
matchingEditor.connectionProfile.connectionName = profile.connectionName;
|
||||||
if (DashboardInput.profileMatches(profile, editor.connectionProfile)) {
|
matchingEditor.connectionProfile.databaseName = profile.databaseName;
|
||||||
editor.connectionProfile.connectionName = profile.connectionName;
|
this._editorService.openEditor(matchingEditor).then(() => {
|
||||||
editor.connectionProfile.databaseName = profile.databaseName;
|
const target = !profile.databaseName || Utils.isServerConnection(profile) ? AngularEventType.NAV_SERVER : AngularEventType.NAV_DATABASE;
|
||||||
this._editorService.openEditor(editor)
|
this._angularEventing.sendAngularEvent(matchingEditor.uri, target);
|
||||||
.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);
|
}, errors.onUnexpectedError);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
return found;
|
return !!matchingEditor;
|
||||||
}
|
}
|
||||||
|
|
||||||
public closeDashboard(uri: string): void {
|
public closeDashboard(uri: string): void {
|
||||||
|
|||||||
Reference in New Issue
Block a user