From 0703eff3f0ad146a6bf41ae5898cd3741d411e78 Mon Sep 17 00:00:00 2001 From: Cory Rivera Date: Thu, 31 Aug 2023 11:12:33 -0700 Subject: [PATCH] Pass through database names to enable connection cleanup (#24251) * Also re-ordered Attach entry to match context menu placement of other admin commands. --- extensions/mssql/config.json | 2 +- extensions/mssql/package.json | 10 +++++----- extensions/mssql/src/contracts.ts | 2 ++ extensions/mssql/src/mssql.d.ts | 6 ++++-- .../src/objectManagement/objectManagementService.ts | 12 ++++++------ .../src/objectManagement/ui/detachDatabaseDialog.ts | 4 ++-- .../src/objectManagement/ui/dropDatabaseDialog.ts | 4 ++-- 7 files changed, 22 insertions(+), 18 deletions(-) diff --git a/extensions/mssql/config.json b/extensions/mssql/config.json index 86dda65dd5..735a6f8583 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.9.0.26", + "version": "4.9.0.27", "downloadFileNames": { "Windows_86": "win-x86-net7.0.zip", "Windows_64": "win-x64-net7.0.zip", diff --git a/extensions/mssql/package.json b/extensions/mssql/package.json index ef21e5a922..0c7800505a 100644 --- a/extensions/mssql/package.json +++ b/extensions/mssql/package.json @@ -588,6 +588,11 @@ "when": "connectionProvider == MSSQL && nodeType == Database && !isCloud && !(nodePath =~ /^.*\\/System Databases\\/.*$/) && config.workbench.enablePreviewFeatures && (productQualityType =~ /^(insider|dev)$/ || isDevelopment)", "group": "1_objectManagement@2" }, + { + "command": "mssql.attachDatabase", + "when": "connectionProvider == MSSQL && nodeType == Folder && objectType == Databases && !isCloud && config.workbench.enablePreviewFeatures", + "group": "1_objectManagement@2" + }, { "command": "mssql.dropDatabase", "when": "connectionProvider == MSSQL && nodeType == Database && !(nodePath =~ /^.*\\/System Databases\\/.*$/) && config.workbench.enablePreviewFeatures", @@ -598,11 +603,6 @@ "when": "connectionProvider == MSSQL && nodeType =~ /^(ServerLevelLogin|User|ServerLevelServerRole|ApplicationRole|DatabaseRole)$/ && !(nodePath =~ /^.*\\/System Databases\\/.*$/) && config.workbench.enablePreviewFeatures", "group": "1_objectManagement@3" }, - { - "command": "mssql.attachDatabase", - "when": "connectionProvider == MSSQL && nodeType == Folder && objectType == Databases && !isCloud && config.workbench.enablePreviewFeatures", - "group": "1_objectManagement" - }, { "command": "mssql.enableGroupBySchema", "when": "connectionProvider == MSSQL && nodeType && nodeType =~ /^(Server|Database)$/ && !config.mssql.objectExplorer.groupBySchema", diff --git a/extensions/mssql/src/contracts.ts b/extensions/mssql/src/contracts.ts index f8c9fc4bb2..993efc1b58 100644 --- a/extensions/mssql/src/contracts.ts +++ b/extensions/mssql/src/contracts.ts @@ -1652,6 +1652,7 @@ export namespace SearchObjectRequest { export interface DetachDatabaseRequestParams { connectionUri: string; + database: string; objectUrn: string; dropConnections: boolean; updateStatistics: boolean; @@ -1664,6 +1665,7 @@ export namespace DetachDatabaseRequest { export interface DropDatabaseRequestParams { connectionUri: string; + database: string; objectUrn: string; dropConnections: boolean; deleteBackupHistory: boolean; diff --git a/extensions/mssql/src/mssql.d.ts b/extensions/mssql/src/mssql.d.ts index f8c46af4db..ecfd56db97 100644 --- a/extensions/mssql/src/mssql.d.ts +++ b/extensions/mssql/src/mssql.d.ts @@ -977,13 +977,14 @@ declare module 'mssql' { /** * Detach a database. * @param connectionUri The URI of the server connection. + * @param database The target database. * @param objectUrn SMO Urn of the database to be detached. More information: https://learn.microsoft.com/sql/relational-databases/server-management-objects-smo/overview-smo * @param dropConnections Whether to drop active connections to this database. * @param updateStatistics Whether to update the optimization statistics related to this database. * @param generateScript Whether to generate a TSQL script for the operation instead of detaching the database. * @returns A string value representing the generated TSQL query if generateScript was set to true, and an empty string otherwise. */ - detachDatabase(connectionUri: string, objectUrn: string, dropConnections: boolean, updateStatistics: boolean, generateScript: boolean): Thenable; + detachDatabase(connectionUri: string, database: string, objectUrn: string, dropConnections: boolean, updateStatistics: boolean, generateScript: boolean): Thenable; /** * Attach one or more databases. * @param connectionUri The URI of the server connection. @@ -995,13 +996,14 @@ declare module 'mssql' { /** * Drop a database. * @param connectionUri The URI of the server connection. + * @param database The target database. * @param objectUrn SMO Urn of the database to be detached. More information: https://learn.microsoft.com/sql/relational-databases/server-management-objects-smo/overview-smo * @param dropConnections Whether to drop active connections to this database. * @param deleteBackupHistory Whether to delete backup and restore history information for this database. * @param generateScript Whether to generate a TSQL script for the operation instead of detaching the database. * @returns A string value representing the generated TSQL query if generateScript was set to true, and an empty string otherwise. */ - dropDatabase(connectionUri: string, objectUrn: string, dropConnections: boolean, deleteBackupHistory: boolean, generateScript: boolean): Thenable; + dropDatabase(connectionUri: string, database: string, objectUrn: string, dropConnections: boolean, deleteBackupHistory: boolean, generateScript: boolean): Thenable; /** * Gets the file path for the default database file folder for a SQL Server instance. * @param connectionUri The URI of the connection for the specific server. diff --git a/extensions/mssql/src/objectManagement/objectManagementService.ts b/extensions/mssql/src/objectManagement/objectManagementService.ts index 393f1c9012..16491a3d88 100644 --- a/extensions/mssql/src/objectManagement/objectManagementService.ts +++ b/extensions/mssql/src/objectManagement/objectManagementService.ts @@ -66,13 +66,13 @@ export class ObjectManagementService extends BaseService implements IObjectManag return this.runWithErrorHandling(contracts.SearchObjectRequest.type, params); } - async detachDatabase(connectionUri: string, objectUrn: string, dropConnections: boolean, updateStatistics: boolean, generateScript: boolean): Promise { - const params: contracts.DetachDatabaseRequestParams = { connectionUri, objectUrn, dropConnections, updateStatistics, generateScript }; + async detachDatabase(connectionUri: string, database: string, objectUrn: string, dropConnections: boolean, updateStatistics: boolean, generateScript: boolean): Promise { + const params: contracts.DetachDatabaseRequestParams = { connectionUri, database, objectUrn, dropConnections, updateStatistics, generateScript }; return this.runWithErrorHandling(contracts.DetachDatabaseRequest.type, params); } - async dropDatabase(connectionUri: string, objectUrn: string, dropConnections: boolean, deleteBackupHistory: boolean, generateScript: boolean): Promise { - const params: contracts.DropDatabaseRequestParams = { connectionUri, objectUrn, dropConnections, deleteBackupHistory, generateScript }; + async dropDatabase(connectionUri: string, database: string, objectUrn: string, dropConnections: boolean, deleteBackupHistory: boolean, generateScript: boolean): Promise { + const params: contracts.DropDatabaseRequestParams = { connectionUri, database, objectUrn, dropConnections, deleteBackupHistory, generateScript }; return this.runWithErrorHandling(contracts.DropDatabaseRequest.type, params); } @@ -257,7 +257,7 @@ export class TestObjectManagementService implements IObjectManagementService { return this.delayAndResolve(items); } - async detachDatabase(connectionUri: string, objectUrn: string, dropConnections: boolean, updateStatistics: boolean, generateScript: boolean): Promise { + async detachDatabase(connectionUri: string, database: string, objectUrn: string, dropConnections: boolean, updateStatistics: boolean, generateScript: boolean): Promise { return this.delayAndResolve(''); } @@ -265,7 +265,7 @@ export class TestObjectManagementService implements IObjectManagementService { return this.delayAndResolve(''); } - dropDatabase(connectionUri: string, objectUrn: string, dropConnections: boolean, deleteBackupHistory: boolean, generateScript: boolean): Thenable { + dropDatabase(connectionUri: string, database: string, objectUrn: string, dropConnections: boolean, deleteBackupHistory: boolean, generateScript: boolean): Thenable { return this.delayAndResolve(''); } diff --git a/extensions/mssql/src/objectManagement/ui/detachDatabaseDialog.ts b/extensions/mssql/src/objectManagement/ui/detachDatabaseDialog.ts index 32c792026b..2387514b99 100644 --- a/extensions/mssql/src/objectManagement/ui/detachDatabaseDialog.ts +++ b/extensions/mssql/src/objectManagement/ui/detachDatabaseDialog.ts @@ -45,11 +45,11 @@ export class DetachDatabaseDialog extends ObjectManagementDialogBase { - await this.objectManagementService.detachDatabase(this.options.connectionUri, this.options.objectUrn, this._dropConnections, this._updateStatistics, false); + await this.objectManagementService.detachDatabase(this.options.connectionUri, this.options.database, this.options.objectUrn, this._dropConnections, this._updateStatistics, false); } protected override async generateScript(): Promise { - return await this.objectManagementService.detachDatabase(this.options.connectionUri, this.options.objectUrn, this._dropConnections, this._updateStatistics, true); + return await this.objectManagementService.detachDatabase(this.options.connectionUri, this.options.database, this.options.objectUrn, this._dropConnections, this._updateStatistics, true); } protected override async validateInput(): Promise { diff --git a/extensions/mssql/src/objectManagement/ui/dropDatabaseDialog.ts b/extensions/mssql/src/objectManagement/ui/dropDatabaseDialog.ts index b2c4128f64..1576bb1776 100644 --- a/extensions/mssql/src/objectManagement/ui/dropDatabaseDialog.ts +++ b/extensions/mssql/src/objectManagement/ui/dropDatabaseDialog.ts @@ -49,11 +49,11 @@ export class DropDatabaseDialog extends ObjectManagementDialogBase { - await this.objectManagementService.dropDatabase(this.options.connectionUri, this.options.objectUrn, this._dropConnections, this._deleteBackupHistory, false); + await this.objectManagementService.dropDatabase(this.options.connectionUri, this.options.database, this.options.objectUrn, this._dropConnections, this._deleteBackupHistory, false); } protected override async generateScript(): Promise { - return await this.objectManagementService.dropDatabase(this.options.connectionUri, this.options.objectUrn, this._dropConnections, this._deleteBackupHistory, true); + return await this.objectManagementService.dropDatabase(this.options.connectionUri, this.options.database, this.options.objectUrn, this._dropConnections, this._deleteBackupHistory, true); } protected override async validateInput(): Promise {