diff --git a/extensions/mssql/package.json b/extensions/mssql/package.json index 3e327e9fb8..dd4daa9fe4 100644 --- a/extensions/mssql/package.json +++ b/extensions/mssql/package.json @@ -522,7 +522,37 @@ { "command": "mssql.newObject", "when": "connectionProvider == MSSQL && nodeType == Folder && objectType =~ /^(ServerLevelLogins|Users|ServerLevelServerRoles|ApplicationRoles|DatabaseRoles|Databases)$/ && config.workbench.enablePreviewFeatures", - "group": "1_objectManagement" + "group": "1_objectManagement@0" + }, + { + "command": "mssql.newObject", + "when": "connectionProvider == MSSQL && nodeType =~ /^(ServerLevelLogin|User|ServerLevelServerRole|ApplicationRole|DatabaseRole|Database)$/ && config.workbench.enablePreviewFeatures", + "group": "1_objectManagement@0" + }, + { + "command": "mssql.renameObject", + "when": "connectionProvider == MSSQL && nodeType =~ /^(ServerLevelLogin|User|Table|View|ServerLevelServerRole|ApplicationRole|DatabaseRole)$/ && config.workbench.enablePreviewFeatures", + "group": "1_objectManagement@1" + }, + { + "command": "mssql.renameObject", + "when": "connectionProvider == MSSQL && nodeType == Column && config.workbench.enablePreviewFeatures && nodePath =~ /^.*\\/Tables\\/.*\\/Columns\\/.*$/", + "group": "1_objectManagement@1" + }, + { + "command": "mssql.detachDatabase", + "when": "connectionProvider == MSSQL && nodeType == Database && !isCloud && config.workbench.enablePreviewFeatures", + "group": "1_objectManagement@2" + }, + { + "command": "mssql.deleteObject", + "when": "connectionProvider == MSSQL && nodeType =~ /^(ServerLevelLogin|User|ServerLevelServerRole|ApplicationRole|DatabaseRole|Database)$/ && config.workbench.enablePreviewFeatures", + "group": "1_objectManagement@3" + }, + { + "command": "mssql.enableGroupBySchema", + "when": "connectionProvider == MSSQL && nodeType && nodeType =~ /^(Server|Database)$/ && !config.mssql.objectExplorer.groupBySchema", + "group": "z_objectexplorer@0" }, { "command": "mssql.objectProperties", @@ -535,31 +565,6 @@ "when": "connectionProvider == MSSQL && serverInfo && !isCloud && nodeType && nodeType =~ /^(Database|Server)$/ && mssql:engineedition != 11 && isDevelopment", "group": "z_objectexplorer@3" }, - { - "command": "mssql.deleteObject", - "when": "connectionProvider == MSSQL && nodeType =~ /^(ServerLevelLogin|User|ServerLevelServerRole|ApplicationRole|DatabaseRole|Database)$/ && config.workbench.enablePreviewFeatures", - "group": "1_objectManagement" - }, - { - "command": "mssql.renameObject", - "when": "connectionProvider == MSSQL && nodeType =~ /^(ServerLevelLogin|User|Table|View|ServerLevelServerRole|ApplicationRole|DatabaseRole)$/ && config.workbench.enablePreviewFeatures", - "group": "1_objectManagement" - }, - { - "command": "mssql.renameObject", - "when": "connectionProvider == MSSQL && nodeType == Column && config.workbench.enablePreviewFeatures && nodePath =~ /^.*\\/Tables\\/.*\\/Columns\\/.*$/", - "group": "1_objectManagement" - }, - { - "command": "mssql.detachDatabase", - "when": "connectionProvider == MSSQL && nodeType == Database && !isCloud && config.workbench.enablePreviewFeatures", - "group": "1_objectManagement" - }, - { - "command": "mssql.enableGroupBySchema", - "when": "connectionProvider == MSSQL && nodeType && nodeType =~ /^(Server|Database)$/ && !config.mssql.objectExplorer.groupBySchema", - "group": "z_objectexplorer@0" - }, { "command": "mssql.disableGroupBySchema", "when": "connectionProvider == MSSQL && nodeType && nodeType =~ /^(Server|Database)$/ && config.mssql.objectExplorer.groupBySchema" @@ -604,28 +609,33 @@ { "command": "mssql.newObject", "when": "connectionProvider == MSSQL && nodeType == Folder && objectType =~ /^(ServerLevelLogins|Users|ServerLevelServerRoles|ApplicationRoles|DatabaseRoles|Databases)$/ && config.workbench.enablePreviewFeatures", - "group": "1_objectManagement" + "group": "1_objectManagement@0" + }, + { + "command": "mssql.newObject", + "when": "connectionProvider == MSSQL && nodeType =~ /^(ServerLevelLogin|User|ServerLevelServerRole|ApplicationRole|DatabaseRole|Database)$/ && config.workbench.enablePreviewFeatures", + "group": "1_objectManagement@0" + }, + { + "command": "mssql.renameObject", + "when": "connectionProvider == MSSQL && nodeType =~ /^(ServerLevelLogin|User|Table|View|ServerLevelServerRole|ApplicationRole|DatabaseRole)$/ && config.workbench.enablePreviewFeatures", + "group": "1_objectManagement@1" + }, + { + "command": "mssql.renameObject", + "when": "connectionProvider == MSSQL && nodeType == Column && config.workbench.enablePreviewFeatures && nodePath =~ /^.*\\/Tables\\/.*\\/Columns\\/.*$/", + "group": "1_objectManagement@1" + }, + { + "command": "mssql.deleteObject", + "when": "connectionProvider == MSSQL && nodeType =~ /^(ServerLevelLogin|User|ServerLevelServerRole|ApplicationRole|DatabaseRole|Database)$/ && config.workbench.enablePreviewFeatures", + "group": "1_objectManagement@3" }, { "command": "mssql.objectProperties", "when": "connectionProvider == MSSQL && nodeType =~ /^(ServerLevelLogin|User|ServerLevelServerRole|ApplicationRole|DatabaseRole)$/ && config.workbench.enablePreviewFeatures", "group": "z_objectManagement" }, - { - "command": "mssql.deleteObject", - "when": "connectionProvider == MSSQL && nodeType =~ /^(ServerLevelLogin|User|ServerLevelServerRole|ApplicationRole|DatabaseRole|Database)$/ && config.workbench.enablePreviewFeatures", - "group": "1_objectManagement" - }, - { - "command": "mssql.renameObject", - "when": "connectionProvider == MSSQL && nodeType =~ /^(ServerLevelLogin|User|Table|View|ServerLevelServerRole|ApplicationRole|DatabaseRole)$/ && config.workbench.enablePreviewFeatures", - "group": "1_objectManagement" - }, - { - "command": "mssql.renameObject", - "when": "connectionProvider == MSSQL && nodeType == Column && config.workbench.enablePreviewFeatures && nodePath =~ /^.*\\/Tables\\/.*\\/Columns\\/.*$/", - "group": "1_objectManagement" - }, { "command": "mssql.enableGroupBySchema", "when": "connectionProvider == MSSQL && nodeType && nodeType =~ /^(Server|Database)$/ && !config.mssql.objectExplorer.groupBySchema" diff --git a/extensions/mssql/src/objectManagement/commands.ts b/extensions/mssql/src/objectManagement/commands.ts index 5417d0e673..bc91a73b33 100644 --- a/extensions/mssql/src/objectManagement/commands.ts +++ b/extensions/mssql/src/objectManagement/commands.ts @@ -78,8 +78,21 @@ async function handleNewObjectDialogCommand(context: azdata.ObjectExplorerContex case FolderType.Databases: objectType = ObjectManagement.NodeType.Database; break; - default: - throw new Error(`Unsupported folder type: ${context.nodeInfo!.objectType}`); + } + // Fall back to node type in case the user right clicked on an object instead of a folder + if (!objectType) { + switch (context.nodeInfo!.nodeType) { + case ObjectManagement.NodeType.ApplicationRole: + case ObjectManagement.NodeType.DatabaseRole: + case ObjectManagement.NodeType.ServerLevelLogin: + case ObjectManagement.NodeType.ServerLevelServerRole: + case ObjectManagement.NodeType.User: + case ObjectManagement.NodeType.Database: + objectType = context.nodeInfo!.nodeType as ObjectManagement.NodeType; + break; + default: + throw new Error(objectManagementLoc.NoDialogFoundError(context.nodeInfo!.nodeType, context.nodeInfo!.objectType)); + } } try { diff --git a/extensions/mssql/src/objectManagement/localizedConstants.ts b/extensions/mssql/src/objectManagement/localizedConstants.ts index 96270dea45..299fb91d39 100644 --- a/extensions/mssql/src/objectManagement/localizedConstants.ts +++ b/extensions/mssql/src/objectManagement/localizedConstants.ts @@ -26,6 +26,7 @@ export const ApplicationRoleTypeDisplayNameInTitle: string = localize('objectMan export const DatabaseRoleTypeDisplayName: string = localize('objectManagement.DatabaseRoleTypeDisplayName', "database role"); export const DatabaseRoleTypeDisplayNameInTitle: string = localize('objectManagement.DatabaseRoleTypeDisplayNameInTitle', "Database Role"); export const DatabaseTypeDisplayNameInTitle: string = localize('objectManagement.DatabaseDisplayNameInTitle', "Database"); +export function NoDialogFoundError(nodeType: string, objectType: string): string { return localize('objectManagement.noDialogFoundError', "Could not find a supported dialog for node type '{0}' and object type '{1}'.", nodeType, objectType); } // Shared Strings export const FailedToRetrieveConnectionInfoErrorMessage: string = localize('objectManagement.noConnectionUriError', "Failed to retrieve the connection information, please reconnect and try again.")