diff --git a/extensions/mssql/config.json b/extensions/mssql/config.json index 6b1aaced4c..c672a2a37f 100644 --- a/extensions/mssql/config.json +++ b/extensions/mssql/config.json @@ -1,6 +1,6 @@ { "downloadUrl": "https://github.com/Microsoft/sqltoolsservice/releases/download/{#version#}/microsoft.sqltools.servicelayer-{#fileName#}", - "version": "4.6.0.4", + "version": "4.6.0.5", "downloadFileNames": { "Windows_86": "win-x86-net7.0.zip", "Windows_64": "win-x64-net7.0.zip", diff --git a/extensions/mssql/src/objectManagement/commands.ts b/extensions/mssql/src/objectManagement/commands.ts index 2b4c6eaba5..a6cc3fe49a 100644 --- a/extensions/mssql/src/objectManagement/commands.ts +++ b/extensions/mssql/src/objectManagement/commands.ts @@ -43,8 +43,12 @@ function getObjectManagementService(appContext: AppContext, useTestService: bool } async function handleNewLoginDialogCommand(context: azdata.ObjectExplorerContext, service: IObjectManagementService): Promise { + const connectionUri = await getConnectionUri(context); + if (!connectionUri) { + return; + } + try { - const connectionUri = await azdata.connection.getUriForConnection(context.connectionProfile.id); const dialog = new LoginDialog(service, connectionUri, true, undefined, context); await dialog.open(); } @@ -57,8 +61,11 @@ async function handleNewLoginDialogCommand(context: azdata.ObjectExplorerContext } async function handleNewUserDialogCommand(context: azdata.ObjectExplorerContext, service: IObjectManagementService): Promise { + const connectionUri = await getConnectionUri(context); + if (!connectionUri) { + return; + } try { - const connectionUri = await azdata.connection.getUriForConnection(context.connectionProfile.id); const dialog = new UserDialog(service, connectionUri, context.connectionProfile.databaseName, true, undefined, context); await dialog.open(); } @@ -71,9 +78,12 @@ async function handleNewUserDialogCommand(context: azdata.ObjectExplorerContext, } async function handleObjectPropertiesDialogCommand(context: azdata.ObjectExplorerContext, service: IObjectManagementService): Promise { + const connectionUri = await getConnectionUri(context); + if (!connectionUri) { + return; + } const nodeTypeDisplayName = getNodeTypeDisplayName(context.nodeInfo.nodeType); try { - const connectionUri = await azdata.connection.getUriForConnection(context.connectionProfile.id); let dialog; switch (context.nodeInfo.nodeType) { case NodeType.Login: @@ -98,6 +108,10 @@ async function handleObjectPropertiesDialogCommand(context: azdata.ObjectExplore } async function handleDeleteObjectCommand(context: azdata.ObjectExplorerContext, service: IObjectManagementService): Promise { + const connectionUri = await getConnectionUri(context); + if (!connectionUri) { + return; + } let additionalConfirmationMessage: string; switch (context.nodeInfo.nodeType) { case NodeType.Login: @@ -122,7 +136,6 @@ async function handleDeleteObjectCommand(context: azdata.ObjectExplorerContext, operation: async (operation) => { try { const startTime = Date.now(); - const connectionUri = await azdata.connection.getUriForConnection(context.connectionProfile.id); switch (context.nodeInfo.nodeType) { case NodeType.Login: await service.deleteLogin(connectionUri, context.nodeInfo.label); @@ -151,3 +164,11 @@ async function handleDeleteObjectCommand(context: azdata.ObjectExplorerContext, } }); } + +async function getConnectionUri(context: azdata.ObjectExplorerContext): Promise { + const connectionUri = await azdata.connection.getUriForConnection(context.connectionProfile.id); + if (!connectionUri) { + await vscode.window.showErrorMessage(localizedConstants.FailedToRetrieveConnectionInfoErrorMessage, { modal: true }); + } + return connectionUri; +} diff --git a/extensions/mssql/src/objectManagement/localizedConstants.ts b/extensions/mssql/src/objectManagement/localizedConstants.ts index 4176c1f299..57529a42d4 100644 --- a/extensions/mssql/src/objectManagement/localizedConstants.ts +++ b/extensions/mssql/src/objectManagement/localizedConstants.ts @@ -16,7 +16,8 @@ export const UserTypeDisplayNameInTitle: string = localize('objectManagement.Use export const HelpText: string = localize('objectManagement.helpText', "Help"); export const YesText: string = localize('objectManagement.yesText', "Yes"); export const OkText: string = localize('objectManagement.OkText', "OK"); -export const LoadingDialogText: string = localize('objectManagement.loadingDialog', "Loading dialog...") +export const LoadingDialogText: string = localize('objectManagement.loadingDialog', "Loading dialog..."); +export const FailedToRetrieveConnectionInfoErrorMessage: string = localize('objectManagement.noConnectionUriError', "Failed to retrieve the connection information, please reconnect and try again.") export function RefreshObjectExplorerError(error: string): string { return localize({ diff --git a/extensions/mssql/src/objectManagement/objectManagementService.ts b/extensions/mssql/src/objectManagement/objectManagementService.ts index 619cb2ed4c..98d0048d57 100644 --- a/extensions/mssql/src/objectManagement/objectManagementService.ts +++ b/extensions/mssql/src/objectManagement/objectManagementService.ts @@ -111,7 +111,7 @@ export class ObjectManagementService implements IObjectManagementService { return this.client.sendRequest(contracts.UpdateUserRequest.type, params).then( r => { }, e => { - this.client.logFailedRequest(contracts.UpdateLoginRequest.type, e); + this.client.logFailedRequest(contracts.UpdateUserRequest.type, e); return Promise.reject(new Error(e.message)); } ); diff --git a/extensions/mssql/src/objectManagement/ui/objectManagementDialogBase.ts b/extensions/mssql/src/objectManagement/ui/objectManagementDialogBase.ts index b6a018de80..ef5c51200f 100644 --- a/extensions/mssql/src/objectManagement/ui/objectManagementDialogBase.ts +++ b/extensions/mssql/src/objectManagement/ui/objectManagementDialogBase.ts @@ -184,6 +184,7 @@ export abstract class ObjectManagementDialogBase