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);
}
}
}
}