Feature/schemacompare options (#5143)

* extension now working

* make button messages better

* fix diff editor title disappearing and remove border from source and target name boxes

* redoing a bunch of stuff that disappeared after rebasing

* add images and add to extensions.ts

* moving a few changes to the right place after rebase

* formatting

* Initial schema compare options working code

* Adding description.icon etc.

* Enabling disabling options button

* Name change: SchemaCompareOptions to DeploymentOptions. To reflect SqltoolsService side parameters

* Adding sorting and correct sql tools version

* Adding options button themes

* Formatting fix

* Adding get default options call to get options from tools service

* Exclude/Include changes - first commit

* Adding border to checkboxes

* Taking PR comments

* Updating to latest sqltools with schema compare options
This commit is contained in:
udeeshagautam
2019-04-29 18:11:48 -07:00
committed by GitHub
parent 72fb114dec
commit e42bfada9d
12 changed files with 2169 additions and 16 deletions

View File

@@ -1742,10 +1742,166 @@ declare module 'azdata' {
ownerUri: string;
}
export interface SchemaCompareOptionsResult extends ResultStatus {
defaultDeploymentOptions: DeploymentOptions;
}
export interface DeploymentOptions {
ignoreTableOptions: boolean;
ignoreSemicolonBetweenStatements: boolean;
ignoreRouteLifetime: boolean;
ignoreRoleMembership: boolean;
ignoreQuotedIdentifiers: boolean;
ignorePermissions: boolean;
ignorePartitionSchemes: boolean;
ignoreObjectPlacementOnPartitionScheme: boolean;
ignoreNotForReplication: boolean;
ignoreLoginSids: boolean;
ignoreLockHintsOnIndexes: boolean;
ignoreKeywordCasing: boolean;
ignoreIndexPadding: boolean;
ignoreIndexOptions: boolean;
ignoreIncrement: boolean;
ignoreIdentitySeed: boolean;
ignoreUserSettingsObjects: boolean;
ignoreFullTextCatalogFilePath: boolean;
ignoreWhitespace: boolean;
ignoreWithNocheckOnForeignKeys: boolean;
verifyCollationCompatibility: boolean;
unmodifiableObjectWarnings: boolean;
treatVerificationErrorsAsWarnings: boolean;
scriptRefreshModule: boolean;
scriptNewConstraintValidation: boolean;
scriptFileSize: boolean;
scriptDeployStateChecks: boolean;
scriptDatabaseOptions: boolean;
scriptDatabaseCompatibility: boolean;
scriptDatabaseCollation: boolean;
runDeploymentPlanExecutors: boolean;
registerDataTierApplication: boolean;
populateFilesOnFileGroups: boolean;
noAlterStatementsToChangeClrTypes: boolean;
includeTransactionalScripts: boolean;
includeCompositeObjects: boolean;
allowUnsafeRowLevelSecurityDataMovement: boolean;
ignoreWithNocheckOnCheckConstraints: boolean;
ignoreFillFactor: boolean;
ignoreFileSize: boolean;
ignoreFilegroupPlacement: boolean;
doNotAlterReplicatedObjects: boolean;
doNotAlterChangeDataCaptureObjects: boolean;
disableAndReenableDdlTriggers: boolean;
deployDatabaseInSingleUserMode: boolean;
createNewDatabase: boolean;
compareUsingTargetCollation: boolean;
commentOutSetVarDeclarations: boolean;
blockWhenDriftDetected: boolean;
blockOnPossibleDataLoss: boolean;
backupDatabaseBeforeChanges: boolean;
allowIncompatiblePlatform: boolean;
allowDropBlockingAssemblies: boolean;
dropConstraintsNotInSource: boolean;
dropDmlTriggersNotInSource: boolean;
dropExtendedPropertiesNotInSource: boolean;
dropIndexesNotInSource: boolean;
ignoreFileAndLogFilePath: boolean;
ignoreExtendedProperties: boolean;
ignoreDmlTriggerState: boolean;
ignoreDmlTriggerOrder: boolean;
ignoreDefaultSchema: boolean;
ignoreDdlTriggerState: boolean;
ignoreDdlTriggerOrder: boolean;
ignoreCryptographicProviderFilePath: boolean;
verifyDeployment: boolean;
ignoreComments: boolean;
ignoreColumnCollation: boolean;
ignoreAuthorizer: boolean;
ignoreAnsiNulls: boolean;
generateSmartDefaults: boolean;
dropStatisticsNotInSource: boolean;
dropRoleMembersNotInSource: boolean;
dropPermissionsNotInSource: boolean;
dropObjectsNotInSource: boolean;
ignoreColumnOrder: boolean;
doNotDropObjectTypes: SchemaObjectType[];
excludeObjectTypes: SchemaObjectType[];
}
export 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,
fileTables = 19,
fullTextCatalogs = 20,
fullTextStoplists = 21,
messageTypes = 22,
partitionFunctions = 23,
partitionSchemes = 24,
permissions = 25,
queues = 26,
remoteServiceBindings = 27,
roleMembership = 28,
rules = 29,
scalarValuedFunctions = 30,
searchPropertyLists = 31,
securityPolicies = 32,
sequences = 33,
services = 34,
signatures = 35,
storedProcedures = 36,
symmetricKeys = 37,
synonyms = 38,
tables = 39,
tableValuedFunctions = 40,
userDefinedDataTypes = 41,
userDefinedTableTypes = 42,
clrUserDefinedTypes = 43,
users = 44,
views = 45,
xmlSchemaCollections = 46,
audits = 47,
credentials = 48,
cryptographicProviders = 49,
databaseAuditSpecifications = 50,
databaseEncryptionKeys = 51,
databaseScopedCredentials = 52,
endpoints = 53,
errorMessages = 54,
eventNotifications = 55,
eventSessions = 56,
linkedServerLogins = 57,
linkedServers = 58,
logins = 59,
masterKeys = 60,
routes = 61,
serverAuditSpecifications = 62,
serverRoleMembership = 63,
serverRoles = 64,
serverTriggers = 65
}
export interface SchemaCompareServicesProvider extends DataProvider {
schemaCompare(sourceEndpointInfo: SchemaCompareEndpointInfo, targetEndpointInfo: SchemaCompareEndpointInfo, taskExecutionMode: TaskExecutionMode): Thenable<SchemaCompareResult>;
schemaCompare(sourceEndpointInfo: SchemaCompareEndpointInfo, targetEndpointInfo: SchemaCompareEndpointInfo, taskExecutionMode: TaskExecutionMode, deploymentOptions: DeploymentOptions): Thenable<SchemaCompareResult>;
schemaCompareGenerateScript(operationId: string, targetDatabaseName: string, scriptFilePath: string, taskExecutionMode: TaskExecutionMode): Thenable<ResultStatus>;
schemaComparePublishChanges(operationId: string, targetServerName: string, targetDatabaseName: string, taskExecutionMode: TaskExecutionMode): Thenable<ResultStatus>;
schemaCompareGetDefaultOptions(): Thenable<SchemaCompareOptionsResult>;
schemaCompareIncludeExcludeNode(operationId: string, diffEntry: DiffEntry, IncludeRequest: boolean, taskExecutionMode: TaskExecutionMode): Thenable<ResultStatus>;
}
// Security service interfaces ------------------------------------------------------------------------

