diff --git a/extensions/integration-tests/src/test/schemaCompare.test.ts b/extensions/integration-tests/src/test/schemaCompare.test.ts index 465f7f9d51..f57b1b54ba 100644 --- a/extensions/integration-tests/src/test/schemaCompare.test.ts +++ b/extensions/integration-tests/src/test/schemaCompare.test.ts @@ -302,7 +302,7 @@ suite('Schema compare integration test suite @DacFx@', () => { assert(includeResult.affectedDependencies[0].included === true, 'Table t2 should be included as a result of including v1. Actual: false'); // excluding views from the comparison should make it so t2 can be excluded - deploymentOptions.excludeObjectTypes.value.push(mssql.SchemaObjectType.Views); + deploymentOptions.excludeObjectTypes.value.push(Object.keys(deploymentOptions.objectTypesDictionary).find((key) => { return deploymentOptions.objectTypesDictionary[key] === 'Views'; })); await schemaCompareService.schemaCompare(operationId, source, target, azdata.TaskExecutionMode.execute, deploymentOptions); const excludeResult3 = await schemaCompareService.schemaCompareIncludeExcludeNode(operationId, t2Difference, false, azdata.TaskExecutionMode.execute); assertIncludeExcludeResult(excludeResult3, true, 0, 0); @@ -507,7 +507,7 @@ suite('Schema compare integration test suite @DacFx@', () => { const deploymentOptionsResult = await schemaCompareService.schemaCompareGetDefaultOptions(); let deploymentOptions = deploymentOptionsResult.defaultDeploymentOptions; - deploymentOptions.excludeObjectTypes.value.push(mssql.SchemaObjectType.TableValuedFunctions); + deploymentOptions.excludeObjectTypes.value.push(Object.keys(deploymentOptions.objectTypesDictionary).find((key) => { return deploymentOptions.objectTypesDictionary[key] === 'TableValuedFunctions'; })); const schemaCompareResult = await schemaCompareService.schemaCompare(operationId, source, target, azdata.TaskExecutionMode.execute, deploymentOptions); assertSchemaCompareResult(schemaCompareResult, operationId, 3); diff --git a/extensions/mssql/src/mssql.d.ts b/extensions/mssql/src/mssql.d.ts index 0dcfe74b19..83bfec55d8 100644 --- a/extensions/mssql/src/mssql.d.ts +++ b/extensions/mssql/src/mssql.d.ts @@ -179,7 +179,7 @@ declare module 'mssql' { excludeObjectTypes: DacDeployOptionPropertyObject; // key will be the boolean option name booleanOptionsDictionary: { [key: string]: DacDeployOptionPropertyBoolean }; - // key will be the object type enum name(nothing but option name) + // key will be the object type enum name (nothing but option name) objectTypesDictionary: { [key: string]: string }; } @@ -191,81 +191,6 @@ declare module 'mssql' { checked: boolean; } - /** - * Values from \Product\Source\DeploymentApi\ObjectTypes.cs - */ - export const enum SchemaObjectType { - Aggregates = 0, - ApplicationRoles = 1, - Assemblies = 2, - AssemblyFiles = 3, - AsymmetricKeys = 4, - BrokerPriorities = 5, - Certificates = 6, - ColumnEncryptionKeys = 7, - ColumnMasterKeys = 8, - Contracts = 9, - DatabaseOptions = 10, - DatabaseRoles = 11, - DatabaseTriggers = 12, - Defaults = 13, - ExtendedProperties = 14, - ExternalDataSources = 15, - ExternalFileFormats = 16, - ExternalTables = 17, - Filegroups = 18, - Files = 19, - FileTables = 20, - FullTextCatalogs = 21, - FullTextStoplists = 22, - MessageTypes = 23, - PartitionFunctions = 24, - PartitionSchemes = 25, - Permissions = 26, - Queues = 27, - RemoteServiceBindings = 28, - RoleMembership = 29, - Rules = 30, - ScalarValuedFunctions = 31, - SearchPropertyLists = 32, - SecurityPolicies = 33, - Sequences = 34, - Services = 35, - Signatures = 36, - StoredProcedures = 37, - SymmetricKeys = 38, - Synonyms = 39, - Tables = 40, - TableValuedFunctions = 41, - UserDefinedDataTypes = 42, - UserDefinedTableTypes = 43, - ClrUserDefinedTypes = 44, - Users = 45, - Views = 46, - XmlSchemaCollections = 47, - Audits = 48, - Credentials = 49, - CryptographicProviders = 50, - DatabaseAuditSpecifications = 51, - DatabaseEncryptionKeys = 52, - DatabaseScopedCredentials = 53, - Endpoints = 54, - ErrorMessages = 55, - EventNotifications = 56, - EventSessions = 57, - LinkedServerLogins = 58, - LinkedServers = 59, - Logins = 60, - MasterKeys = 61, - Routes = 62, - ServerAuditSpecifications = 63, - ServerRoleMembership = 64, - ServerRoles = 65, - ServerTriggers = 66, - ExternalStreams = 67, - ExternalStreamingJobs = 68 - } - export interface SchemaCompareObjectId { nameParts: string[]; sqlObjectType: string; diff --git a/extensions/schema-compare/src/dialogs/schemaCompareOptionsDialog.ts b/extensions/schema-compare/src/dialogs/schemaCompareOptionsDialog.ts index eefbcd4e80..efbfefbb64 100644 --- a/extensions/schema-compare/src/dialogs/schemaCompareOptionsDialog.ts +++ b/extensions/schema-compare/src/dialogs/schemaCompareOptionsDialog.ts @@ -63,7 +63,7 @@ export class SchemaCompareOptionsDialog { protected execute(): void { // Update the model deploymentoptions with the updated table component values this.optionsModel.setDeploymentOptions(); - this.optionsModel.setObjectTypeOptions(); + this.optionsModel.setIncludeObjectTypesToDeploymentOptions(); // Set the publish deploymentoptions with the updated table component values this.schemaComparison.setDeploymentOptions(this.optionsModel.deploymentOptions); @@ -102,6 +102,7 @@ export class SchemaCompareOptionsDialog { // reset optionsvalueNameLookup with fresh deployment options this.optionsModel.setOptionsToValueNameLookup(); + this.optionsModel.setIncludeObjectTypesLookup(); await this.updateOptionsTable(); this.optionsFlexBuilder.removeItem(this.optionsTable); @@ -182,11 +183,13 @@ export class SchemaCompareOptionsDialog { this.objectsTable = view.modelBuilder.table().component(); await this.updateObjectsTable(); + // Update inlcude object type options value on checkbox onchange this.disposableListeners.push(this.objectsTable.onCellAction((rowState) => { let checkboxState = rowState; if (checkboxState && checkboxState.row !== undefined) { - let label = this.optionsModel.objectTypeLabels[checkboxState.row]; - this.optionsModel.objectsLookup[label] = checkboxState.checked; + // data[row][1] contains the include object type option display name + const displayName = this.objectsTable?.data[checkboxState.row][1]; + this.optionsModel.setIncludeObjectTypesOptionValue(displayName, checkboxState.checked); this.optionsChanged = true; } })); @@ -229,7 +232,7 @@ export class SchemaCompareOptionsDialog { } private async updateObjectsTable(): Promise { - let data = this.optionsModel.getObjectsData(); + let data = this.optionsModel.getIncludeObjectTypesOptionsData(); await this.objectsTable.updateProperties({ data: data, columns: [ diff --git a/extensions/schema-compare/src/localizedConstants.ts b/extensions/schema-compare/src/localizedConstants.ts index 2f16f97637..8b5e37af42 100644 --- a/extensions/schema-compare/src/localizedConstants.ts +++ b/extensions/schema-compare/src/localizedConstants.ts @@ -91,77 +91,6 @@ export const save: string = localize('schemaCompare.saveFile', "Save"); export function getConnectionString(caller: string): string { return localize('schemaCompare.GetConnectionString', "Do you want to connect to {0}?", caller); } export const selectConnection: string = localize('schemaCompare.selectConnection', "Select connection"); -// object types -export const Aggregates: string = localize('SchemaCompare.Aggregates', "Aggregates"); -export const ApplicationRoles: string = localize('SchemaCompare.ApplicationRoles', "Application Roles"); -export const Assemblies: string = localize('SchemaCompare.Assemblies', "Assemblies"); -export const AssemblyFiles: string = localize('SchemaCompare.AssemblyFiles', "Assembly Files"); -export const AsymmetricKeys: string = localize('SchemaCompare.AsymmetricKeys', "Asymmetric Keys"); -export const BrokerPriorities: string = localize('SchemaCompare.BrokerPriorities', "Broker Priorities"); -export const Certificates: string = localize('SchemaCompare.Certificates', "Certificates"); -export const ColumnEncryptionKeys: string = localize('SchemaCompare.ColumnEncryptionKeys', "Column Encryption Keys"); -export const ColumnMasterKeys: string = localize('SchemaCompare.ColumnMasterKeys', "Column Master Keys"); -export const Contracts: string = localize('SchemaCompare.Contracts', "Contracts"); -export const DatabaseOptions: string = localize('SchemaCompare.DatabaseOptions', "Database Options"); -export const DatabaseRoles: string = localize('SchemaCompare.DatabaseRoles', "Database Roles"); -export const DatabaseTriggers: string = localize('SchemaCompare.DatabaseTriggers', "Database Triggers"); -export const Defaults: string = localize('SchemaCompare.Defaults', "Defaults"); -export const ExtendedProperties: string = localize('SchemaCompare.ExtendedProperties', "Extended Properties"); -export const ExternalDataSources: string = localize('SchemaCompare.ExternalDataSources', "External Data Sources"); -export const ExternalFileFormats: string = localize('SchemaCompare.ExternalFileFormats', "External File Formats"); -export const ExternalStreams: string = localize('SchemaCompare.ExternalStreams', "External Streams"); -export const ExternalStreamingJobs: string = localize('SchemaCompare.ExternalStreamingJobs', "External Streaming Jobs"); -export const ExternalTables: string = localize('SchemaCompare.ExternalTables', "External Tables"); -export const Filegroups: string = localize('SchemaCompare.Filegroups', "Filegroups"); -export const Files: string = localize('SchemaCompare.Files', "Files"); -export const FileTables: string = localize('SchemaCompare.FileTables', "File Tables"); -export const FullTextCatalogs: string = localize('SchemaCompare.FullTextCatalogs', "Full Text Catalogs"); -export const FullTextStoplists: string = localize('SchemaCompare.FullTextStoplists', "Full Text Stoplists"); -export const MessageTypes: string = localize('SchemaCompare.MessageTypes', "Message Types"); -export const PartitionFunctions: string = localize('SchemaCompare.PartitionFunctions', "Partition Functions"); -export const PartitionSchemes: string = localize('SchemaCompare.PartitionSchemes', "Partition Schemes"); -export const Permissions: string = localize('SchemaCompare.Permissions', "Permissions"); -export const Queues: string = localize('SchemaCompare.Queues', "Queues"); -export const RemoteServiceBindings: string = localize('SchemaCompare.RemoteServiceBindings', "Remote Service Bindings"); -export const RoleMembership: string = localize('SchemaCompare.RoleMembership', "Role Membership"); -export const Rules: string = localize('SchemaCompare.Rules', "Rules"); -export const ScalarValuedFunctions: string = localize('SchemaCompare.ScalarValuedFunctions', "Scalar Valued Functions"); -export const SearchPropertyLists: string = localize('SchemaCompare.SearchPropertyLists', "Search Property Lists"); -export const SecurityPolicies: string = localize('SchemaCompare.SecurityPolicies', "Security Policies"); -export const Sequences: string = localize('SchemaCompare.Sequences', "Sequences"); -export const Services: string = localize('SchemaCompare.Services', "Services"); -export const Signatures: string = localize('SchemaCompare.Signatures', "Signatures"); -export const StoredProcedures: string = localize('SchemaCompare.StoredProcedures', "Stored Procedures"); -export const SymmetricKeys: string = localize('SchemaCompare.SymmetricKeys', "Symmetric Keys"); -export const Synonyms: string = localize('SchemaCompare.Synonyms', "Synonyms"); -export const Tables: string = localize('SchemaCompare.Tables', "Tables"); -export const TableValuedFunctions: string = localize('SchemaCompare.TableValuedFunctions', "Table Valued Functions"); -export const UserDefinedDataTypes: string = localize('SchemaCompare.UserDefinedDataTypes', "User Defined Data Types"); -export const UserDefinedTableTypes: string = localize('SchemaCompare.UserDefinedTableTypes', "User Defined Table Types"); -export const ClrUserDefinedTypes: string = localize('SchemaCompare.ClrUserDefinedTypes', "Clr User Defined Types"); -export const Users: string = localize('SchemaCompare.Users', "Users"); -export const Views: string = localize('SchemaCompare.Views', "Views"); -export const XmlSchemaCollections: string = localize('SchemaCompare.XmlSchemaCollections', "Xml Schema Collections"); -export const Audits: string = localize('SchemaCompare.Audits', "Audits"); -export const Credentials: string = localize('SchemaCompare.Credentials', "Credentials"); -export const CryptographicProviders: string = localize('SchemaCompare.CryptographicProviders', "Cryptographic Providers"); -export const DatabaseAuditSpecifications: string = localize('SchemaCompare.DatabaseAuditSpecifications', "Database Audit Specifications"); -export const DatabaseEncryptionKeys: string = localize('SchemaCompare.DatabaseEncryptionKeys', "Database Encryption Keys"); -export const DatabaseScopedCredentials: string = localize('SchemaCompare.DatabaseScopedCredentials', "Database Scoped Credentials"); -export const Endpoints: string = localize('SchemaCompare.Endpoints', "Endpoints"); -export const ErrorMessages: string = localize('SchemaCompare.ErrorMessages', "Error Messages"); -export const EventNotifications: string = localize('SchemaCompare.EventNotifications', "Event Notifications"); -export const EventSessions: string = localize('SchemaCompare.EventSessions', "Event Sessions"); -export const LinkedServerLogins: string = localize('SchemaCompare.LinkedServerLogins', "Linked Server Logins"); -export const LinkedServers: string = localize('SchemaCompare.LinkedServers', "Linked Servers"); -export const Logins: string = localize('SchemaCompare.Logins', "Logins"); -export const MasterKeys: string = localize('SchemaCompare.MasterKeys', "Master Keys"); -export const Routes: string = localize('SchemaCompare.Routes', "Routes"); -export const ServerAuditSpecifications: string = localize('SchemaCompare.ServerAuditSpecifications', "Server Audit Specifications"); -export const ServerRoleMembership: string = localize('SchemaCompare.ServerRoleMembership', "Server Role Membership"); -export const ServerRoles: string = localize('SchemaCompare.ServerRoles', "Server Roles"); -export const ServerTriggers: string = localize('SchemaCompare.ServerTriggers', "Server Triggers"); - // Error messages export function compareErrorMessage(errorMessage: string): string { return localize('schemaCompare.compareErrorMessage', "Schema Compare failed: {0}", errorMessage ? errorMessage : 'Unknown'); } export function saveScmpErrorMessage(errorMessage: string): string { return localize('schemaCompare.saveScmpErrorMessage', "Save scmp failed: '{0}'", (errorMessage) ? errorMessage : 'Unknown'); } diff --git a/extensions/schema-compare/src/models/schemaCompareOptionsModel.ts b/extensions/schema-compare/src/models/schemaCompareOptionsModel.ts index c03fc378a4..26912dea84 100644 --- a/extensions/schema-compare/src/models/schemaCompareOptionsModel.ts +++ b/extensions/schema-compare/src/models/schemaCompareOptionsModel.ts @@ -5,16 +5,15 @@ import * as loc from '../localizedConstants'; import * as mssql from 'mssql'; import * as vscode from 'vscode'; -import { isNullOrUndefined } from 'util'; export class SchemaCompareOptionsModel { // key is the option display name and values are checkboxValue and optionName private optionsValueNameLookup: { [key: string]: mssql.IOptionWithValue } = {}; - public excludedObjectTypes: number[] = []; - public objectsLookup = {}; + private includeObjectTypesLookup: { [key: string]: mssql.IOptionWithValue } = {}; constructor(public deploymentOptions: mssql.DeploymentOptions) { this.setOptionsToValueNameLookup(); + this.setIncludeObjectTypesLookup(); } /* @@ -72,590 +71,62 @@ export class SchemaCompareOptionsModel { return optionName !== undefined ? this.deploymentOptions.booleanOptionsDictionary[optionName.optionName].description : ''; } - //#region Schema Compare Objects - public objectTypeLabels: string[] = [ - loc.Aggregates, - loc.ApplicationRoles, - loc.Assemblies, - loc.AssemblyFiles, - loc.AsymmetricKeys, - loc.BrokerPriorities, - loc.Certificates, - loc.ColumnEncryptionKeys, - loc.ColumnMasterKeys, - loc.Contracts, - loc.DatabaseOptions, - loc.DatabaseRoles, - loc.DatabaseTriggers, - loc.Defaults, - loc.ExtendedProperties, - loc.ExternalDataSources, - loc.ExternalFileFormats, - loc.ExternalStreams, - loc.ExternalStreamingJobs, - loc.ExternalTables, - loc.Filegroups, - loc.Files, - loc.FileTables, - loc.FullTextCatalogs, - loc.FullTextStoplists, - loc.MessageTypes, - loc.PartitionFunctions, - loc.PartitionSchemes, - loc.Permissions, - loc.Queues, - loc.RemoteServiceBindings, - loc.RoleMembership, - loc.Rules, - loc.ScalarValuedFunctions, - loc.SearchPropertyLists, - loc.SecurityPolicies, - loc.Sequences, - loc.Services, - loc.Signatures, - loc.StoredProcedures, - loc.SymmetricKeys, - loc.Synonyms, - loc.Tables, - loc.TableValuedFunctions, - loc.UserDefinedDataTypes, - loc.UserDefinedTableTypes, - loc.ClrUserDefinedTypes, - loc.Users, - loc.Views, - loc.XmlSchemaCollections, - loc.Audits, - loc.Credentials, - loc.CryptographicProviders, - loc.DatabaseAuditSpecifications, - loc.DatabaseEncryptionKeys, - loc.DatabaseScopedCredentials, - loc.Endpoints, - loc.ErrorMessages, - loc.EventNotifications, - loc.EventSessions, - loc.LinkedServerLogins, - loc.LinkedServers, - loc.Logins, - loc.MasterKeys, - loc.Routes, - loc.ServerAuditSpecifications, - loc.ServerRoleMembership, - loc.ServerRoles, - loc.ServerTriggers - ].sort(); - - public getObjectsData(): string[][] { - let data = []; - this.objectsLookup = {}; - this.objectTypeLabels.forEach(l => { - let checked: boolean = this.getSchemaCompareIncludedObjectsUtil(l); - data.push([checked, l]); - this.objectsLookup[l] = checked; + /* + * Sets include object types option's checkbox values and property name to the includeObjectTypesLookup map + */ + public setIncludeObjectTypesLookup(): void { + Object.entries(this.deploymentOptions.objectTypesDictionary).forEach(option => { + const optionValue: mssql.IOptionWithValue = { + optionName: option[0], + checked: this.getIncludeObjectTypeOptionCheckStatus(option[0]) + }; + this.includeObjectTypesLookup[option[1]] = optionValue; }); - return data; - } - //#endregion - - - public setObjectTypeOptions() { - for (let option in this.objectsLookup) { - this.setSchemaCompareIncludedObjectsUtil(option, this.objectsLookup[option]); - } - this.deploymentOptions.excludeObjectTypes.value = this.excludedObjectTypes; } - public getSchemaCompareIncludedObjectsUtil(label): boolean { - switch (label) { - case loc.Aggregates: - return !isNullOrUndefined(this.deploymentOptions.excludeObjectTypes.value.find(x => x === mssql.SchemaObjectType.Aggregates)) ? false : true; - case loc.ApplicationRoles: - return (this.deploymentOptions.excludeObjectTypes.value.find(x => x === mssql.SchemaObjectType.ApplicationRoles)) ? false : true; - case loc.Assemblies: - return (this.deploymentOptions.excludeObjectTypes.value.find(x => x === mssql.SchemaObjectType.Assemblies)) ? false : true; - case loc.AssemblyFiles: - return (this.deploymentOptions.excludeObjectTypes.value.find(x => x === mssql.SchemaObjectType.AssemblyFiles)) ? false : true; - case loc.AsymmetricKeys: - return (this.deploymentOptions.excludeObjectTypes.value.find(x => x === mssql.SchemaObjectType.AsymmetricKeys)) ? false : true; - case loc.BrokerPriorities: - return (this.deploymentOptions.excludeObjectTypes.value.find(x => x === mssql.SchemaObjectType.BrokerPriorities)) ? false : true; - case loc.Certificates: - return (this.deploymentOptions.excludeObjectTypes.value.find(x => x === mssql.SchemaObjectType.Certificates)) ? false : true; - case loc.ColumnEncryptionKeys: - return (this.deploymentOptions.excludeObjectTypes.value.find(x => x === mssql.SchemaObjectType.ColumnEncryptionKeys)) ? false : true; - case loc.ColumnMasterKeys: - return (this.deploymentOptions.excludeObjectTypes.value.find(x => x === mssql.SchemaObjectType.ColumnMasterKeys)) ? false : true; - case loc.Contracts: - return (this.deploymentOptions.excludeObjectTypes.value.find(x => x === mssql.SchemaObjectType.Contracts)) ? false : true; - case loc.DatabaseOptions: - return (this.deploymentOptions.excludeObjectTypes.value.find(x => x === mssql.SchemaObjectType.DatabaseOptions)) ? false : true; - case loc.DatabaseRoles: - return (this.deploymentOptions.excludeObjectTypes.value.find(x => x === mssql.SchemaObjectType.DatabaseRoles)) ? false : true; - case loc.DatabaseTriggers: - return (this.deploymentOptions.excludeObjectTypes.value.find(x => x === mssql.SchemaObjectType.DatabaseTriggers)) ? false : true; - case loc.Defaults: - return (this.deploymentOptions.excludeObjectTypes.value.find(x => x === mssql.SchemaObjectType.Defaults)) ? false : true; - case loc.ExtendedProperties: - return (this.deploymentOptions.excludeObjectTypes.value.find(x => x === mssql.SchemaObjectType.ExtendedProperties)) ? false : true; - case loc.ExternalDataSources: - return (this.deploymentOptions.excludeObjectTypes.value.find(x => x === mssql.SchemaObjectType.ExternalDataSources)) ? false : true; - case loc.ExternalFileFormats: - return (this.deploymentOptions.excludeObjectTypes.value.find(x => x === mssql.SchemaObjectType.ExternalFileFormats)) ? false : true; - case loc.ExternalStreams: - return (this.deploymentOptions.excludeObjectTypes.value.find(x => x === mssql.SchemaObjectType.ExternalStreams)) ? false : true; - case loc.ExternalStreamingJobs: - return (this.deploymentOptions.excludeObjectTypes.value.find(x => x === mssql.SchemaObjectType.ExternalStreamingJobs)) ? false : true; - case loc.ExternalTables: - return (this.deploymentOptions.excludeObjectTypes.value.find(x => x === mssql.SchemaObjectType.ExternalTables)) ? false : true; - case loc.Filegroups: - return (this.deploymentOptions.excludeObjectTypes.value.find(x => x === mssql.SchemaObjectType.Filegroups)) ? false : true; - case loc.Files: - return (this.deploymentOptions.excludeObjectTypes.value.find(x => x === mssql.SchemaObjectType.Files)) ? false : true; - case loc.FileTables: - return (this.deploymentOptions.excludeObjectTypes.value.find(x => x === mssql.SchemaObjectType.FileTables)) ? false : true; - case loc.FullTextCatalogs: - return (this.deploymentOptions.excludeObjectTypes.value.find(x => x === mssql.SchemaObjectType.FullTextCatalogs)) ? false : true; - case loc.FullTextStoplists: - return (this.deploymentOptions.excludeObjectTypes.value.find(x => x === mssql.SchemaObjectType.FullTextStoplists)) ? false : true; - case loc.MessageTypes: - return (this.deploymentOptions.excludeObjectTypes.value.find(x => x === mssql.SchemaObjectType.MessageTypes)) ? false : true; - case loc.PartitionFunctions: - return (this.deploymentOptions.excludeObjectTypes.value.find(x => x === mssql.SchemaObjectType.PartitionFunctions)) ? false : true; - case loc.PartitionSchemes: - return (this.deploymentOptions.excludeObjectTypes.value.find(x => x === mssql.SchemaObjectType.PartitionSchemes)) ? false : true; - case loc.Permissions: - return (this.deploymentOptions.excludeObjectTypes.value.find(x => x === mssql.SchemaObjectType.Permissions)) ? false : true; - case loc.Queues: - return (this.deploymentOptions.excludeObjectTypes.value.find(x => x === mssql.SchemaObjectType.Queues)) ? false : true; - case loc.RemoteServiceBindings: - return (this.deploymentOptions.excludeObjectTypes.value.find(x => x === mssql.SchemaObjectType.RemoteServiceBindings)) ? false : true; - case loc.RoleMembership: - return (this.deploymentOptions.excludeObjectTypes.value.find(x => x === mssql.SchemaObjectType.RoleMembership)) ? false : true; - case loc.Rules: - return (this.deploymentOptions.excludeObjectTypes.value.find(x => x === mssql.SchemaObjectType.Rules)) ? false : true; - case loc.ScalarValuedFunctions: - return (this.deploymentOptions.excludeObjectTypes.value.find(x => x === mssql.SchemaObjectType.ScalarValuedFunctions)) ? false : true; - case loc.SearchPropertyLists: - return (this.deploymentOptions.excludeObjectTypes.value.find(x => x === mssql.SchemaObjectType.SearchPropertyLists)) ? false : true; - case loc.SecurityPolicies: - return (this.deploymentOptions.excludeObjectTypes.value.find(x => x === mssql.SchemaObjectType.SecurityPolicies)) ? false : true; - case loc.Sequences: - return (this.deploymentOptions.excludeObjectTypes.value.find(x => x === mssql.SchemaObjectType.Sequences)) ? false : true; - case loc.Services: - return (this.deploymentOptions.excludeObjectTypes.value.find(x => x === mssql.SchemaObjectType.Services)) ? false : true; - case loc.Signatures: - return (this.deploymentOptions.excludeObjectTypes.value.find(x => x === mssql.SchemaObjectType.Signatures)) ? false : true; - case loc.StoredProcedures: - return (this.deploymentOptions.excludeObjectTypes.value.find(x => x === mssql.SchemaObjectType.StoredProcedures)) ? false : true; - case loc.SymmetricKeys: - return (this.deploymentOptions.excludeObjectTypes.value.find(x => x === mssql.SchemaObjectType.SymmetricKeys)) ? false : true; - case loc.Synonyms: - return (this.deploymentOptions.excludeObjectTypes.value.find(x => x === mssql.SchemaObjectType.Synonyms)) ? false : true; - case loc.Tables: - return (this.deploymentOptions.excludeObjectTypes.value.find(x => x === mssql.SchemaObjectType.Tables)) ? false : true; - case loc.TableValuedFunctions: - return (this.deploymentOptions.excludeObjectTypes.value.find(x => x === mssql.SchemaObjectType.TableValuedFunctions)) ? false : true; - case loc.UserDefinedDataTypes: - return (this.deploymentOptions.excludeObjectTypes.value.find(x => x === mssql.SchemaObjectType.UserDefinedDataTypes)) ? false : true; - case loc.UserDefinedTableTypes: - return (this.deploymentOptions.excludeObjectTypes.value.find(x => x === mssql.SchemaObjectType.UserDefinedTableTypes)) ? false : true; - case loc.ClrUserDefinedTypes: - return (this.deploymentOptions.excludeObjectTypes.value.find(x => x === mssql.SchemaObjectType.ClrUserDefinedTypes)) ? false : true; - case loc.Users: - return (this.deploymentOptions.excludeObjectTypes.value.find(x => x === mssql.SchemaObjectType.Users)) ? false : true; - case loc.Views: - return (this.deploymentOptions.excludeObjectTypes.value.find(x => x === mssql.SchemaObjectType.Views)) ? false : true; - case loc.XmlSchemaCollections: - return (this.deploymentOptions.excludeObjectTypes.value.find(x => x === mssql.SchemaObjectType.XmlSchemaCollections)) ? false : true; - case loc.Audits: - return (this.deploymentOptions.excludeObjectTypes.value.find(x => x === mssql.SchemaObjectType.Audits)) ? false : true; - case loc.Credentials: - return (this.deploymentOptions.excludeObjectTypes.value.find(x => x === mssql.SchemaObjectType.Credentials)) ? false : true; - case loc.CryptographicProviders: - return (this.deploymentOptions.excludeObjectTypes.value.find(x => x === mssql.SchemaObjectType.CryptographicProviders)) ? false : true; - case loc.DatabaseAuditSpecifications: - return (this.deploymentOptions.excludeObjectTypes.value.find(x => x === mssql.SchemaObjectType.DatabaseAuditSpecifications)) ? false : true; - case loc.DatabaseEncryptionKeys: - return (this.deploymentOptions.excludeObjectTypes.value.find(x => x === mssql.SchemaObjectType.DatabaseEncryptionKeys)) ? false : true; - case loc.DatabaseScopedCredentials: - return (this.deploymentOptions.excludeObjectTypes.value.find(x => x === mssql.SchemaObjectType.DatabaseScopedCredentials)) ? false : true; - case loc.Endpoints: - return (this.deploymentOptions.excludeObjectTypes.value.find(x => x === mssql.SchemaObjectType.Endpoints)) ? false : true; - case loc.ErrorMessages: - return (this.deploymentOptions.excludeObjectTypes.value.find(x => x === mssql.SchemaObjectType.ErrorMessages)) ? false : true; - case loc.EventNotifications: - return (this.deploymentOptions.excludeObjectTypes.value.find(x => x === mssql.SchemaObjectType.EventNotifications)) ? false : true; - case loc.EventSessions: - return (this.deploymentOptions.excludeObjectTypes.value.find(x => x === mssql.SchemaObjectType.EventSessions)) ? false : true; - case loc.LinkedServerLogins: - return (this.deploymentOptions.excludeObjectTypes.value.find(x => x === mssql.SchemaObjectType.LinkedServerLogins)) ? false : true; - case loc.LinkedServers: - return (this.deploymentOptions.excludeObjectTypes.value.find(x => x === mssql.SchemaObjectType.LinkedServers)) ? false : true; - case loc.Logins: - return (this.deploymentOptions.excludeObjectTypes.value.find(x => x === mssql.SchemaObjectType.Logins)) ? false : true; - case loc.MasterKeys: - return (this.deploymentOptions.excludeObjectTypes.value.find(x => x === mssql.SchemaObjectType.MasterKeys)) ? false : true; - case loc.Routes: - return (this.deploymentOptions.excludeObjectTypes.value.find(x => x === mssql.SchemaObjectType.Routes)) ? false : true; - case loc.ServerAuditSpecifications: - return (this.deploymentOptions.excludeObjectTypes.value.find(x => x === mssql.SchemaObjectType.ServerAuditSpecifications)) ? false : true; - case loc.ServerRoleMembership: - return (this.deploymentOptions.excludeObjectTypes.value.find(x => x === mssql.SchemaObjectType.ServerRoleMembership)) ? false : true; - case loc.ServerRoles: - return (this.deploymentOptions.excludeObjectTypes.value.find(x => x === mssql.SchemaObjectType.ServerRoles)) ? false : true; - case loc.ServerTriggers: - return (this.deploymentOptions.excludeObjectTypes.value.find(x => x === mssql.SchemaObjectType.ServerTriggers)) ? false : true; - } - return false; + /* + * Initialize options data from include objects options for table component + * Returns data as [booleanValue, optionName] + */ + public getIncludeObjectTypesOptionsData(): any[][] { + let data: any[][] = []; + Object.entries(this.deploymentOptions.objectTypesDictionary).forEach(option => { + // option[1] is the display name and option[0] is the optionName + data.push([this.getIncludeObjectTypeOptionCheckStatus(option[0]), option[1]]); + }); + + return data.sort((a, b) => a[1].localeCompare(b[1])); } - public setSchemaCompareIncludedObjectsUtil(label: string, included: boolean) { - switch (label) { - case loc.Aggregates: - if (!included) { - this.excludedObjectTypes.push(mssql.SchemaObjectType.Aggregates); - } - return; - case loc.ApplicationRoles: - if (!included) { - this.excludedObjectTypes.push(mssql.SchemaObjectType.ApplicationRoles); - } - return; - case loc.Assemblies: - if (!included) { - this.excludedObjectTypes.push(mssql.SchemaObjectType.Assemblies); - } - return; - case loc.AssemblyFiles: - if (!included) { - this.excludedObjectTypes.push(mssql.SchemaObjectType.AssemblyFiles); - } - return; - case loc.AsymmetricKeys: - if (!included) { - this.excludedObjectTypes.push(mssql.SchemaObjectType.AsymmetricKeys); - } - return; - case loc.BrokerPriorities: - if (!included) { - this.excludedObjectTypes.push(mssql.SchemaObjectType.BrokerPriorities); - } - return; - case loc.Certificates: - if (!included) { - this.excludedObjectTypes.push(mssql.SchemaObjectType.Certificates); - } - return; - case loc.ColumnEncryptionKeys: - if (!included) { - this.excludedObjectTypes.push(mssql.SchemaObjectType.ColumnEncryptionKeys); - } - return; - case loc.ColumnMasterKeys: - if (!included) { - this.excludedObjectTypes.push(mssql.SchemaObjectType.ColumnMasterKeys); - } - return; - case loc.Contracts: - if (!included) { - this.excludedObjectTypes.push(mssql.SchemaObjectType.Contracts); - } - return; - case loc.DatabaseOptions: - if (!included) { - this.excludedObjectTypes.push(mssql.SchemaObjectType.DatabaseOptions); - } - return; - case loc.DatabaseRoles: - if (!included) { - this.excludedObjectTypes.push(mssql.SchemaObjectType.DatabaseRoles); - } - return; - case loc.DatabaseTriggers: - if (!included) { - this.excludedObjectTypes.push(mssql.SchemaObjectType.DatabaseTriggers); - } - return; - case loc.Defaults: - if (!included) { - this.excludedObjectTypes.push(mssql.SchemaObjectType.Defaults); - } - return; - case loc.ExtendedProperties: - if (!included) { - this.excludedObjectTypes.push(mssql.SchemaObjectType.ExtendedProperties); - } - return; - case loc.ExternalDataSources: - if (!included) { - this.excludedObjectTypes.push(mssql.SchemaObjectType.ExternalDataSources); - } - return; - case loc.ExternalFileFormats: - if (!included) { - this.excludedObjectTypes.push(mssql.SchemaObjectType.ExternalFileFormats); - } - return; - case loc.ExternalStreams: - if (!included) { - this.excludedObjectTypes.push(mssql.SchemaObjectType.ExternalStreams); - } - return; - case loc.ExternalStreamingJobs: - if (!included) { - this.excludedObjectTypes.push(mssql.SchemaObjectType.ExternalStreamingJobs); - } - return; - case loc.ExternalTables: - if (!included) { - this.excludedObjectTypes.push(mssql.SchemaObjectType.ExternalTables); - } - return; - case loc.Filegroups: - if (!included) { - this.excludedObjectTypes.push(mssql.SchemaObjectType.Filegroups); - } - return; - case loc.Files: - if (!included) { - this.excludedObjectTypes.push(mssql.SchemaObjectType.Files); - } - return; - case loc.FileTables: - if (!included) { - this.excludedObjectTypes.push(mssql.SchemaObjectType.FileTables); - } - return; - case loc.FullTextCatalogs: - if (!included) { - this.excludedObjectTypes.push(mssql.SchemaObjectType.FullTextCatalogs); - } - return; - case loc.FullTextStoplists: - if (!included) { - this.excludedObjectTypes.push(mssql.SchemaObjectType.FullTextStoplists); - } - return; - case loc.MessageTypes: - if (!included) { - this.excludedObjectTypes.push(mssql.SchemaObjectType.MessageTypes); - } - return; - case loc.PartitionFunctions: - if (!included) { - this.excludedObjectTypes.push(mssql.SchemaObjectType.PartitionFunctions); - } - return; - case loc.PartitionSchemes: - if (!included) { - this.excludedObjectTypes.push(mssql.SchemaObjectType.PartitionSchemes); - } - return; - case loc.Permissions: - if (!included) { - this.excludedObjectTypes.push(mssql.SchemaObjectType.Permissions); - } - return; - case loc.Queues: - if (!included) { - this.excludedObjectTypes.push(mssql.SchemaObjectType.Queues); - } - return; - case loc.RemoteServiceBindings: - if (!included) { - this.excludedObjectTypes.push(mssql.SchemaObjectType.RemoteServiceBindings); - } - return; - case loc.RoleMembership: - if (!included) { - this.excludedObjectTypes.push(mssql.SchemaObjectType.RoleMembership); - } - return; - case loc.Rules: - if (!included) { - this.excludedObjectTypes.push(mssql.SchemaObjectType.Rules); - } - return; - case loc.ScalarValuedFunctions: - if (!included) { - this.excludedObjectTypes.push(mssql.SchemaObjectType.ScalarValuedFunctions); - } - return; - case loc.SearchPropertyLists: - if (!included) { - this.excludedObjectTypes.push(mssql.SchemaObjectType.SearchPropertyLists); - } - return; - case loc.SecurityPolicies: - if (!included) { - this.excludedObjectTypes.push(mssql.SchemaObjectType.SecurityPolicies); - } - return; - case loc.Sequences: - if (!included) { - this.excludedObjectTypes.push(mssql.SchemaObjectType.Sequences); - } - return; - case loc.Services: - if (!included) { - this.excludedObjectTypes.push(mssql.SchemaObjectType.Services); - } - return; - case loc.Signatures: - if (!included) { - this.excludedObjectTypes.push(mssql.SchemaObjectType.Signatures); - } - return; - case loc.StoredProcedures: - if (!included) { - this.excludedObjectTypes.push(mssql.SchemaObjectType.StoredProcedures); - } - return; - case loc.SymmetricKeys: - if (!included) { - this.excludedObjectTypes.push(mssql.SchemaObjectType.SymmetricKeys); - } - return; - case loc.Synonyms: - if (!included) { - this.excludedObjectTypes.push(mssql.SchemaObjectType.Synonyms); - } - return; - case loc.Tables: - if (!included) { - this.excludedObjectTypes.push(mssql.SchemaObjectType.Tables); - } - return; - case loc.TableValuedFunctions: - if (!included) { - this.excludedObjectTypes.push(mssql.SchemaObjectType.TableValuedFunctions); - } - return; - case loc.UserDefinedDataTypes: - if (!included) { - this.excludedObjectTypes.push(mssql.SchemaObjectType.UserDefinedDataTypes); - } - return; - case loc.UserDefinedTableTypes: - if (!included) { - this.excludedObjectTypes.push(mssql.SchemaObjectType.UserDefinedTableTypes); - } - return; - case loc.ClrUserDefinedTypes: - if (!included) { - this.excludedObjectTypes.push(mssql.SchemaObjectType.ClrUserDefinedTypes); - } - return; - case loc.Users: - if (!included) { - this.excludedObjectTypes.push(mssql.SchemaObjectType.Users); - } - return; - case loc.Views: - if (!included) { - this.excludedObjectTypes.push(mssql.SchemaObjectType.Views); - } - return; - case loc.XmlSchemaCollections: - if (!included) { - this.excludedObjectTypes.push(mssql.SchemaObjectType.XmlSchemaCollections); - } - return; - case loc.Audits: - if (!included) { - this.excludedObjectTypes.push(mssql.SchemaObjectType.Audits); - } - return; - case loc.Credentials: - if (!included) { - this.excludedObjectTypes.push(mssql.SchemaObjectType.Credentials); - } - return; - case loc.CryptographicProviders: - if (!included) { - this.excludedObjectTypes.push(mssql.SchemaObjectType.CryptographicProviders); - } - return; - case loc.DatabaseAuditSpecifications: - if (!included) { - this.excludedObjectTypes.push(mssql.SchemaObjectType.DatabaseAuditSpecifications); - } - return; - case loc.DatabaseEncryptionKeys: - if (!included) { - this.excludedObjectTypes.push(mssql.SchemaObjectType.DatabaseEncryptionKeys); - } - return; - case loc.DatabaseScopedCredentials: - if (!included) { - this.excludedObjectTypes.push(mssql.SchemaObjectType.DatabaseScopedCredentials); - } - return; - case loc.Endpoints: - if (!included) { - this.excludedObjectTypes.push(mssql.SchemaObjectType.Endpoints); - } - return; - case loc.ErrorMessages: - if (!included) { - this.excludedObjectTypes.push(mssql.SchemaObjectType.ErrorMessages); - } - return; - case loc.EventNotifications: - if (!included) { - this.excludedObjectTypes.push(mssql.SchemaObjectType.EventNotifications); - } - return; - case loc.EventSessions: - if (!included) { - this.excludedObjectTypes.push(mssql.SchemaObjectType.EventSessions); - } - return; - case loc.LinkedServerLogins: - if (!included) { - this.excludedObjectTypes.push(mssql.SchemaObjectType.LinkedServerLogins); - } - return; - case loc.LinkedServers: - if (!included) { - this.excludedObjectTypes.push(mssql.SchemaObjectType.LinkedServers); - } - return; - case loc.Logins: - if (!included) { - this.excludedObjectTypes.push(mssql.SchemaObjectType.Logins); - } - return; - case loc.MasterKeys: - if (!included) { - this.excludedObjectTypes.push(mssql.SchemaObjectType.MasterKeys); - } - return; - case loc.Routes: - if (!included) { - this.excludedObjectTypes.push(mssql.SchemaObjectType.Routes); - } - return; - case loc.ServerAuditSpecifications: - if (!included) { - this.excludedObjectTypes.push(mssql.SchemaObjectType.ServerAuditSpecifications); - } - return; - case loc.ServerRoleMembership: - if (!included) { - this.excludedObjectTypes.push(mssql.SchemaObjectType.ServerRoleMembership); - } - return; - case loc.ServerRoles: - if (!included) { - this.excludedObjectTypes.push(mssql.SchemaObjectType.ServerRoles); - } - return; - case loc.ServerTriggers: - if (!included) { - this.excludedObjectTypes.push(mssql.SchemaObjectType.ServerTriggers); - } - return; - } + /* + * Gets the selected/default value of the object type option + * return false for the deploymentOptions.excludeObjectTypes option, if it is in ObjectTypesDictionary + */ + public getIncludeObjectTypeOptionCheckStatus(optionName: string): boolean { + return (this.deploymentOptions.excludeObjectTypes.value?.find(x => x.toLowerCase() === optionName.toLowerCase())) !== undefined ? false : true; + } + + + /* + * Sets the checkbox value to the includeObjectTypesLookup map + */ + public setIncludeObjectTypesOptionValue(displayName: string, checked: boolean): void { + this.includeObjectTypesLookup[displayName].checked = checked; + } + + /* + * Sets the selected option checkbox value to the deployment options + */ + public setIncludeObjectTypesToDeploymentOptions(): void { + let finalExcludedObjectTypes: string[] = []; + Object.entries(this.includeObjectTypesLookup).forEach(option => { + // option[1] holds checkedbox value and optionName + // sending the unchecked(false) options only to the excludeObjectTypes + if (!option[1].checked) { + finalExcludedObjectTypes.push(option[1].optionName); + } + }); + + this.deploymentOptions.excludeObjectTypes.value = finalExcludedObjectTypes; } } diff --git a/extensions/schema-compare/src/test/models/schemaCompareOptionsModel.test.ts b/extensions/schema-compare/src/test/models/schemaCompareOptionsModel.test.ts index ba6b930b07..0515488613 100644 --- a/extensions/schema-compare/src/test/models/schemaCompareOptionsModel.test.ts +++ b/extensions/schema-compare/src/test/models/schemaCompareOptionsModel.test.ts @@ -11,30 +11,42 @@ describe('Schema Compare Options Model', () => { it('Should create model and set options successfully', function (): void { const model = new SchemaCompareOptionsModel(testUtils.getDeploymentOptions()); should.notEqual(model.getOptionsData(), undefined, 'Options shouldn\'t be undefined'); - should.notEqual(model.getObjectsData(), undefined, 'Objects shouldn\'t be undefined'); + should.notEqual(model.getIncludeObjectTypesOptionsData(), undefined, 'Objects shouldn\'t be undefined'); should.doesNotThrow(() => model.setDeploymentOptions()); - should.doesNotThrow(() => model.setObjectTypeOptions()); - - should(model.getSchemaCompareIncludedObjectsUtil('')).be.false('Should return false if invalid object name is passed in'); + should.doesNotThrow(() => model.setIncludeObjectTypesToDeploymentOptions()); }); - it('Should exclude objects', function (): void { + it('Should not have a default object types to exclude from IncludeObjectTypes ', function (): void { const model = new SchemaCompareOptionsModel(testUtils.getDeploymentOptions()); - should(model.excludedObjectTypes.length).be.equal(0, 'There should be no excluded objects'); + should(model.deploymentOptions.excludeObjectTypes.value.length).be.equal(0, 'There should be no object type excluded from IncludeObjectTypes'); - model.objectTypeLabels.forEach(label => { - model.setSchemaCompareIncludedObjectsUtil(label, false); + Object.keys(model.deploymentOptions.objectTypesDictionary).forEach(option => { + should(model.getIncludeObjectTypeOptionCheckStatus(option)).equal(true, 'Object types that are not excluded should return true'); }); + }); - should(model.excludedObjectTypes.length).be.equal(model.objectTypeLabels.length, 'All the object types should be excluded'); + it('Should have default object types to exclude from IncludeObjectTypes ', function (): void { + const model = new SchemaCompareOptionsModel(testUtils.getDeploymentOptions()); + model.deploymentOptions.excludeObjectTypes.value = ['SampleProperty1']; + + should(model.deploymentOptions.excludeObjectTypes.value.length).be.equal(1, 'There should be one object type excluding from IncludeObjectTypes '); + + // should return false for the default object types and false for the remaining object types + Object.keys(model.deploymentOptions.objectTypesDictionary).forEach(option => { + if (option === 'SampleProperty1') { + should(model.getIncludeObjectTypeOptionCheckStatus(option)).equal(false, 'Object type property that have default object types to exclude from IncludeObjectTypes should return false'); + } else { + should(model.getIncludeObjectTypeOptionCheckStatus(option)).equal(true, 'All including Object type should return true'); + } + }); }); it('Should get descriptions', function (): void { const model = new SchemaCompareOptionsModel(testUtils.getDeploymentOptions()); model.getOptionsData(); Object.entries(model.deploymentOptions.booleanOptionsDictionary).forEach(option => { - should(model.getOptionDescription(option[1].displayName)).not.equal(undefined); + should(model.getOptionDescription(option[1].displayName)).not.equal(undefined, 'Option description shouldn\'t be undefined'); }); }); diff --git a/extensions/schema-compare/src/test/testUtils.ts b/extensions/schema-compare/src/test/testUtils.ts index 1131277e9e..491d134311 100644 --- a/extensions/schema-compare/src/test/testUtils.ts +++ b/extensions/schema-compare/src/test/testUtils.ts @@ -118,7 +118,7 @@ export function getDeploymentOptions(): mssql.DeploymentOptions { 'SampleDisplayOption1': { value: false, description: sampleDesc, displayName: sampleName }, 'SampleDisplayOption2': { value: false, description: sampleDesc, displayName: sampleName } }, - includeObjectsDictionary: { + objectTypesDictionary: { 'SampleProperty1': sampleName, 'SampleProperty2': sampleName } diff --git a/extensions/types/vscode-mssql.d.ts b/extensions/types/vscode-mssql.d.ts index 34688cd6af..9bcb599f68 100644 --- a/extensions/types/vscode-mssql.d.ts +++ b/extensions/types/vscode-mssql.d.ts @@ -515,85 +515,10 @@ declare module 'vscode-mssql' { excludeObjectTypes: DacDeployOptionPropertyObject; // key will be the boolean option name booleanOptionsDictionary: { [key: string]: DacDeployOptionPropertyBoolean }; - // key will be the object type enum name(nothing but option name) + // key will be the object type enum name (nothing but option name) objectTypesDictionary: { [key: string]: string }; } - /** - * Values from \Product\Source\DeploymentApi\ObjectTypes.cs - */ - export const enum SchemaObjectType { - Aggregates = 0, - ApplicationRoles = 1, - Assemblies = 2, - AssemblyFiles = 3, - AsymmetricKeys = 4, - BrokerPriorities = 5, - Certificates = 6, - ColumnEncryptionKeys = 7, - ColumnMasterKeys = 8, - Contracts = 9, - DatabaseOptions = 10, - DatabaseRoles = 11, - DatabaseTriggers = 12, - Defaults = 13, - ExtendedProperties = 14, - ExternalDataSources = 15, - ExternalFileFormats = 16, - ExternalTables = 17, - Filegroups = 18, - Files = 19, - FileTables = 20, - FullTextCatalogs = 21, - FullTextStoplists = 22, - MessageTypes = 23, - PartitionFunctions = 24, - PartitionSchemes = 25, - Permissions = 26, - Queues = 27, - RemoteServiceBindings = 28, - RoleMembership = 29, - Rules = 30, - ScalarValuedFunctions = 31, - SearchPropertyLists = 32, - SecurityPolicies = 33, - Sequences = 34, - Services = 35, - Signatures = 36, - StoredProcedures = 37, - SymmetricKeys = 38, - Synonyms = 39, - Tables = 40, - TableValuedFunctions = 41, - UserDefinedDataTypes = 42, - UserDefinedTableTypes = 43, - ClrUserDefinedTypes = 44, - Users = 45, - Views = 46, - XmlSchemaCollections = 47, - Audits = 48, - Credentials = 49, - CryptographicProviders = 50, - DatabaseAuditSpecifications = 51, - DatabaseEncryptionKeys = 52, - DatabaseScopedCredentials = 53, - Endpoints = 54, - ErrorMessages = 55, - EventNotifications = 56, - EventSessions = 57, - LinkedServerLogins = 58, - LinkedServers = 59, - Logins = 60, - MasterKeys = 61, - Routes = 62, - ServerAuditSpecifications = 63, - ServerRoleMembership = 64, - ServerRoles = 65, - ServerTriggers = 66, - ExternalStreams = 67, - ExternalStreamingJobs = 68 - } - /** * ResultStatus from d.ts */