You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

73 lines
3.6 KiB

using OpenDBDiff.Schema.SQLServer.Generates.Model;
namespace OpenDBDiff.Schema.SQLServer.Generates.Compare
{
internal class CompareColumnsConstraints : CompareBase<ColumnConstraint>
{
public static ColumnConstraint GenerateDifferences(Column originFields, Column destinationFields)
{
if ((originFields.DefaultConstraint == null) && (destinationFields.DefaultConstraint != null))
{
originFields.DefaultConstraint = destinationFields.DefaultConstraint.Clone(originFields);
originFields.DefaultConstraint.Status = ObjectStatus.Create;
originFields.DefaultConstraint.Parent.Status = ObjectStatus.Original;
originFields.DefaultConstraint.Parent.Parent.Status = ObjectStatus.Alter;
}
else
{
if ((originFields.DefaultConstraint != null) && (destinationFields.DefaultConstraint != null))
{
if (!ColumnConstraint.Compare(originFields.DefaultConstraint, destinationFields.DefaultConstraint))
{
originFields.DefaultConstraint = destinationFields.DefaultConstraint.Clone(originFields);
//Indico que hay un ALTER TABLE, pero sobre la columna, no seteo ningun estado.
originFields.DefaultConstraint.Status = ObjectStatus.Alter;
originFields.DefaultConstraint.Parent.Status = ObjectStatus.Original;
originFields.DefaultConstraint.Parent.Parent.Status = ObjectStatus.Alter;
}
}
else
if ((originFields.DefaultConstraint != null) && (destinationFields.DefaultConstraint == null))
{
originFields.DefaultConstraint.Status = ObjectStatus.Drop;
originFields.DefaultConstraint.Parent.Status = ObjectStatus.Original;
originFields.DefaultConstraint.Parent.Parent.Status = ObjectStatus.Alter;
}
}
/*foreach (ColumnConstraint node in destinationFields)
{
if (!originFields.Exists(node.FullName))
{
node.Status = ObjectStatusType.CreateStatus;
originFields.Parent.Status = ObjectStatusType.OriginalStatus;
originFields.Parent.Parent.Status = ObjectStatusType.AlterStatus;
originFields.Add(node);
}
else
{
if (!ColumnConstraint.Compare(originFields[node.FullName], node))
{
ColumnConstraint newNode = node.Clone(originFields.Parent);
//Indico que hay un ALTER TABLE, pero sobre la columna, no seteo ningun estado.
newNode.Status = ObjectStatusType.AlterStatus;
newNode.Parent.Status = ObjectStatusType.OriginalStatus;
newNode.Parent.Parent.Status = ObjectStatusType.AlterStatus;
originFields[node.FullName] = newNode;
}
}
}
MarkDrop(originFields, destinationFields, node =>
{
node.Status = ObjectStatusType.DropStatus;
originFields.Parent.Status = ObjectStatusType.OriginalStatus;
originFields.Parent.Parent.Status = ObjectStatusType.AlterStatus;
}
);
*/
return originFields.DefaultConstraint;
}
}
}