using OpenDBDiff.Abstractions.Schema.Misc; using OpenDBDiff.SqlServer.Schema.Model; using System; namespace OpenDBDiff.SqlServer.Schema.Compare { internal static class CompareDatabase { /// /// Generates the differences to migrate a schema from origin to destination /// /// The Origin schema is the schema before our generated actions are applied. /// The Destination schema is the schema after our actions are applied. /// /// public static Database GenerateDifferences(Database origin, Database destination) { try { Database data = origin; (new CompareTables()).GenerateDifferences(origin.Tables, destination.Tables); (new CompareAssemblies()).GenerateDifferences(origin.Assemblies, destination.Assemblies); (new CompareUserDataTypes()).GenerateDifferences(origin.UserTypes, destination.UserTypes); (new CompareXMLSchemas()).GenerateDifferences(origin.XmlSchemas, destination.XmlSchemas); (new CompareSchemas()).GenerateDifferences(origin.Schemas, destination.Schemas); (new CompareFileGroups()).GenerateDifferences(origin.FileGroups, destination.FileGroups); (new CompareRules()).GenerateDifferences(origin.Rules, destination.Rules); (new CompareDDLTriggers()).GenerateDifferences(origin.DDLTriggers, destination.DDLTriggers); (new CompareSynonyms()).GenerateDifferences(origin.Synonyms, destination.Synonyms); (new CompareUsers()).GenerateDifferences(origin.Users, destination.Users); (new CompareStoredProcedures()).GenerateDifferences(origin.Procedures, destination.Procedures); (new CompareCLRStoredProcedure()).GenerateDifferences(origin.CLRProcedures, destination.CLRProcedures); (new CompareCLRFunction()).GenerateDifferences(origin.CLRFunctions, destination.CLRFunctions); (new CompareViews()).GenerateDifferences(origin.Views, destination.Views); (new CompareFunctions()).GenerateDifferences(origin.Functions, destination.Functions); (new CompareRoles()).GenerateDifferences(origin.Roles, destination.Roles); (new ComparePartitionFunction()).GenerateDifferences(origin.PartitionFunctions, destination.PartitionFunctions); (new ComparePartitionSchemes()).GenerateDifferences(origin.PartitionSchemes, destination.PartitionSchemes); (new CompareTableType()).GenerateDifferences(origin.TablesTypes, destination.TablesTypes); (new CompareFullText()).GenerateDifferences(origin.FullText, destination.FullText); data.SourceInfo = destination.Info; return data; } catch (Exception ex) { throw new SchemaException(ex.Message, ex); } } } }