using OpenDBDiff.Schema.Model;
using OpenDBDiff.Schema.SQLServer.Generates.Model;
namespace OpenDBDiff.Schema.SQLServer.Generates.Compare
{
internal class CompareTables : CompareBase
{
protected override void DoUpdate(SchemaList originFields, Table node)
{
if (node.Status != ObjectStatus.Drop)
{
Table tablaOriginal = originFields[node.FullName];
tablaOriginal.OriginalTable = (Table)originFields[node.FullName].Clone((Database)tablaOriginal.Parent);
(new CompareColumns()).GenerateDifferences(tablaOriginal.Columns, node.Columns);
(new CompareConstraints()).GenerateDifferences(tablaOriginal.Constraints, node.Constraints);
(new CompareIndexes()).GenerateDifferences(tablaOriginal.Indexes, node.Indexes);
(new CompareTablesOptions()).GenerateDifferences(tablaOriginal.Options, node.Options);
(new CompareTriggers()).GenerateDifferences(tablaOriginal.Triggers, node.Triggers);
(new CompareCLRTriggers()).GenerateDifferences(tablaOriginal.CLRTriggers, node.CLRTriggers);
(new CompareFullTextIndex()).GenerateDifferences(tablaOriginal.FullTextIndex, node.FullTextIndex);
if (!Table.CompareFileGroup(tablaOriginal, node))
{
tablaOriginal.FileGroup = node.FileGroup;
/*Esto solo aplica a las tablas heap, el resto hace el campo en el filegroup del indice clustered*/
if (!tablaOriginal.HasClusteredIndex)
tablaOriginal.Status = ObjectStatus.Rebuild;
}
if (!Table.CompareFileGroupText(tablaOriginal, node))
{
tablaOriginal.FileGroupText = node.FileGroupText;
tablaOriginal.Status = ObjectStatus.Rebuild;
}
if (node.HasChangeTracking != tablaOriginal.HasChangeTracking)
{
tablaOriginal.HasChangeTracking = node.HasChangeTracking;
tablaOriginal.HasChangeTrackingTrackColumn = node.HasChangeTrackingTrackColumn;
tablaOriginal.Status += (int)ObjectStatus.Disabled;
}
}
}
///
/// Compara las colecciones de tablas de dos bases diferentes y marca el estado de los objetos
/// dependiendo si existen o si deben borrarse.
///
///
/// Tablas originales, donde se guardaran los estados de las tablas.
///
/// Tablas comparativas, que se usa para comparar con la base original.
///
/*public static void GenerateDifferences(SchemaList originTables, SchemaList destinationTables)
{
MarkDrop(originTables, destinationTables);
foreach (Table node in destinationTables)
{
if (!originTables.Exists(node.FullName))
{
node.Status = ObjectStatusType.CreateStatus;
node.Parent = originTables.Parent;
originTables.Add(node);
}
else
{
if (node.Status != ObjectStatusType.DropStatus)
{
Table tablaOriginal = originTables[node.FullName];
tablaOriginal.OriginalTable = (Table)originTables[node.FullName].Clone((Database)tablaOriginal.Parent);
CompareColumns.GenerateDifferences(tablaOriginal.Columns, node.Columns);
CompareConstraints.GenerateDifferences(tablaOriginal.Constraints, node.Constraints);
CompareIndexes.GenerateDifferences(tablaOriginal.Indexes, node.Indexes);
CompareTablesOptions.GenerateDifferences(tablaOriginal.Options, node.Options);
(new CompareTriggers()).GenerateDifferences(tablaOriginal.Triggers, node.Triggers);
(new CompareCLRTriggers()).GenerateDifferences(tablaOriginal.CLRTriggers, node.CLRTriggers);
if (!Table.CompareFileGroup(tablaOriginal, node))
{
tablaOriginal.FileGroup = node.FileGroup;
//Esto solo aplica a las tablas heap, el resto hace el campo en el filegroup del indice clustered
if (!tablaOriginal.HasClusteredIndex)
tablaOriginal.Status = ObjectStatusType.RebuildStatus;
}
if (!Table.CompareFileGroupText(tablaOriginal, node))
{
tablaOriginal.FileGroupText = node.FileGroupText;
tablaOriginal.Status = ObjectStatusType.RebuildStatus;
}
}
}
}
}*/
}
}