diff --git a/extensions/dacpac/src/test/testDacFxService.ts b/extensions/dacpac/src/test/testDacFxService.ts index 16b5969b30..7da99b9765 100644 --- a/extensions/dacpac/src/test/testDacFxService.ts +++ b/extensions/dacpac/src/test/testDacFxService.ts @@ -64,99 +64,11 @@ export class DacFxTestService implements mssql.IDacFxService { success: true, errorMessage: '', deploymentOptions: { - ignoreTableOptions: { value: false, description: sampleDesc, displayName: sampleName }, - ignoreSemicolonBetweenStatements: { value: false, description: sampleDesc, displayName: sampleName }, - ignoreRouteLifetime: { value: false, description: sampleDesc, displayName: sampleName }, - ignoreRoleMembership: { value: false, description: sampleDesc, displayName: sampleName }, - ignoreQuotedIdentifiers: { value: false, description: sampleDesc, displayName: sampleName }, - ignorePermissions: { value: false, description: sampleDesc, displayName: sampleName }, - ignorePartitionSchemes: { value: false, description: sampleDesc, displayName: sampleName }, - ignoreObjectPlacementOnPartitionScheme: { value: false, description: sampleDesc, displayName: sampleName }, - ignoreNotForReplication: { value: false, description: sampleDesc, displayName: sampleName }, - ignoreLoginSids: { value: false, description: sampleDesc, displayName: sampleName }, - ignoreLockHintsOnIndexes: { value: false, description: sampleDesc, displayName: sampleName }, - ignoreKeywordCasing: { value: false, description: sampleDesc, displayName: sampleName }, - ignoreIndexPadding: { value: false, description: sampleDesc, displayName: sampleName }, - ignoreIndexOptions: { value: false, description: sampleDesc, displayName: sampleName }, - ignoreIncrement: { value: false, description: sampleDesc, displayName: sampleName }, - ignoreIdentitySeed: { value: false, description: sampleDesc, displayName: sampleName }, - ignoreUserSettingsObjects: { value: false, description: sampleDesc, displayName: sampleName }, - ignoreFullTextCatalogFilePath: { value: false, description: sampleDesc, displayName: sampleName }, - ignoreWhitespace: { value: false, description: sampleDesc, displayName: sampleName }, - ignoreWithNocheckOnForeignKeys: { value: false, description: sampleDesc, displayName: sampleName }, - verifyCollationCompatibility: { value: false, description: sampleDesc, displayName: sampleName }, - unmodifiableObjectWarnings: { value: false, description: sampleDesc, displayName: sampleName }, - treatVerificationErrorsAsWarnings: { value: false, description: sampleDesc, displayName: sampleName }, - scriptRefreshModule: { value: false, description: sampleDesc, displayName: sampleName }, - scriptNewConstraintValidation: { value: false, description: sampleDesc, displayName: sampleName }, - scriptFileSize: { value: false, description: sampleDesc, displayName: sampleName }, - scriptDeployStateChecks: { value: false, description: sampleDesc, displayName: sampleName }, - scriptDatabaseOptions: { value: false, description: sampleDesc, displayName: sampleName }, - scriptDatabaseCompatibility: { value: false, description: sampleDesc, displayName: sampleName }, - scriptDatabaseCollation: { value: false, description: sampleDesc, displayName: sampleName }, - runDeploymentPlanExecutors: { value: false, description: sampleDesc, displayName: sampleName }, - registerDataTierApplication: { value: false, description: sampleDesc, displayName: sampleName }, - populateFilesOnFileGroups: { value: false, description: sampleDesc, displayName: sampleName }, - noAlterStatementsToChangeClrTypes: { value: false, description: sampleDesc, displayName: sampleName }, - includeTransactionalScripts: { value: false, description: sampleDesc, displayName: sampleName }, - includeCompositeObjects: { value: false, description: sampleDesc, displayName: sampleName }, - allowUnsafeRowLevelSecurityDataMovement: { value: false, description: sampleDesc, displayName: sampleName }, - ignoreWithNocheckOnCheckConstraints: { value: false, description: sampleDesc, displayName: sampleName }, - ignoreFillFactor: { value: false, description: sampleDesc, displayName: sampleName }, - ignoreFileSize: { value: false, description: sampleDesc, displayName: sampleName }, - ignoreFilegroupPlacement: { value: false, description: sampleDesc, displayName: sampleName }, - doNotAlterReplicatedObjects: { value: false, description: sampleDesc, displayName: sampleName }, - doNotAlterChangeDataCaptureObjects: { value: false, description: sampleDesc, displayName: sampleName }, - disableAndReenableDdlTriggers: { value: false, description: sampleDesc, displayName: sampleName }, - deployDatabaseInSingleUserMode: { value: false, description: sampleDesc, displayName: sampleName }, - createNewDatabase: { value: false, description: sampleDesc, displayName: sampleName }, - compareUsingTargetCollation: { value: false, description: sampleDesc, displayName: sampleName }, - commentOutSetVarDeclarations: { value: false, description: sampleDesc, displayName: sampleName }, - blockWhenDriftDetected: { value: false, description: sampleDesc, displayName: sampleName }, - blockOnPossibleDataLoss: { value: false, description: sampleDesc, displayName: sampleName }, - backupDatabaseBeforeChanges: { value: false, description: sampleDesc, displayName: sampleName }, - allowIncompatiblePlatform: { value: false, description: sampleDesc, displayName: sampleName }, - allowDropBlockingAssemblies: { value: false, description: sampleDesc, displayName: sampleName }, - dropConstraintsNotInSource: { value: false, description: sampleDesc, displayName: sampleName }, - dropDmlTriggersNotInSource: { value: false, description: sampleDesc, displayName: sampleName }, - dropExtendedPropertiesNotInSource: { value: false, description: sampleDesc, displayName: sampleName }, - dropIndexesNotInSource: { value: false, description: sampleDesc, displayName: sampleName }, - ignoreFileAndLogFilePath: { value: false, description: sampleDesc, displayName: sampleName }, - ignoreExtendedProperties: { value: false, description: sampleDesc, displayName: sampleName }, - ignoreDmlTriggerState: { value: false, description: sampleDesc, displayName: sampleName }, - ignoreDmlTriggerOrder: { value: false, description: sampleDesc, displayName: sampleName }, - ignoreDefaultSchema: { value: false, description: sampleDesc, displayName: sampleName }, - ignoreDdlTriggerState: { value: false, description: sampleDesc, displayName: sampleName }, - ignoreDdlTriggerOrder: { value: false, description: sampleDesc, displayName: sampleName }, - ignoreCryptographicProviderFilePath: { value: false, description: sampleDesc, displayName: sampleName }, - verifyDeployment: { value: false, description: sampleDesc, displayName: sampleName }, - ignoreComments: { value: false, description: sampleDesc, displayName: sampleName }, - ignoreColumnCollation: { value: false, description: sampleDesc, displayName: sampleName }, - ignoreAuthorizer: { value: false, description: sampleDesc, displayName: sampleName }, - ignoreAnsiNulls: { value: false, description: sampleDesc, displayName: sampleName }, - generateSmartDefaults: { value: false, description: sampleDesc, displayName: sampleName }, - dropStatisticsNotInSource: { value: false, description: sampleDesc, displayName: sampleName }, - dropRoleMembersNotInSource: { value: false, description: sampleDesc, displayName: sampleName }, - dropPermissionsNotInSource: { value: false, description: sampleDesc, displayName: sampleName }, - dropObjectsNotInSource: { value: false, description: sampleDesc, displayName: sampleName }, - ignoreColumnOrder: { value: false, description: sampleDesc, displayName: sampleName }, - doNotDropObjectTypes: { value: [], description: sampleDesc, displayName: sampleName }, excludeObjectTypes: { value: [], description: sampleDesc, displayName: sampleName }, - ignoreTablePartitionOptions: { value: false, description: sampleDesc, displayName: sampleName }, - doNotEvaluateSqlCmdVariables: { value: false, description: sampleDesc, displayName: sampleName }, - disableParallelismForEnablingIndexes: { value: false, description: sampleDesc, displayName: sampleName }, - disableIndexesForDataPhase: { value: false, description: sampleDesc, displayName: sampleName }, - restoreSequenceCurrentValue: { value: false, description: sampleDesc, displayName: sampleName }, - rebuildIndexesOfflineForDataPhase: { value: false, description: sampleDesc, displayName: sampleName }, - isAlwaysEncryptedParameterizationEnabled: { value: false, description: sampleDesc, displayName: sampleName }, - preserveIdentityLastValues: { value: false, description: sampleDesc, displayName: sampleName }, - allowExternalLibraryPaths: { value: false, description: sampleDesc, displayName: sampleName }, - allowExternalLanguagePaths: { value: false, description: sampleDesc, displayName: sampleName }, - hashObjectNamesInLogs: { value: false, description: sampleDesc, displayName: sampleName }, - doNotDropWorkloadClassifiers: { value: false, description: sampleDesc, displayName: sampleName }, - ignoreWorkloadClassifiers: { value: false, description: sampleDesc, displayName: sampleName }, - ignoreDatabaseWorkloadGroups: { value: false, description: sampleDesc, displayName: sampleName }, - doNotDropDatabaseWorkloadGroups: { value: false, description: sampleDesc, displayName: sampleName } + booleanOptionsDictionary: { + 'SampleProperty1': { value: false, description: sampleDesc, displayName: sampleName }, + 'SampleProperty2': { value: false, description: sampleDesc, displayName: sampleName } + } } }; diff --git a/extensions/mssql/src/mssql.d.ts b/extensions/mssql/src/mssql.d.ts index fb8ec23ea1..cf88230c2d 100644 --- a/extensions/mssql/src/mssql.d.ts +++ b/extensions/mssql/src/mssql.d.ts @@ -153,112 +153,40 @@ declare module 'mssql' { defaultDeploymentOptions: DeploymentOptions; } + /** + * Interface containing deployment options of boolean type + */ export interface DacDeployOptionPropertyBoolean { value: boolean; description: string; displayName: string; } + /** + * Interface containing deployment options of integer type, value property holds values from \Product\Source\DeploymentApi\ObjectTypes.cs enum + */ export interface DacDeployOptionPropertyObject { - value: SchemaObjectType[]; + value: number[]; description: string; displayName: string; } + /* + * Interface containing Deployment options from \Source\DeploymentApi\DacDeployOptions.cs + * These property names should match with the properties defined in \src\Microsoft.SqlTools.ServiceLayer\DacFx\Contracts\DeploymentOptions.cs + */ export interface DeploymentOptions { - ignoreTableOptions: DacDeployOptionPropertyBoolean; - ignoreSemicolonBetweenStatements: DacDeployOptionPropertyBoolean; - ignoreRouteLifetime: DacDeployOptionPropertyBoolean; - ignoreRoleMembership: DacDeployOptionPropertyBoolean; - ignoreQuotedIdentifiers: DacDeployOptionPropertyBoolean; - ignorePermissions: DacDeployOptionPropertyBoolean; - ignorePartitionSchemes: DacDeployOptionPropertyBoolean; - ignoreObjectPlacementOnPartitionScheme: DacDeployOptionPropertyBoolean; - ignoreNotForReplication: DacDeployOptionPropertyBoolean; - ignoreLoginSids: DacDeployOptionPropertyBoolean; - ignoreLockHintsOnIndexes: DacDeployOptionPropertyBoolean; - ignoreKeywordCasing: DacDeployOptionPropertyBoolean; - ignoreIndexPadding: DacDeployOptionPropertyBoolean; - ignoreIndexOptions: DacDeployOptionPropertyBoolean; - ignoreIncrement: DacDeployOptionPropertyBoolean; - ignoreIdentitySeed: DacDeployOptionPropertyBoolean; - ignoreUserSettingsObjects: DacDeployOptionPropertyBoolean; - ignoreFullTextCatalogFilePath: DacDeployOptionPropertyBoolean; - ignoreWhitespace: DacDeployOptionPropertyBoolean; - ignoreWithNocheckOnForeignKeys: DacDeployOptionPropertyBoolean; - verifyCollationCompatibility: DacDeployOptionPropertyBoolean; - unmodifiableObjectWarnings: DacDeployOptionPropertyBoolean; - treatVerificationErrorsAsWarnings: DacDeployOptionPropertyBoolean; - scriptRefreshModule: DacDeployOptionPropertyBoolean; - scriptNewConstraintValidation: DacDeployOptionPropertyBoolean; - scriptFileSize: DacDeployOptionPropertyBoolean; - scriptDeployStateChecks: DacDeployOptionPropertyBoolean; - scriptDatabaseOptions: DacDeployOptionPropertyBoolean; - scriptDatabaseCompatibility: DacDeployOptionPropertyBoolean; - scriptDatabaseCollation: DacDeployOptionPropertyBoolean; - runDeploymentPlanExecutors: DacDeployOptionPropertyBoolean; - registerDataTierApplication: DacDeployOptionPropertyBoolean; - populateFilesOnFileGroups: DacDeployOptionPropertyBoolean; - noAlterStatementsToChangeClrTypes: DacDeployOptionPropertyBoolean; - includeTransactionalScripts: DacDeployOptionPropertyBoolean; - includeCompositeObjects: DacDeployOptionPropertyBoolean; - allowUnsafeRowLevelSecurityDataMovement: DacDeployOptionPropertyBoolean; - ignoreWithNocheckOnCheckConstraints: DacDeployOptionPropertyBoolean; - ignoreFillFactor: DacDeployOptionPropertyBoolean; - ignoreFileSize: DacDeployOptionPropertyBoolean; - ignoreFilegroupPlacement: DacDeployOptionPropertyBoolean; - doNotAlterReplicatedObjects: DacDeployOptionPropertyBoolean; - doNotAlterChangeDataCaptureObjects: DacDeployOptionPropertyBoolean; - disableAndReenableDdlTriggers: DacDeployOptionPropertyBoolean; - deployDatabaseInSingleUserMode: DacDeployOptionPropertyBoolean; - createNewDatabase: DacDeployOptionPropertyBoolean; - compareUsingTargetCollation: DacDeployOptionPropertyBoolean; - commentOutSetVarDeclarations: DacDeployOptionPropertyBoolean; - blockWhenDriftDetected: DacDeployOptionPropertyBoolean; - blockOnPossibleDataLoss: DacDeployOptionPropertyBoolean; - backupDatabaseBeforeChanges: DacDeployOptionPropertyBoolean; - allowIncompatiblePlatform: DacDeployOptionPropertyBoolean; - allowDropBlockingAssemblies: DacDeployOptionPropertyBoolean; - dropConstraintsNotInSource: DacDeployOptionPropertyBoolean; - dropDmlTriggersNotInSource: DacDeployOptionPropertyBoolean; - dropExtendedPropertiesNotInSource: DacDeployOptionPropertyBoolean; - dropIndexesNotInSource: DacDeployOptionPropertyBoolean; - ignoreFileAndLogFilePath: DacDeployOptionPropertyBoolean; - ignoreExtendedProperties: DacDeployOptionPropertyBoolean; - ignoreDmlTriggerState: DacDeployOptionPropertyBoolean; - ignoreDmlTriggerOrder: DacDeployOptionPropertyBoolean; - ignoreDefaultSchema: DacDeployOptionPropertyBoolean; - ignoreDdlTriggerState: DacDeployOptionPropertyBoolean; - ignoreDdlTriggerOrder: DacDeployOptionPropertyBoolean; - ignoreCryptographicProviderFilePath: DacDeployOptionPropertyBoolean; - verifyDeployment: DacDeployOptionPropertyBoolean; - ignoreComments: DacDeployOptionPropertyBoolean; - ignoreColumnCollation: DacDeployOptionPropertyBoolean; - ignoreAuthorizer: DacDeployOptionPropertyBoolean; - ignoreAnsiNulls: DacDeployOptionPropertyBoolean; - generateSmartDefaults: DacDeployOptionPropertyBoolean; - dropStatisticsNotInSource: DacDeployOptionPropertyBoolean; - dropRoleMembersNotInSource: DacDeployOptionPropertyBoolean; - dropPermissionsNotInSource: DacDeployOptionPropertyBoolean; - dropObjectsNotInSource: DacDeployOptionPropertyBoolean; - ignoreColumnOrder: DacDeployOptionPropertyBoolean; - doNotDropObjectTypes: DacDeployOptionPropertyObject; excludeObjectTypes: DacDeployOptionPropertyObject; - ignoreTablePartitionOptions: DacDeployOptionPropertyBoolean; - doNotEvaluateSqlCmdVariables: DacDeployOptionPropertyBoolean; - disableParallelismForEnablingIndexes: DacDeployOptionPropertyBoolean; - disableIndexesForDataPhase: DacDeployOptionPropertyBoolean; - restoreSequenceCurrentValue: DacDeployOptionPropertyBoolean; - rebuildIndexesOfflineForDataPhase: DacDeployOptionPropertyBoolean; - isAlwaysEncryptedParameterizationEnabled: DacDeployOptionPropertyBoolean; - preserveIdentityLastValues: DacDeployOptionPropertyBoolean; - allowExternalLibraryPaths: DacDeployOptionPropertyBoolean; - allowExternalLanguagePaths: DacDeployOptionPropertyBoolean; - hashObjectNamesInLogs: DacDeployOptionPropertyBoolean; - doNotDropWorkloadClassifiers: DacDeployOptionPropertyBoolean; - ignoreWorkloadClassifiers: DacDeployOptionPropertyBoolean; - ignoreDatabaseWorkloadGroups: DacDeployOptionPropertyBoolean; - doNotDropDatabaseWorkloadGroups: DacDeployOptionPropertyBoolean; + // key will be the boolean option name + booleanOptionsDictionary: { [key: string]: DacDeployOptionPropertyBoolean }; + } + + /* + * Interface containing option value and option name + */ + export interface IOptionWithValue { + optionName: string; + checked: boolean; } /** diff --git a/extensions/sql-database-projects/src/common/constants.ts b/extensions/sql-database-projects/src/common/constants.ts index 6456a90ec7..9bd6123640 100644 --- a/extensions/sql-database-projects/src/common/constants.ts +++ b/extensions/sql-database-projects/src/common/constants.ts @@ -153,7 +153,7 @@ export const ResetButton: string = localize('reset', "Reset"); export const OptionDescription: string = localize('optionDescription', "Option Description"); export const OptionName: string = localize('optionName', "Option Name"); export const OptionInclude: string = localize('Include', "Include"); - +export function OptionNotFoundWarningMessage(label: string) { return localize('OptionNotFoundWarningMessage', "label: {0} does not exist in the options value name lookup", label); } // Deploy export const SqlServerName = 'SQL server'; diff --git a/extensions/sql-database-projects/src/common/utils.ts b/extensions/sql-database-projects/src/common/utils.ts index e7938f0283..1a361ec9aa 100644 --- a/extensions/sql-database-projects/src/common/utils.ts +++ b/extensions/sql-database-projects/src/common/utils.ts @@ -325,17 +325,16 @@ export async function defaultAzureAccountServiceFactory(): Promise { const schemaCompareService = await getSchemaCompareService(); const result = await schemaCompareService.schemaCompareGetDefaultOptions(); - const deploymentOptions = result.defaultDeploymentOptions; // re-include database-scoped credentials if (getAzdataApi()) { - deploymentOptions.excludeObjectTypes.value = (deploymentOptions as mssql.DeploymentOptions).excludeObjectTypes.value?.filter(x => x !== mssql.SchemaObjectType.DatabaseScopedCredentials); + result.defaultDeploymentOptions.excludeObjectTypes.value = (result.defaultDeploymentOptions as mssql.DeploymentOptions).excludeObjectTypes.value?.filter(x => x !== mssql.SchemaObjectType.DatabaseScopedCredentials); } else { - deploymentOptions.excludeObjectTypes.value = (deploymentOptions as vscodeMssql.DeploymentOptions).excludeObjectTypes.value?.filter(x => x !== vscodeMssql.SchemaObjectType.DatabaseScopedCredentials); + result.defaultDeploymentOptions.excludeObjectTypes.value = (result.defaultDeploymentOptions as vscodeMssql.DeploymentOptions).excludeObjectTypes.value?.filter(x => x !== vscodeMssql.SchemaObjectType.DatabaseScopedCredentials); } // this option needs to be true for same database references validation to work - if (project.databaseReferences.length > 0 && deploymentOptions.includeCompositeObjects !== undefined) { - deploymentOptions.includeCompositeObjects.value = true; + if (project.databaseReferences.length > 0) { + result.defaultDeploymentOptions.booleanOptionsDictionary.includeCompositeObjects.value = true; } return result.defaultDeploymentOptions; } diff --git a/extensions/sql-database-projects/src/dialogs/publishDatabaseDialog.ts b/extensions/sql-database-projects/src/dialogs/publishDatabaseDialog.ts index 3404b0ca22..5bec6f8503 100644 --- a/extensions/sql-database-projects/src/dialogs/publishDatabaseDialog.ts +++ b/extensions/sql-database-projects/src/dialogs/publishDatabaseDialog.ts @@ -291,7 +291,6 @@ export class PublishDatabaseDialog { // We only use the dialog in ADS context currently so safe to cast to the mssql DeploymentOptions here this.deploymentOptions = await utils.getDefaultPublishDeploymentOptions(this.project) as DeploymentOptions; } - return this.deploymentOptions; } diff --git a/extensions/sql-database-projects/src/dialogs/publishOptionsDialog.ts b/extensions/sql-database-projects/src/dialogs/publishOptionsDialog.ts index af2c395828..df1bd608c5 100644 --- a/extensions/sql-database-projects/src/dialogs/publishOptionsDialog.ts +++ b/extensions/sql-database-projects/src/dialogs/publishOptionsDialog.ts @@ -74,10 +74,12 @@ export class PublishOptionsDialog { // Get the description of the selected option this.disposableListeners.push(this.optionsTable.onRowSelected(async () => { + // selectedRows[0] contains selected row number const row = this.optionsTable?.selectedRows![0]; - const label = this.optionsModel.optionsLabels[row!]; + // data[row][1] contains the option display name + const displayName = this.optionsTable?.data[row!][1]; await this.descriptionText?.updateProperties({ - value: this.optionsModel.getDescription(label) + value: this.optionsModel.getOptionDescription(displayName) }); })); @@ -85,8 +87,9 @@ export class PublishOptionsDialog { this.disposableListeners.push(this.optionsTable.onCellAction!((rowState) => { const checkboxState = rowState; if (checkboxState && checkboxState.row !== undefined) { - const label = this.optionsModel.optionsLabels[checkboxState.row]; - this.optionsModel.optionsLookup[label] = checkboxState.checked; + // data[row][1] contains the option display name + const displayName = this.optionsTable?.data[checkboxState.row][1]; + this.optionsModel.setOptionValue(displayName, checkboxState.checked); this.optionsChanged = true; } })); @@ -137,7 +140,9 @@ export class PublishOptionsDialog { * Ok button click, will update the deployment options with selections */ protected execute(): void { + // Update the model deploymentoptions with the updated table component values this.optionsModel.setDeploymentOptions(); + // Set the publish deploymentoptions with the updated table component values this.publish.setDeploymentOptions(this.optionsModel.deploymentOptions); this.disposeListeners(); @@ -160,8 +165,8 @@ export class PublishOptionsDialog { const result = await this.publish.getDefaultDeploymentOptions(); this.optionsModel.deploymentOptions = result; - // This will update the Map table with default values - this.optionsModel.InitializeUpdateOptionsMapTable(); + // reset optionsvalueNameLookup with default deployment options + this.optionsModel.setOptionsToValueNameLookup(); await this.updateOptionsTable(); this.optionsFlexBuilder?.removeItem(this.optionsTable!); diff --git a/extensions/sql-database-projects/src/models/options/deployOptionsModel.ts b/extensions/sql-database-projects/src/models/options/deployOptionsModel.ts index 4f18419e2a..411693289f 100644 --- a/extensions/sql-database-projects/src/models/options/deployOptionsModel.ts +++ b/extensions/sql-database-projects/src/models/options/deployOptionsModel.ts @@ -4,254 +4,69 @@ *--------------------------------------------------------------------------------------------*/ import * as mssql from 'mssql'; +import * as vscode from 'vscode'; +import * as constants from '../../common/constants'; export class DeployOptionsModel { - public deploymentOptions: mssql.DeploymentOptions; + // key is the option display name and values are checkboxValue and optionName + private optionsValueNameLookup: { [key: string]: mssql.IOptionWithValue } = {}; - public optionsLookup: Record = {}; - public optionsMapTable: Record = {}; - - constructor(defaultOptions: mssql.DeploymentOptions) { - this.deploymentOptions = defaultOptions; - this.InitializeUpdateOptionsMapTable(); - this.InitializeOptionsLabels(); + constructor(public deploymentOptions: mssql.DeploymentOptions) { + this.setOptionsToValueNameLookup(); } /* - * Initialize the options mapping table - * This will map the key:Option_DisplayName to the value:DacFx_OptionsValue - */ - public InitializeUpdateOptionsMapTable() { - this.optionsMapTable[this.deploymentOptions.ignoreTableOptions.displayName] = this.deploymentOptions.ignoreTableOptions; - this.optionsMapTable[this.deploymentOptions.ignoreSemicolonBetweenStatements.displayName] = this.deploymentOptions.ignoreSemicolonBetweenStatements; - this.optionsMapTable[this.deploymentOptions.ignoreRouteLifetime.displayName] = this.deploymentOptions.ignoreRouteLifetime; - this.optionsMapTable[this.deploymentOptions.ignoreRoleMembership.displayName] = this.deploymentOptions.ignoreRoleMembership; - this.optionsMapTable[this.deploymentOptions.ignoreQuotedIdentifiers.displayName] = this.deploymentOptions.ignoreQuotedIdentifiers; - this.optionsMapTable[this.deploymentOptions.ignorePermissions.displayName] = this.deploymentOptions.ignorePermissions; - this.optionsMapTable[this.deploymentOptions.ignorePartitionSchemes.displayName] = this.deploymentOptions.ignorePartitionSchemes; - this.optionsMapTable[this.deploymentOptions.ignoreObjectPlacementOnPartitionScheme.displayName] = this.deploymentOptions.ignoreObjectPlacementOnPartitionScheme; - this.optionsMapTable[this.deploymentOptions.ignoreNotForReplication.displayName] = this.deploymentOptions.ignoreNotForReplication; - this.optionsMapTable[this.deploymentOptions.ignoreLoginSids.displayName] = this.deploymentOptions.ignoreLoginSids; - this.optionsMapTable[this.deploymentOptions.ignoreLockHintsOnIndexes.displayName] = this.deploymentOptions.ignoreLockHintsOnIndexes; - this.optionsMapTable[this.deploymentOptions.ignoreKeywordCasing.displayName] = this.deploymentOptions.ignoreKeywordCasing; - this.optionsMapTable[this.deploymentOptions.ignoreIndexPadding.displayName] = this.deploymentOptions.ignoreIndexPadding; - this.optionsMapTable[this.deploymentOptions.ignoreIndexOptions.displayName] = this.deploymentOptions.ignoreIndexOptions; - this.optionsMapTable[this.deploymentOptions.ignoreIncrement.displayName] = this.deploymentOptions.ignoreIncrement; - this.optionsMapTable[this.deploymentOptions.ignoreIdentitySeed.displayName] = this.deploymentOptions.ignoreIdentitySeed; - this.optionsMapTable[this.deploymentOptions.ignoreUserSettingsObjects.displayName] = this.deploymentOptions.ignoreUserSettingsObjects; - this.optionsMapTable[this.deploymentOptions.ignoreFullTextCatalogFilePath.displayName] = this.deploymentOptions.ignoreFullTextCatalogFilePath; - this.optionsMapTable[this.deploymentOptions.ignoreWhitespace.displayName] = this.deploymentOptions.ignoreWhitespace; - this.optionsMapTable[this.deploymentOptions.ignoreWithNocheckOnForeignKeys.displayName] = this.deploymentOptions.ignoreWithNocheckOnForeignKeys; - this.optionsMapTable[this.deploymentOptions.verifyCollationCompatibility.displayName] = this.deploymentOptions.verifyCollationCompatibility; - this.optionsMapTable[this.deploymentOptions.unmodifiableObjectWarnings.displayName] = this.deploymentOptions.unmodifiableObjectWarnings; - this.optionsMapTable[this.deploymentOptions.treatVerificationErrorsAsWarnings.displayName] = this.deploymentOptions.treatVerificationErrorsAsWarnings; - this.optionsMapTable[this.deploymentOptions.scriptRefreshModule.displayName] = this.deploymentOptions.scriptRefreshModule; - this.optionsMapTable[this.deploymentOptions.scriptNewConstraintValidation.displayName] = this.deploymentOptions.scriptNewConstraintValidation; - this.optionsMapTable[this.deploymentOptions.scriptFileSize.displayName] = this.deploymentOptions.scriptFileSize; - this.optionsMapTable[this.deploymentOptions.scriptDeployStateChecks.displayName] = this.deploymentOptions.scriptDeployStateChecks; - this.optionsMapTable[this.deploymentOptions.scriptDatabaseOptions.displayName] = this.deploymentOptions.scriptDatabaseOptions; - this.optionsMapTable[this.deploymentOptions.scriptDatabaseCompatibility.displayName] = this.deploymentOptions.scriptDatabaseCompatibility; - this.optionsMapTable[this.deploymentOptions.scriptDatabaseCollation.displayName] = this.deploymentOptions.scriptDatabaseCollation; - this.optionsMapTable[this.deploymentOptions.runDeploymentPlanExecutors.displayName] = this.deploymentOptions.runDeploymentPlanExecutors; - this.optionsMapTable[this.deploymentOptions.registerDataTierApplication.displayName] = this.deploymentOptions.registerDataTierApplication; - this.optionsMapTable[this.deploymentOptions.populateFilesOnFileGroups.displayName] = this.deploymentOptions.populateFilesOnFileGroups; - this.optionsMapTable[this.deploymentOptions.noAlterStatementsToChangeClrTypes.displayName] = this.deploymentOptions.noAlterStatementsToChangeClrTypes; - this.optionsMapTable[this.deploymentOptions.includeTransactionalScripts.displayName] = this.deploymentOptions.includeTransactionalScripts; - this.optionsMapTable[this.deploymentOptions.includeCompositeObjects.displayName] = this.deploymentOptions.includeCompositeObjects; - this.optionsMapTable[this.deploymentOptions.allowUnsafeRowLevelSecurityDataMovement.displayName] = this.deploymentOptions.allowUnsafeRowLevelSecurityDataMovement; - this.optionsMapTable[this.deploymentOptions.ignoreWithNocheckOnCheckConstraints.displayName] = this.deploymentOptions.ignoreWithNocheckOnCheckConstraints; - this.optionsMapTable[this.deploymentOptions.ignoreFillFactor.displayName] = this.deploymentOptions.ignoreFillFactor; - this.optionsMapTable[this.deploymentOptions.ignoreFileSize.displayName] = this.deploymentOptions.ignoreFileSize; - this.optionsMapTable[this.deploymentOptions.ignoreFilegroupPlacement.displayName] = this.deploymentOptions.ignoreFilegroupPlacement; - this.optionsMapTable[this.deploymentOptions.doNotAlterReplicatedObjects.displayName] = this.deploymentOptions.doNotAlterReplicatedObjects; - this.optionsMapTable[this.deploymentOptions.doNotAlterChangeDataCaptureObjects.displayName] = this.deploymentOptions.doNotAlterChangeDataCaptureObjects; - this.optionsMapTable[this.deploymentOptions.disableAndReenableDdlTriggers.displayName] = this.deploymentOptions.disableAndReenableDdlTriggers; - this.optionsMapTable[this.deploymentOptions.deployDatabaseInSingleUserMode.displayName] = this.deploymentOptions.deployDatabaseInSingleUserMode; - this.optionsMapTable[this.deploymentOptions.createNewDatabase.displayName] = this.deploymentOptions.createNewDatabase; - this.optionsMapTable[this.deploymentOptions.compareUsingTargetCollation.displayName] = this.deploymentOptions.compareUsingTargetCollation; - this.optionsMapTable[this.deploymentOptions.commentOutSetVarDeclarations.displayName] = this.deploymentOptions.commentOutSetVarDeclarations; - this.optionsMapTable[this.deploymentOptions.blockWhenDriftDetected.displayName] = this.deploymentOptions.blockWhenDriftDetected; - this.optionsMapTable[this.deploymentOptions.blockOnPossibleDataLoss.displayName] = this.deploymentOptions.blockOnPossibleDataLoss; - this.optionsMapTable[this.deploymentOptions.backupDatabaseBeforeChanges.displayName] = this.deploymentOptions.backupDatabaseBeforeChanges; - this.optionsMapTable[this.deploymentOptions.allowIncompatiblePlatform.displayName] = this.deploymentOptions.allowIncompatiblePlatform; - this.optionsMapTable[this.deploymentOptions.allowDropBlockingAssemblies.displayName] = this.deploymentOptions.allowDropBlockingAssemblies; - this.optionsMapTable[this.deploymentOptions.dropConstraintsNotInSource.displayName] = this.deploymentOptions.dropConstraintsNotInSource; - this.optionsMapTable[this.deploymentOptions.dropDmlTriggersNotInSource.displayName] = this.deploymentOptions.dropDmlTriggersNotInSource; - this.optionsMapTable[this.deploymentOptions.dropExtendedPropertiesNotInSource.displayName] = this.deploymentOptions.dropExtendedPropertiesNotInSource; - this.optionsMapTable[this.deploymentOptions.dropIndexesNotInSource.displayName] = this.deploymentOptions.dropIndexesNotInSource; - this.optionsMapTable[this.deploymentOptions.ignoreFileAndLogFilePath.displayName] = this.deploymentOptions.ignoreFileAndLogFilePath; - this.optionsMapTable[this.deploymentOptions.ignoreExtendedProperties.displayName] = this.deploymentOptions.ignoreExtendedProperties; - this.optionsMapTable[this.deploymentOptions.ignoreDmlTriggerState.displayName] = this.deploymentOptions.ignoreDmlTriggerState; - this.optionsMapTable[this.deploymentOptions.ignoreDmlTriggerOrder.displayName] = this.deploymentOptions.ignoreDmlTriggerOrder; - this.optionsMapTable[this.deploymentOptions.ignoreDefaultSchema.displayName] = this.deploymentOptions.ignoreDefaultSchema; - this.optionsMapTable[this.deploymentOptions.ignoreDdlTriggerState.displayName] = this.deploymentOptions.ignoreDdlTriggerState; - this.optionsMapTable[this.deploymentOptions.ignoreDdlTriggerOrder.displayName] = this.deploymentOptions.ignoreDdlTriggerOrder; - this.optionsMapTable[this.deploymentOptions.ignoreCryptographicProviderFilePath.displayName] = this.deploymentOptions.ignoreCryptographicProviderFilePath; - this.optionsMapTable[this.deploymentOptions.verifyDeployment.displayName] = this.deploymentOptions.verifyDeployment; - this.optionsMapTable[this.deploymentOptions.ignoreComments.displayName] = this.deploymentOptions.ignoreComments; - this.optionsMapTable[this.deploymentOptions.ignoreColumnCollation.displayName] = this.deploymentOptions.ignoreColumnCollation; - this.optionsMapTable[this.deploymentOptions.ignoreAuthorizer.displayName] = this.deploymentOptions.ignoreAuthorizer; - this.optionsMapTable[this.deploymentOptions.ignoreAnsiNulls.displayName] = this.deploymentOptions.ignoreAnsiNulls; - this.optionsMapTable[this.deploymentOptions.generateSmartDefaults.displayName] = this.deploymentOptions.generateSmartDefaults; - this.optionsMapTable[this.deploymentOptions.dropStatisticsNotInSource.displayName] = this.deploymentOptions.dropStatisticsNotInSource; - this.optionsMapTable[this.deploymentOptions.dropRoleMembersNotInSource.displayName] = this.deploymentOptions.dropRoleMembersNotInSource; - this.optionsMapTable[this.deploymentOptions.dropPermissionsNotInSource.displayName] = this.deploymentOptions.dropPermissionsNotInSource; - this.optionsMapTable[this.deploymentOptions.dropObjectsNotInSource.displayName] = this.deploymentOptions.dropObjectsNotInSource; - this.optionsMapTable[this.deploymentOptions.ignoreColumnOrder.displayName] = this.deploymentOptions.ignoreColumnOrder; - this.optionsMapTable[this.deploymentOptions.ignoreTablePartitionOptions.displayName] = this.deploymentOptions.ignoreTablePartitionOptions; - this.optionsMapTable[this.deploymentOptions.doNotEvaluateSqlCmdVariables.displayName] = this.deploymentOptions.doNotEvaluateSqlCmdVariables; - this.optionsMapTable[this.deploymentOptions.disableParallelismForEnablingIndexes.displayName] = this.deploymentOptions.disableParallelismForEnablingIndexes; - this.optionsMapTable[this.deploymentOptions.disableIndexesForDataPhase.displayName] = this.deploymentOptions.disableIndexesForDataPhase; - this.optionsMapTable[this.deploymentOptions.restoreSequenceCurrentValue.displayName] = this.deploymentOptions.restoreSequenceCurrentValue; - this.optionsMapTable[this.deploymentOptions.rebuildIndexesOfflineForDataPhase.displayName] = this.deploymentOptions.rebuildIndexesOfflineForDataPhase; - this.optionsMapTable[this.deploymentOptions.preserveIdentityLastValues.displayName] = this.deploymentOptions.preserveIdentityLastValues; - this.optionsMapTable[this.deploymentOptions.isAlwaysEncryptedParameterizationEnabled.displayName] = this.deploymentOptions.isAlwaysEncryptedParameterizationEnabled; - this.optionsMapTable[this.deploymentOptions.allowExternalLibraryPaths.displayName] = this.deploymentOptions.allowExternalLibraryPaths; - this.optionsMapTable[this.deploymentOptions.allowExternalLanguagePaths.displayName] = this.deploymentOptions.allowExternalLanguagePaths; - this.optionsMapTable[this.deploymentOptions.hashObjectNamesInLogs.displayName] = this.deploymentOptions.hashObjectNamesInLogs; - this.optionsMapTable[this.deploymentOptions.doNotDropWorkloadClassifiers.displayName] = this.deploymentOptions.doNotDropWorkloadClassifiers; - this.optionsMapTable[this.deploymentOptions.ignoreWorkloadClassifiers.displayName] = this.deploymentOptions.ignoreWorkloadClassifiers; - this.optionsMapTable[this.deploymentOptions.ignoreDatabaseWorkloadGroups.displayName] = this.deploymentOptions.ignoreDatabaseWorkloadGroups; - this.optionsMapTable[this.deploymentOptions.doNotDropDatabaseWorkloadGroups.displayName] = this.deploymentOptions.doNotDropDatabaseWorkloadGroups; - } - - /* - * List of Dac Deploy options to display - */ - public optionsLabels: string[] = []; - public InitializeOptionsLabels() { - this.optionsLabels = [this.deploymentOptions.ignoreTableOptions.displayName - , this.deploymentOptions.ignoreSemicolonBetweenStatements.displayName - , this.deploymentOptions.ignoreRouteLifetime.displayName - , this.deploymentOptions.ignoreRoleMembership.displayName - , this.deploymentOptions.ignoreQuotedIdentifiers.displayName - , this.deploymentOptions.ignorePermissions.displayName - , this.deploymentOptions.ignorePartitionSchemes.displayName - , this.deploymentOptions.ignoreObjectPlacementOnPartitionScheme.displayName - , this.deploymentOptions.ignoreNotForReplication.displayName - , this.deploymentOptions.ignoreLoginSids.displayName - , this.deploymentOptions.ignoreLockHintsOnIndexes.displayName - , this.deploymentOptions.ignoreKeywordCasing.displayName - , this.deploymentOptions.ignoreIndexPadding.displayName - , this.deploymentOptions.ignoreIndexOptions.displayName - , this.deploymentOptions.ignoreIncrement.displayName - , this.deploymentOptions.ignoreIdentitySeed.displayName - , this.deploymentOptions.ignoreUserSettingsObjects.displayName - , this.deploymentOptions.ignoreFullTextCatalogFilePath.displayName - , this.deploymentOptions.ignoreWhitespace.displayName - , this.deploymentOptions.ignoreWithNocheckOnForeignKeys.displayName - , this.deploymentOptions.verifyCollationCompatibility.displayName - , this.deploymentOptions.unmodifiableObjectWarnings.displayName - , this.deploymentOptions.treatVerificationErrorsAsWarnings.displayName - , this.deploymentOptions.scriptRefreshModule.displayName - , this.deploymentOptions.scriptNewConstraintValidation.displayName - , this.deploymentOptions.scriptFileSize.displayName - , this.deploymentOptions.scriptDeployStateChecks.displayName - , this.deploymentOptions.scriptDatabaseOptions.displayName - , this.deploymentOptions.scriptDatabaseCompatibility.displayName - , this.deploymentOptions.scriptDatabaseCollation.displayName - , this.deploymentOptions.runDeploymentPlanExecutors.displayName - , this.deploymentOptions.registerDataTierApplication.displayName - , this.deploymentOptions.populateFilesOnFileGroups.displayName - , this.deploymentOptions.noAlterStatementsToChangeClrTypes.displayName - , this.deploymentOptions.includeTransactionalScripts.displayName - , this.deploymentOptions.includeCompositeObjects.displayName - , this.deploymentOptions.allowUnsafeRowLevelSecurityDataMovement.displayName - , this.deploymentOptions.ignoreWithNocheckOnCheckConstraints.displayName - , this.deploymentOptions.ignoreFillFactor.displayName - , this.deploymentOptions.ignoreFileSize.displayName - , this.deploymentOptions.ignoreFilegroupPlacement.displayName - , this.deploymentOptions.doNotAlterReplicatedObjects.displayName - , this.deploymentOptions.doNotAlterChangeDataCaptureObjects.displayName - , this.deploymentOptions.disableAndReenableDdlTriggers.displayName - , this.deploymentOptions.deployDatabaseInSingleUserMode.displayName - , this.deploymentOptions.createNewDatabase.displayName - , this.deploymentOptions.compareUsingTargetCollation.displayName - , this.deploymentOptions.commentOutSetVarDeclarations.displayName - , this.deploymentOptions.blockWhenDriftDetected.displayName - , this.deploymentOptions.blockOnPossibleDataLoss.displayName - , this.deploymentOptions.backupDatabaseBeforeChanges.displayName - , this.deploymentOptions.allowIncompatiblePlatform.displayName - , this.deploymentOptions.allowDropBlockingAssemblies.displayName - , this.deploymentOptions.dropConstraintsNotInSource.displayName - , this.deploymentOptions.dropDmlTriggersNotInSource.displayName - , this.deploymentOptions.dropExtendedPropertiesNotInSource.displayName - , this.deploymentOptions.dropIndexesNotInSource.displayName - , this.deploymentOptions.ignoreFileAndLogFilePath.displayName - , this.deploymentOptions.ignoreExtendedProperties.displayName - , this.deploymentOptions.ignoreDmlTriggerState.displayName - , this.deploymentOptions.ignoreDmlTriggerOrder.displayName - , this.deploymentOptions.ignoreDefaultSchema.displayName - , this.deploymentOptions.ignoreDdlTriggerState.displayName - , this.deploymentOptions.ignoreDdlTriggerOrder.displayName - , this.deploymentOptions.ignoreCryptographicProviderFilePath.displayName - , this.deploymentOptions.verifyDeployment.displayName - , this.deploymentOptions.ignoreComments.displayName - , this.deploymentOptions.ignoreColumnCollation.displayName - , this.deploymentOptions.ignoreAuthorizer.displayName - , this.deploymentOptions.ignoreAnsiNulls.displayName - , this.deploymentOptions.generateSmartDefaults.displayName - , this.deploymentOptions.dropStatisticsNotInSource.displayName - , this.deploymentOptions.dropRoleMembersNotInSource.displayName - , this.deploymentOptions.dropPermissionsNotInSource.displayName - , this.deploymentOptions.dropObjectsNotInSource.displayName - , this.deploymentOptions.ignoreColumnOrder.displayName - , this.deploymentOptions.ignoreTablePartitionOptions.displayName - , this.deploymentOptions.doNotEvaluateSqlCmdVariables.displayName - , this.deploymentOptions.disableParallelismForEnablingIndexes.displayName - , this.deploymentOptions.disableIndexesForDataPhase.displayName - , this.deploymentOptions.restoreSequenceCurrentValue.displayName - , this.deploymentOptions.rebuildIndexesOfflineForDataPhase.displayName - , this.deploymentOptions.preserveIdentityLastValues.displayName - , this.deploymentOptions.isAlwaysEncryptedParameterizationEnabled.displayName - , this.deploymentOptions.allowExternalLibraryPaths.displayName - , this.deploymentOptions.allowExternalLanguagePaths.displayName - , this.deploymentOptions.hashObjectNamesInLogs.displayName - , this.deploymentOptions.doNotDropWorkloadClassifiers.displayName - , this.deploymentOptions.ignoreWorkloadClassifiers.displayName - , this.deploymentOptions.ignoreDatabaseWorkloadGroups.displayName - , this.deploymentOptions.doNotDropDatabaseWorkloadGroups.displayName].sort(); - } - - /** - * Gets the options checkbox check value - * @returns string[][] + * Sets deployment option's checkbox values and property name to the optionsValueNameLookup map */ - public getOptionsData(): string[][] { - let data: any = []; - this.optionsLookup = {}; - this.optionsLabels.forEach(l => { - let checked: boolean = this.getDeployOptionUtil(l); - data.push([checked, l]); - this.optionsLookup[l] = checked; + public setOptionsToValueNameLookup(): void { + Object.entries(this.deploymentOptions.booleanOptionsDictionary).forEach(option => { + const optionValue: mssql.IOptionWithValue = { + optionName: option[0], + checked: option[1].value + }; + this.optionsValueNameLookup[option[1].displayName] = optionValue; }); - return data; } - public setDeploymentOptions() { - for (let option in this.optionsLookup) { - this.setDeployOptionUtil(option, this.optionsLookup[option]); + /* + * Initialize options data from deployment options for table component + * Returns data as [booleanValue, optionName] + */ + public getOptionsData(): any[][] { + let data: any[][] = []; + Object.entries(this.deploymentOptions.booleanOptionsDictionary).forEach(option => { + // option[1] holds checkedbox value and displayName + data.push([option[1].value, option[1].displayName]); + }); + + return data.sort((a, b) => a[1].localeCompare(b[1])); + } + + /* + * Sets the selected option checkbox value to the deployment options + */ + public setDeploymentOptions(): void { + Object.entries(this.optionsValueNameLookup).forEach(option => { + // option[1] holds checkedbox value and optionName + this.deploymentOptions.booleanOptionsDictionary[option[1].optionName].value = option[1].checked; + }); + } + + /* + * Sets the checkbox value to the optionsValueNameLookup map + */ + public setOptionValue(displayName: string, checked: boolean): void { + this.optionsValueNameLookup[displayName].checked = checked; + } + + /* + * Gets the description of the selected option by getting the option name from the optionsValueNameLookup + */ + public getOptionDescription(displayName: string): string { + const optionName = this.optionsValueNameLookup[displayName]; + if (optionName === undefined) { + void vscode.window.showWarningMessage(constants.OptionNotFoundWarningMessage(displayName)); } - } - - /* - * Sets the selected/changed value of the option - */ - public setDeployOptionUtil(label: string, value: boolean) { - this.optionsMapTable[label].value = value; - } - - /* - * Gets the selected/default value of the option - */ - public getDeployOptionUtil(label: string): boolean { - return this.optionsMapTable[label]?.value; - } - - /* - * Gets the description of the option selected - */ - public getDescription(label: string): string { - return this.optionsMapTable[label]?.description; + return optionName !== undefined ? this.deploymentOptions.booleanOptionsDictionary[optionName.optionName].description : ''; } } diff --git a/extensions/sql-database-projects/src/test/dialogs/publishOptionsDialog.test.ts b/extensions/sql-database-projects/src/test/dialogs/publishOptionsDialog.test.ts index 1437774081..9dd8603407 100644 --- a/extensions/sql-database-projects/src/test/dialogs/publishOptionsDialog.test.ts +++ b/extensions/sql-database-projects/src/test/dialogs/publishOptionsDialog.test.ts @@ -46,7 +46,7 @@ describe('Publish Database Options Dialog', () => { // Verify the deployment options should exists should.notEqual(optionsDialog.optionsModel.deploymentOptions, undefined); - Object.entries(optionsDialog.optionsModel.deploymentOptions).forEach(option => { + Object.entries(optionsDialog.optionsModel.deploymentOptions.booleanOptionsDictionary).forEach(option => { // Validate the value and description as expected should.equal(option[1].value, false); should.equal(option[1].description, 'Sample Description text'); diff --git a/extensions/sql-database-projects/src/test/models/deployOptionsModel.test.ts b/extensions/sql-database-projects/src/test/models/deployOptionsModel.test.ts index 5acaae9697..7d46ef13ad 100644 --- a/extensions/sql-database-projects/src/test/models/deployOptionsModel.test.ts +++ b/extensions/sql-database-projects/src/test/models/deployOptionsModel.test.ts @@ -13,19 +13,18 @@ describe('Publish Dialog Deploy Options Model', () => { should.notEqual(model.getOptionsData(), undefined, 'Options shouldn\'t be undefined'); should.doesNotThrow(() => model.setDeploymentOptions()); - - should(model.getDeployOptionUtil('')).equal(undefined); }); it('Should get description', function (): void { const model = new DeployOptionsModel(testUtils.getDeploymentOptions()); - model.optionsLabels.forEach(l => { - should(model.getDescription(l)).not.equal(undefined); + Object.entries(model.deploymentOptions.booleanOptionsDictionary).forEach(option => { + // option[1] contains the value, description and displayName + should(model.getOptionDescription(option[1].displayName)).not.equal(undefined); }); }); - it('Should be undefined for null description', function (): void { + it('Should return empty string for null option ', function (): void { const model = new DeployOptionsModel(testUtils.getDeploymentOptions()); - should(model.getDescription('')).equal(undefined); + should(model.getOptionDescription('')).equal(''); }); }); diff --git a/extensions/sql-database-projects/src/test/testContext.ts b/extensions/sql-database-projects/src/test/testContext.ts index 6012e09f67..4759e22b5e 100644 --- a/extensions/sql-database-projects/src/test/testContext.ts +++ b/extensions/sql-database-projects/src/test/testContext.ts @@ -27,99 +27,11 @@ export function getDeploymentOptions(): mssql.DeploymentOptions { const sampleDesc = 'Sample Description text'; const sampleName = 'Sample Display Name'; const defaultOptions: mssql.DeploymentOptions = { - ignoreTableOptions: { value: false, description: sampleDesc, displayName: sampleName }, - ignoreSemicolonBetweenStatements: { value: false, description: sampleDesc, displayName: sampleName }, - ignoreRouteLifetime: { value: false, description: sampleDesc, displayName: sampleName }, - ignoreRoleMembership: { value: false, description: sampleDesc, displayName: sampleName }, - ignoreQuotedIdentifiers: { value: false, description: sampleDesc, displayName: sampleName }, - ignorePermissions: { value: false, description: sampleDesc, displayName: sampleName }, - ignorePartitionSchemes: { value: false, description: sampleDesc, displayName: sampleName }, - ignoreObjectPlacementOnPartitionScheme: { value: false, description: sampleDesc, displayName: sampleName }, - ignoreNotForReplication: { value: false, description: sampleDesc, displayName: sampleName }, - ignoreLoginSids: { value: false, description: sampleDesc, displayName: sampleName }, - ignoreLockHintsOnIndexes: { value: false, description: sampleDesc, displayName: sampleName }, - ignoreKeywordCasing: { value: false, description: sampleDesc, displayName: sampleName }, - ignoreIndexPadding: { value: false, description: sampleDesc, displayName: sampleName }, - ignoreIndexOptions: { value: false, description: sampleDesc, displayName: sampleName }, - ignoreIncrement: { value: false, description: sampleDesc, displayName: sampleName }, - ignoreIdentitySeed: { value: false, description: sampleDesc, displayName: sampleName }, - ignoreUserSettingsObjects: { value: false, description: sampleDesc, displayName: sampleName }, - ignoreFullTextCatalogFilePath: { value: false, description: sampleDesc, displayName: sampleName }, - ignoreWhitespace: { value: false, description: sampleDesc, displayName: sampleName }, - ignoreWithNocheckOnForeignKeys: { value: false, description: sampleDesc, displayName: sampleName }, - verifyCollationCompatibility: { value: false, description: sampleDesc, displayName: sampleName }, - unmodifiableObjectWarnings: { value: false, description: sampleDesc, displayName: sampleName }, - treatVerificationErrorsAsWarnings: { value: false, description: sampleDesc, displayName: sampleName }, - scriptRefreshModule: { value: false, description: sampleDesc, displayName: sampleName }, - scriptNewConstraintValidation: { value: false, description: sampleDesc, displayName: sampleName }, - scriptFileSize: { value: false, description: sampleDesc, displayName: sampleName }, - scriptDeployStateChecks: { value: false, description: sampleDesc, displayName: sampleName }, - scriptDatabaseOptions: { value: false, description: sampleDesc, displayName: sampleName }, - scriptDatabaseCompatibility: { value: false, description: sampleDesc, displayName: sampleName }, - scriptDatabaseCollation: { value: false, description: sampleDesc, displayName: sampleName }, - runDeploymentPlanExecutors: { value: false, description: sampleDesc, displayName: sampleName }, - registerDataTierApplication: { value: false, description: sampleDesc, displayName: sampleName }, - populateFilesOnFileGroups: { value: false, description: sampleDesc, displayName: sampleName }, - noAlterStatementsToChangeClrTypes: { value: false, description: sampleDesc, displayName: sampleName }, - includeTransactionalScripts: { value: false, description: sampleDesc, displayName: sampleName }, - includeCompositeObjects: { value: false, description: sampleDesc, displayName: sampleName }, - allowUnsafeRowLevelSecurityDataMovement: { value: false, description: sampleDesc, displayName: sampleName }, - ignoreWithNocheckOnCheckConstraints: { value: false, description: sampleDesc, displayName: sampleName }, - ignoreFillFactor: { value: false, description: sampleDesc, displayName: sampleName }, - ignoreFileSize: { value: false, description: sampleDesc, displayName: sampleName }, - ignoreFilegroupPlacement: { value: false, description: sampleDesc, displayName: sampleName }, - doNotAlterReplicatedObjects: { value: false, description: sampleDesc, displayName: sampleName }, - doNotAlterChangeDataCaptureObjects: { value: false, description: sampleDesc, displayName: sampleName }, - disableAndReenableDdlTriggers: { value: false, description: sampleDesc, displayName: sampleName }, - deployDatabaseInSingleUserMode: { value: false, description: sampleDesc, displayName: sampleName }, - createNewDatabase: { value: false, description: sampleDesc, displayName: sampleName }, - compareUsingTargetCollation: { value: false, description: sampleDesc, displayName: sampleName }, - commentOutSetVarDeclarations: { value: false, description: sampleDesc, displayName: sampleName }, - blockWhenDriftDetected: { value: false, description: sampleDesc, displayName: sampleName }, - blockOnPossibleDataLoss: { value: false, description: sampleDesc, displayName: sampleName }, - backupDatabaseBeforeChanges: { value: false, description: sampleDesc, displayName: sampleName }, - allowIncompatiblePlatform: { value: false, description: sampleDesc, displayName: sampleName }, - allowDropBlockingAssemblies: { value: false, description: sampleDesc, displayName: sampleName }, - dropConstraintsNotInSource: { value: false, description: sampleDesc, displayName: sampleName }, - dropDmlTriggersNotInSource: { value: false, description: sampleDesc, displayName: sampleName }, - dropExtendedPropertiesNotInSource: { value: false, description: sampleDesc, displayName: sampleName }, - dropIndexesNotInSource: { value: false, description: sampleDesc, displayName: sampleName }, - ignoreFileAndLogFilePath: { value: false, description: sampleDesc, displayName: sampleName }, - ignoreExtendedProperties: { value: false, description: sampleDesc, displayName: sampleName }, - ignoreDmlTriggerState: { value: false, description: sampleDesc, displayName: sampleName }, - ignoreDmlTriggerOrder: { value: false, description: sampleDesc, displayName: sampleName }, - ignoreDefaultSchema: { value: false, description: sampleDesc, displayName: sampleName }, - ignoreDdlTriggerState: { value: false, description: sampleDesc, displayName: sampleName }, - ignoreDdlTriggerOrder: { value: false, description: sampleDesc, displayName: sampleName }, - ignoreCryptographicProviderFilePath: { value: false, description: sampleDesc, displayName: sampleName }, - verifyDeployment: { value: false, description: sampleDesc, displayName: sampleName }, - ignoreComments: { value: false, description: sampleDesc, displayName: sampleName }, - ignoreColumnCollation: { value: false, description: sampleDesc, displayName: sampleName }, - ignoreAuthorizer: { value: false, description: sampleDesc, displayName: sampleName }, - ignoreAnsiNulls: { value: false, description: sampleDesc, displayName: sampleName }, - generateSmartDefaults: { value: false, description: sampleDesc, displayName: sampleName }, - dropStatisticsNotInSource: { value: false, description: sampleDesc, displayName: sampleName }, - dropRoleMembersNotInSource: { value: false, description: sampleDesc, displayName: sampleName }, - dropPermissionsNotInSource: { value: false, description: sampleDesc, displayName: sampleName }, - dropObjectsNotInSource: { value: false, description: sampleDesc, displayName: sampleName }, - ignoreColumnOrder: { value: false, description: sampleDesc, displayName: sampleName }, - doNotDropObjectTypes: { value: [], description: sampleDesc, displayName: sampleName }, excludeObjectTypes: { value: [], description: sampleDesc, displayName: sampleName }, - ignoreTablePartitionOptions: { value: false, description: sampleDesc, displayName: sampleName }, - doNotEvaluateSqlCmdVariables: { value: false, description: sampleDesc, displayName: sampleName }, - disableParallelismForEnablingIndexes: { value: false, description: sampleDesc, displayName: sampleName }, - disableIndexesForDataPhase: { value: false, description: sampleDesc, displayName: sampleName }, - restoreSequenceCurrentValue: { value: false, description: sampleDesc, displayName: sampleName }, - rebuildIndexesOfflineForDataPhase: { value: false, description: sampleDesc, displayName: sampleName }, - isAlwaysEncryptedParameterizationEnabled: { value: false, description: sampleDesc, displayName: sampleName }, - preserveIdentityLastValues: { value: false, description: sampleDesc, displayName: sampleName }, - allowExternalLibraryPaths: { value: false, description: sampleDesc, displayName: sampleName }, - allowExternalLanguagePaths: { value: false, description: sampleDesc, displayName: sampleName }, - hashObjectNamesInLogs: { value: false, description: sampleDesc, displayName: sampleName }, - doNotDropWorkloadClassifiers: { value: false, description: sampleDesc, displayName: sampleName }, - ignoreWorkloadClassifiers: { value: false, description: sampleDesc, displayName: sampleName }, - ignoreDatabaseWorkloadGroups: { value: false, description: sampleDesc, displayName: sampleName }, - doNotDropDatabaseWorkloadGroups: { value: false, description: sampleDesc, displayName: sampleName } + booleanOptionsDictionary: { + 'SampleProperty1': { value: false, description: sampleDesc, displayName: sampleName }, + 'SampleProperty2': { value: false, description: sampleDesc, displayName: sampleName } + } }; return defaultOptions; } diff --git a/extensions/types/vscode-mssql.d.ts b/extensions/types/vscode-mssql.d.ts index f62707729b..cc6d7598cb 100644 --- a/extensions/types/vscode-mssql.d.ts +++ b/extensions/types/vscode-mssql.d.ts @@ -489,112 +489,31 @@ declare module 'vscode-mssql' { executeAndScript = 2 } + /** + * Interface containing deployment options of boolean type + */ export interface DacDeployOptionPropertyBoolean { value: boolean; description: string; displayName: string; } + /** + * Interface containing deployment options of integer type, value property holds values from \Product\Source\DeploymentApi\ObjectTypes.cs enum + */ export interface DacDeployOptionPropertyObject { - value: SchemaObjectType[]; + value: number[]; description: string; displayName: string; } + /** + * Interface containing deployment options of integer type, value property holds values from \Product\Source\DeploymentApi\ObjectTypes.cs enum + */ export interface DeploymentOptions { - ignoreTableOptions: DacDeployOptionPropertyBoolean; - ignoreSemicolonBetweenStatements: DacDeployOptionPropertyBoolean; - ignoreRouteLifetime: DacDeployOptionPropertyBoolean; - ignoreRoleMembership: DacDeployOptionPropertyBoolean; - ignoreQuotedIdentifiers: DacDeployOptionPropertyBoolean; - ignorePermissions: DacDeployOptionPropertyBoolean; - ignorePartitionSchemes: DacDeployOptionPropertyBoolean; - ignoreObjectPlacementOnPartitionScheme: DacDeployOptionPropertyBoolean; - ignoreNotForReplication: DacDeployOptionPropertyBoolean; - ignoreLoginSids: DacDeployOptionPropertyBoolean; - ignoreLockHintsOnIndexes: DacDeployOptionPropertyBoolean; - ignoreKeywordCasing: DacDeployOptionPropertyBoolean; - ignoreIndexPadding: DacDeployOptionPropertyBoolean; - ignoreIndexOptions: DacDeployOptionPropertyBoolean; - ignoreIncrement: DacDeployOptionPropertyBoolean; - ignoreIdentitySeed: DacDeployOptionPropertyBoolean; - ignoreUserSettingsObjects: DacDeployOptionPropertyBoolean; - ignoreFullTextCatalogFilePath: DacDeployOptionPropertyBoolean; - ignoreWhitespace: DacDeployOptionPropertyBoolean; - ignoreWithNocheckOnForeignKeys: DacDeployOptionPropertyBoolean; - verifyCollationCompatibility: DacDeployOptionPropertyBoolean; - unmodifiableObjectWarnings: DacDeployOptionPropertyBoolean; - treatVerificationErrorsAsWarnings: DacDeployOptionPropertyBoolean; - scriptRefreshModule: DacDeployOptionPropertyBoolean; - scriptNewConstraintValidation: DacDeployOptionPropertyBoolean; - scriptFileSize: DacDeployOptionPropertyBoolean; - scriptDeployStateChecks: DacDeployOptionPropertyBoolean; - scriptDatabaseOptions: DacDeployOptionPropertyBoolean; - scriptDatabaseCompatibility: DacDeployOptionPropertyBoolean; - scriptDatabaseCollation: DacDeployOptionPropertyBoolean; - runDeploymentPlanExecutors: DacDeployOptionPropertyBoolean; - registerDataTierApplication: DacDeployOptionPropertyBoolean; - populateFilesOnFileGroups: DacDeployOptionPropertyBoolean; - noAlterStatementsToChangeClrTypes: DacDeployOptionPropertyBoolean; - includeTransactionalScripts: DacDeployOptionPropertyBoolean; - includeCompositeObjects: DacDeployOptionPropertyBoolean; - allowUnsafeRowLevelSecurityDataMovement: DacDeployOptionPropertyBoolean; - ignoreWithNocheckOnCheckConstraints: DacDeployOptionPropertyBoolean; - ignoreFillFactor: DacDeployOptionPropertyBoolean; - ignoreFileSize: DacDeployOptionPropertyBoolean; - ignoreFilegroupPlacement: DacDeployOptionPropertyBoolean; - doNotAlterReplicatedObjects: DacDeployOptionPropertyBoolean; - doNotAlterChangeDataCaptureObjects: DacDeployOptionPropertyBoolean; - disableAndReenableDdlTriggers: DacDeployOptionPropertyBoolean; - deployDatabaseInSingleUserMode: DacDeployOptionPropertyBoolean; - createNewDatabase: DacDeployOptionPropertyBoolean; - compareUsingTargetCollation: DacDeployOptionPropertyBoolean; - commentOutSetVarDeclarations: DacDeployOptionPropertyBoolean; - blockWhenDriftDetected: DacDeployOptionPropertyBoolean; - blockOnPossibleDataLoss: DacDeployOptionPropertyBoolean; - backupDatabaseBeforeChanges: DacDeployOptionPropertyBoolean; - allowIncompatiblePlatform: DacDeployOptionPropertyBoolean; - allowDropBlockingAssemblies: DacDeployOptionPropertyBoolean; - dropConstraintsNotInSource: DacDeployOptionPropertyBoolean; - dropDmlTriggersNotInSource: DacDeployOptionPropertyBoolean; - dropExtendedPropertiesNotInSource: DacDeployOptionPropertyBoolean; - dropIndexesNotInSource: DacDeployOptionPropertyBoolean; - ignoreFileAndLogFilePath: DacDeployOptionPropertyBoolean; - ignoreExtendedProperties: DacDeployOptionPropertyBoolean; - ignoreDmlTriggerState: DacDeployOptionPropertyBoolean; - ignoreDmlTriggerOrder: DacDeployOptionPropertyBoolean; - ignoreDefaultSchema: DacDeployOptionPropertyBoolean; - ignoreDdlTriggerState: DacDeployOptionPropertyBoolean; - ignoreDdlTriggerOrder: DacDeployOptionPropertyBoolean; - ignoreCryptographicProviderFilePath: DacDeployOptionPropertyBoolean; - verifyDeployment: DacDeployOptionPropertyBoolean; - ignoreComments: DacDeployOptionPropertyBoolean; - ignoreColumnCollation: DacDeployOptionPropertyBoolean; - ignoreAuthorizer: DacDeployOptionPropertyBoolean; - ignoreAnsiNulls: DacDeployOptionPropertyBoolean; - generateSmartDefaults: DacDeployOptionPropertyBoolean; - dropStatisticsNotInSource: DacDeployOptionPropertyBoolean; - dropRoleMembersNotInSource: DacDeployOptionPropertyBoolean; - dropPermissionsNotInSource: DacDeployOptionPropertyBoolean; - dropObjectsNotInSource: DacDeployOptionPropertyBoolean; - ignoreColumnOrder: DacDeployOptionPropertyBoolean; - doNotDropObjectTypes: DacDeployOptionPropertyObject; excludeObjectTypes: DacDeployOptionPropertyObject; - ignoreTablePartitionOptions: DacDeployOptionPropertyBoolean; - doNotEvaluateSqlCmdVariables: DacDeployOptionPropertyBoolean; - disableParallelismForEnablingIndexes: DacDeployOptionPropertyBoolean; - disableIndexesForDataPhase: DacDeployOptionPropertyBoolean; - restoreSequenceCurrentValue: DacDeployOptionPropertyBoolean; - rebuildIndexesOfflineForDataPhase: DacDeployOptionPropertyBoolean; - isAlwaysEncryptedParameterizationEnabled: DacDeployOptionPropertyBoolean; - preserveIdentityLastValues: DacDeployOptionPropertyBoolean; - allowExternalLibraryPaths: DacDeployOptionPropertyBoolean; - allowExternalLanguagePaths: DacDeployOptionPropertyBoolean; - hashObjectNamesInLogs: DacDeployOptionPropertyBoolean; - doNotDropWorkloadClassifiers: DacDeployOptionPropertyBoolean; - ignoreWorkloadClassifiers: DacDeployOptionPropertyBoolean; - ignoreDatabaseWorkloadGroups: DacDeployOptionPropertyBoolean; - doNotDropDatabaseWorkloadGroups: DacDeployOptionPropertyBoolean; + // key will be the boolean option name + booleanOptionsDictionary: { [key: string]: DacDeployOptionPropertyBoolean }; } /**