internal static DiffEntry CreateDiffEntry(SchemaDifference difference, DiffEntry parent) { if (difference == null) { return(null); } DiffEntry diffEntry = new DiffEntry(); diffEntry.UpdateAction = difference.UpdateAction; diffEntry.DifferenceType = difference.DifferenceType; diffEntry.Name = difference.Name; diffEntry.Included = difference.Included; if (difference.SourceObject != null) { diffEntry.SourceValue = difference.SourceObject.Name.Parts.ToArray(); var sourceType = new SchemaComparisonExcludedObjectId(difference.SourceObject.ObjectType, difference.SourceObject.Name); diffEntry.SourceObjectType = sourceType.TypeName; } if (difference.TargetObject != null) { diffEntry.TargetValue = difference.TargetObject.Name.Parts.ToArray(); var targetType = new SchemaComparisonExcludedObjectId(difference.TargetObject.ObjectType, difference.TargetObject.Name); diffEntry.TargetObjectType = targetType.TypeName; } if (difference.DifferenceType == SchemaDifferenceType.Object) { // set source and target scripts if (difference.SourceObject != null) { string sourceScript; difference.SourceObject.TryGetScript(out sourceScript); diffEntry.SourceScript = FormatScript(sourceScript); } if (difference.TargetObject != null) { string targetScript; difference.TargetObject.TryGetScript(out targetScript); diffEntry.TargetScript = FormatScript(targetScript); } } diffEntry.Children = new List <DiffEntry>(); foreach (SchemaDifference child in difference.Children) { diffEntry.Children.Add(CreateDiffEntry(child, diffEntry)); } return(diffEntry); }
internal static DiffEntry CreateDiffEntry(SchemaDifference difference, DiffEntry parent) { if (difference == null) { return(null); } DiffEntry diffEntry = new DiffEntry(); diffEntry.UpdateAction = difference.UpdateAction; diffEntry.DifferenceType = difference.DifferenceType; diffEntry.Name = difference.Name; if (difference.SourceObject != null) { diffEntry.SourceValue = GetName(difference.SourceObject.Name.ToString()); } if (difference.TargetObject != null) { diffEntry.TargetValue = GetName(difference.TargetObject.Name.ToString()); } if (difference.DifferenceType == SchemaDifferenceType.Object) { // set source and target scripts if (difference.SourceObject != null) { string sourceScript; difference.SourceObject.TryGetScript(out sourceScript); diffEntry.SourceScript = FormatScript(sourceScript); } if (difference.TargetObject != null) { string targetScript; difference.TargetObject.TryGetScript(out targetScript); diffEntry.TargetScript = FormatScript(targetScript); } } diffEntry.Children = new List <DiffEntry>(); foreach (SchemaDifference child in difference.Children) { diffEntry.Children.Add(CreateDiffEntry(child, diffEntry)); } return(diffEntry); }
private bool IsEqual(SchemaDifference difference, DiffEntry diffEntry) { bool result = true; // Create a diff entry from difference and check if it matches the diff entry passed DiffEntry entryFromDifference = SchemaCompareUtils.CreateDiffEntry(difference, null); System.Reflection.PropertyInfo[] properties = diffEntry.GetType().GetProperties(); foreach (var prop in properties) { result = result && ((prop.GetValue(diffEntry) == null && prop.GetValue(entryFromDifference) == null) || prop.GetValue(diffEntry).SafeToString().Equals(prop.GetValue(entryFromDifference).SafeToString())); } return(result); }
/// <summary> /// Exclude will return false if included dependencies are found. Include will also include dependencies that need to be included. /// This is the same behavior as SSDT /// </summary> /// <param name="mode"></param> public void Execute(TaskExecutionMode mode) { this.CancellationToken.ThrowIfCancellationRequested(); try { SchemaDifference node = this.FindDifference(this.ComparisonResult.Differences, this.Parameters.DiffEntry); if (node == null) { throw new InvalidOperationException(SR.SchemaCompareExcludeIncludeNodeNotFound); } this.Success = this.Parameters.IncludeRequest ? this.ComparisonResult.Include(node) : this.ComparisonResult.Exclude(node); // if include request (pass or fail), send dependencies that might have been affected by this request, given by GetIncludeDependencies() if (this.Parameters.IncludeRequest) { IEnumerable <SchemaDifference> affectedDependencies = this.ComparisonResult.GetIncludeDependencies(node); this.AffectedDependencies = affectedDependencies.Select(difference => SchemaCompareUtils.CreateDiffEntry(difference: difference, parent: null)).ToList(); } else { // if exclude was successful, the possible affected dependencies are given by GetIncludedDependencies() if (this.Success) { IEnumerable <SchemaDifference> affectedDependencies = this.ComparisonResult.GetIncludeDependencies(node); this.AffectedDependencies = affectedDependencies.Select(difference => SchemaCompareUtils.CreateDiffEntry(difference: difference, parent: null)).ToList(); } // if not successful, send back the exclude dependencies that caused it to fail else { IEnumerable <SchemaDifference> blockingDependencies = this.ComparisonResult.GetExcludeDependencies(node); blockingDependencies = blockingDependencies.Where(difference => difference.Included == node.Included); this.BlockingDependencies = blockingDependencies.Select(difference => SchemaCompareUtils.CreateDiffEntry(difference: difference, parent: null)).ToList(); } } } catch (Exception e) { ErrorMessage = e.Message; Logger.Write(TraceEventType.Error, string.Format("Schema compare publish changes operation {0} failed with exception {1}", this.OperationId, e.Message)); throw; } }
public void Execute(TaskExecutionMode mode) { this.CancellationToken.ThrowIfCancellationRequested(); try { SchemaDifference node = this.FindDifference(this.ComparisonResult.Differences, this.Parameters.DiffEntry); if (node == null) { throw new InvalidOperationException(SR.SchemaCompareExcludeIncludeNodeNotFound); } this.Success = this.Parameters.IncludeRequest ? this.ComparisonResult.Include(node) : this.ComparisonResult.Exclude(node); } catch (Exception e) { ErrorMessage = e.Message; Logger.Write(TraceEventType.Error, string.Format("Schema compare publish changes operation {0} failed with exception {1}", this.OperationId, e.Message)); throw; } }
private bool IsEqual(SchemaDifference difference, DiffEntry diffEntry) { bool result = true; // Create a diff entry from difference and check if it matches the diff entry passed DiffEntry entryFromDifference = SchemaCompareUtils.CreateDiffEntry(difference, null); System.Reflection.PropertyInfo[] properties = diffEntry.GetType().GetProperties(); foreach (var prop in properties) { // Don't need to check if included is the same when verifying if the difference is equal if (prop.Name != "Included") { if (!((prop.GetValue(diffEntry) == null && prop.GetValue(entryFromDifference) == null) || prop.GetValue(diffEntry).SafeToString().Equals(prop.GetValue(entryFromDifference).SafeToString()))) { return(false); } } } return(result); }