View File

@@ -17,9 +17,11 @@ export interface ISchemaCompareService {
_serviceBrand: any;
registerProvider(providerId: string, provider: azdata.SchemaCompareServicesProvider): void;
schemaCompare(sourceEndpointInfo: azdata.SchemaCompareEndpointInfo, targetEndpointInfo: azdata.SchemaCompareEndpointInfo, taskExecutionMode: azdata.TaskExecutionMode): void;
schemaCompare(sourceEndpointInfo: azdata.SchemaCompareEndpointInfo, targetEndpointInfo: azdata.SchemaCompareEndpointInfo, taskExecutionMode: azdata.TaskExecutionMode, deploymentOptions: azdata.DeploymentOptions): void;
schemaCompareGenerateScript(operationId: string, targetDatabaseName: string, scriptFilePath: string, taskExecutionMode: azdata.TaskExecutionMode): void;
schemaComparePublishChanges(operationId: string, targetServerName: string, targetDatabaseName: string, taskExecutionMode: azdata.TaskExecutionMode): void;
schemaCompareGetDefaultOptions(): void;
schemaCompareIncludeExcludeNode(operationId: string, diffEntry: azdata.DiffEntry, includeRequest: boolean, taskExecutionMode: azdata.TaskExecutionMode): void;
}
export class SchemaCompareService implements ISchemaCompareService {
@@ -32,9 +34,9 @@ export class SchemaCompareService implements ISchemaCompareService {
this._providers[providerId] = provider;
}
schemaCompare(sourceEndpointInfo: azdata.SchemaCompareEndpointInfo, targetEndpointInfo: azdata.SchemaCompareEndpointInfo, taskExecutionMode: azdata.TaskExecutionMode): Thenable<azdata.SchemaCompareResult> {
schemaCompare(sourceEndpointInfo: azdata.SchemaCompareEndpointInfo, targetEndpointInfo: azdata.SchemaCompareEndpointInfo, taskExecutionMode: azdata.TaskExecutionMode, deploymentOptions: azdata.DeploymentOptions): Thenable<azdata.SchemaCompareResult> {
return this._runAction(sourceEndpointInfo.ownerUri, (runner) => {
return runner.schemaCompare(sourceEndpointInfo, targetEndpointInfo, taskExecutionMode);
return runner.schemaCompare(sourceEndpointInfo, targetEndpointInfo, taskExecutionMode, deploymentOptions);
});
}
@@ -50,6 +52,18 @@ export class SchemaCompareService implements ISchemaCompareService {
});
}
schemaCompareGetDefaultOptions(): Thenable<azdata.SchemaCompareOptionsResult> {
return this._runAction('', (runner) => {
return runner.schemaCompareGetDefaultOptions();
});
}
schemaCompareIncludeExcludeNode(operationId: string, diffEntry: azdata.DiffEntry, includeRequest: boolean, taskExecutionMode: azdata.TaskExecutionMode): Thenable<azdata.ResultStatus> {
return this._runAction('', (runner) => {
return runner.schemaCompareIncludeExcludeNode(operationId, diffEntry, includeRequest, taskExecutionMode);
});
}
private _runAction<T>(uri: string, action: (handler: azdata.SchemaCompareServicesProvider) => Thenable<T>): Thenable<T> {
let providerId: string = this._connectionService.getProviderIdFromUri(uri);

View File

@@ -563,3 +563,72 @@ export enum SchemaCompareEndpointType {
database = 0,
dacpac = 1
}
export 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,
fileTables = 19,
fullTextCatalogs = 20,
fullTextStoplists = 21,
messageTypes = 22,
partitionFunctions = 23,
partitionSchemes = 24,
permissions = 25,
queues = 26,
remoteServiceBindings = 27,
roleMembership = 28,
rules = 29,
scalarValuedFunctions = 30,
searchPropertyLists = 31,
securityPolicies = 32,
sequences = 33,
services = 34,
signatures = 35,
storedProcedures = 36,
symmetricKeys = 37,
synonyms = 38,
tables = 39,
tableValuedFunctions = 40,
userDefinedDataTypes = 41,
userDefinedTableTypes = 42,
clrUserDefinedTypes = 43,
users = 44,
views = 45,
xmlSchemaCollections = 46,
audits = 47,
credentials = 48,
cryptographicProviders = 49,
databaseAuditSpecifications = 50,
databaseEncryptionKeys = 51,
databaseScopedCredentials = 52,
endpoints = 53,
errorMessages = 54,
eventNotifications = 55,
eventSessions = 56,
linkedServerLogins = 57,
linkedServers = 58,
logins = 59,
masterKeys = 60,
routes = 61,
serverAuditSpecifications = 62,
serverRoleMembership = 63,
serverRoles = 64,
serverTriggers = 65
}

