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; } } } } }*/ } }