View File

@@ -457,14 +457,20 @@ export class MainThreadDataProtocol implements MainThreadDataProtocolShape {
public $registerSchemaCompareServicesProvider(providerId: string, handle: number): Promise<any> {
const self = this;
this._schemaCompareService.registerProvider(providerId, <azdata.SchemaCompareServicesProvider>{
schemaCompare(sourceEndpointInfo: azdata.SchemaCompareEndpointInfo, targetEndpointInfo: azdata.SchemaCompareEndpointInfo, taskExecutionMode: azdata.TaskExecutionMode): Thenable<azdata.SchemaCompareResult> {
return self._proxy.$schemaCompare(handle, sourceEndpointInfo, targetEndpointInfo, taskExecutionMode);
schemaCompare(sourceEndpointInfo: azdata.SchemaCompareEndpointInfo, targetEndpointInfo: azdata.SchemaCompareEndpointInfo, taskExecutionMode: azdata.TaskExecutionMode, schemaComapareOptions: azdata.DeploymentOptions): Thenable<azdata.SchemaCompareResult> {
return self._proxy.$schemaCompare(handle, sourceEndpointInfo, targetEndpointInfo, taskExecutionMode, schemaComapareOptions);
},
schemaCompareGenerateScript(operationId: string, targetDatabaseName: string, scriptFilePath: string, taskExecutionMode: azdata.TaskExecutionMode): Thenable<azdata.ResultStatus> {
return self._proxy.$schemaCompareGenerateScript(handle, operationId, targetDatabaseName, scriptFilePath, taskExecutionMode);
},
schemaComparePublishChanges(operationId: string, targetServerName: string, targetDatabaseName: string, taskExecutionMode: azdata.TaskExecutionMode): Thenable<azdata.ResultStatus> {
return self._proxy.$schemaComparePublishChanges(handle, operationId, targetServerName, targetDatabaseName, taskExecutionMode);
},
schemaCompareGetDefaultOptions(): Thenable<azdata.SchemaCompareOptionsResult> {
return self._proxy.$schemaCompareGetDefaultOptions(handle);
},
schemaCompareIncludeExcludeNode(operationId: string, diffEntry: azdata.DiffEntry, includeRequest: boolean, taskExecutionMode: azdata.TaskExecutionMode): Thenable<azdata.ResultStatus> {
return self._proxy.$schemaCompareIncludeExcludeNode(handle, operationId, diffEntry, includeRequest, taskExecutionMode);
}
});

View File

@@ -536,7 +536,8 @@ export function createApiFactory(
extensions: extensions,
SchemaUpdateAction: sqlExtHostTypes.SchemaUpdateAction,
SchemaDifferenceType: sqlExtHostTypes.SchemaDifferenceType,
SchemaCompareEndpointType: sqlExtHostTypes.SchemaCompareEndpointType
SchemaCompareEndpointType: sqlExtHostTypes.SchemaCompareEndpointType,
SchemaObjectType: sqlExtHostTypes.SchemaObjectType
};
},

View File

@@ -457,7 +457,7 @@ export abstract class ExtHostDataProtocolShape {
/**
* Schema compare
*/
$schemaCompare(handle: number, sourceEndpointInfo: azdata.SchemaCompareEndpointInfo, targetEndpointInfo: azdata.SchemaCompareEndpointInfo, taskExecutionMode: azdata.TaskExecutionMode): Thenable<azdata.SchemaCompareResult> { throw ni(); }
$schemaCompare(handle: number, sourceEndpointInfo: azdata.SchemaCompareEndpointInfo, targetEndpointInfo: azdata.SchemaCompareEndpointInfo, taskExecutionMode: azdata.TaskExecutionMode, schemaComapareOptions: azdata.DeploymentOptions): Thenable<azdata.SchemaCompareResult> { throw ni(); }
/**
* Schema compare generate script
@@ -468,6 +468,17 @@ export abstract class ExtHostDataProtocolShape {
* Schema compare publish changes
*/
$schemaComparePublishChanges(handle: number, operationId: string, targetServerName: string, targetDatabaseName: string, taskExecutionMode: azdata.TaskExecutionMode): Thenable<azdata.SchemaCompareResult> { throw ni(); }
/**
* Schema compare get default options
*/
$schemaCompareGetDefaultOptions(handle: number): Thenable<azdata.SchemaCompareOptionsResult> { throw ni(); }
/**
* Schema comapre Include node
*/
$schemaCompareIncludeExcludeNode(handle: number, operationId: string, diffEntry: azdata.DiffEntry, includeRequest: boolean, taskExecutionMode: azdata.TaskExecutionMode): Thenable<azdata.ResultStatus> { throw ni(); }
}
/**