/// <summary> /// Deep Clone... /// A clone of this class and clones of all assosiated metadata. /// </summary> /// <param name="uniqueConstraint">The unique constraint to deep clone.</param> /// <returns>A clone of this class and clones of all assosiated metadata.</returns> public static UniqueConstraint Clone(UniqueConstraint uniqueConstraint) { var uniqueConstraintClone = new UniqueConstraint { ObjectName = uniqueConstraint.ObjectName, AllowPageLocks = uniqueConstraint.AllowPageLocks, AllowRowLocks = uniqueConstraint.AllowRowLocks, FileGroup = uniqueConstraint.FileGroup, FillFactor = uniqueConstraint.FillFactor, IgnoreDupKey = uniqueConstraint.IgnoreDupKey, IndexType = uniqueConstraint.IndexType, IsClustered = uniqueConstraint.IsClustered, IsDisabled = uniqueConstraint.IsDisabled, IsPadded = uniqueConstraint.IsPadded }; foreach (var uniqueConstraintColumn in uniqueConstraint.UniqueConstraintColumns) { AddUniqueConstraintColumn(uniqueConstraintClone, UniqueConstraintColumn.Clone(uniqueConstraintColumn)); } return(uniqueConstraintClone); }
/// <summary> /// Shallow Clear... /// </summary> /// <param name="uniqueConstraint">The unique contraint to shallow clear.</param> public static void Clear(UniqueConstraint uniqueConstraint) { uniqueConstraint.UniqueConstraintColumns.Clear(); }
public static void RemoveUniqueConstraintColumn(UniqueConstraint uniqueConstraint, UniqueConstraintColumn uniqueConstraintColumn) { uniqueConstraint.UniqueConstraintColumns.Remove(uniqueConstraintColumn.Namespace); }
public static void RemoveUniqueConstraintColumn(UniqueConstraint uniqueConstraint, string objectNamespace) { uniqueConstraint.UniqueConstraintColumns.Remove(objectNamespace); }
//public static bool CompareDefinitions(UniqueConstraint sourceUniqueConstraint, UniqueConstraint targetUniqueConstraint) //{ // if (!CompareObjectNames(sourceUniqueConstraint, targetUniqueConstraint)) // return false; // if (sourceUniqueConstraint.AllowPageLocks != targetUniqueConstraint.AllowPageLocks) // return false; // if (sourceUniqueConstraint.AllowRowLocks != targetUniqueConstraint.AllowRowLocks) // return false; // if (StringComparer.OrdinalIgnoreCase.Compare( // sourceUniqueConstraint.FileGroup, targetUniqueConstraint.FileGroup) != 0) // return false; // if (sourceUniqueConstraint.FillFactor != targetUniqueConstraint.FillFactor) // return false; // if (sourceUniqueConstraint.IgnoreDupKey != targetUniqueConstraint.IgnoreDupKey) // return false; // if (StringComparer.OrdinalIgnoreCase.Compare( // sourceUniqueConstraint.IndexType, targetUniqueConstraint.IndexType) != 0) // return false; // if (sourceUniqueConstraint.IsClustered != targetUniqueConstraint.IsClustered) // return false; // if (sourceUniqueConstraint.IsDisabled != targetUniqueConstraint.IsDisabled) // return false; // return sourceUniqueConstraint.IsPadded == targetUniqueConstraint.IsPadded; //} //public static bool CompareObjectNames(UniqueConstraint sourceUniqueConstraint, UniqueConstraint targetUniqueConstraint, StringComparer stringComparer = null) //{ // if (stringComparer == null) // stringComparer = StringComparer.OrdinalIgnoreCase; // return stringComparer.Compare(sourceUniqueConstraint.ObjectName, targetUniqueConstraint.ObjectName) == 0; //} ///// <summary> ///// Removes all objects in the target UniqueConstraint from the source UniqueConstraint. ///// </summary> ///// <param name="sourceDataContext">The source DataContext.</param> ///// <param name="targetDataContext">The target DataContext.</param> ///// <param name="sourceUniqueConstraint">The source UniqueConstraint.</param> ///// <param name="targetUniqueConstraint">The target UniqueConstraint.</param> ///// <param name="dataComparisonType"> ///// The completeness of comparisons between matching objects. ///// </param> //public static void ExceptWith( // DataContext sourceDataContext, DataContext targetDataContext, // UniqueConstraint sourceUniqueConstraint, UniqueConstraint targetUniqueConstraint, // DataComparisonType dataComparisonType = DataComparisonType.SchemaLevelNamespaces) //{ // var matchingUniqueConstraintColumns = new HashSet<string>(StringComparer.OrdinalIgnoreCase); // matchingUniqueConstraintColumns.UnionWith(sourceUniqueConstraint.UniqueConstraintColumns.Keys); // matchingUniqueConstraintColumns.IntersectWith(targetUniqueConstraint.UniqueConstraintColumns.Keys); // foreach (var uniqueConstraintColumn in matchingUniqueConstraintColumns) // { // var sourceUniqueConstraintColumn = sourceUniqueConstraint.UniqueConstraintColumns[uniqueConstraintColumn]; // if (sourceUniqueConstraintColumn == null) // continue; // var targetUniqueConstraintColumn = targetUniqueConstraint.UniqueConstraintColumns[uniqueConstraintColumn]; // if (targetUniqueConstraintColumn == null) // continue; // switch (dataComparisonType) // { // case DataComparisonType.Definitions: // if (UniqueConstraintColumn.CompareDefinitions(sourceDataContext, targetDataContext, sourceUniqueConstraintColumn, targetUniqueConstraintColumn)) // RemoveUniqueConstraintColumn(sourceUniqueConstraint, uniqueConstraintColumn); // break; // case DataComparisonType.Namespaces: // if (UniqueConstraintColumn.CompareObjectNames(sourceUniqueConstraintColumn, targetUniqueConstraintColumn)) // RemoveUniqueConstraintColumn(sourceUniqueConstraint, uniqueConstraintColumn); // break; // //case DataComparisonType.SchemaLevelNamespaces: // // // Do Nothing // // break; // } // } //} //public static void GenerateCreateScripts( // DataContext sourceDataContext, DataContext targetDataContext, // UniqueConstraint uniqueConstraint, DataSyncActionsCollection dataSyncActions, DataProperties dataProperties) //{ // var dataSyncAction = DataActionFactory.CreateUniqueConstraint(sourceDataContext, targetDataContext, uniqueConstraint); // if (dataSyncAction != null) // dataSyncActions.Add(dataSyncAction); //} //public static void GenerateDropScripts( // DataContext sourceDataContext, DataContext targetDataContext, // UniqueConstraint uniqueConstraint, DataSyncActionsCollection dataSyncActions, DataProperties dataProperties) //{ // var dataSyncAction = DataActionFactory.DropUniqueConstraint(sourceDataContext, targetDataContext, uniqueConstraint); // if (dataSyncAction != null) // dataSyncActions.Add(dataSyncAction); //} ///// <summary> ///// Modifies the source UniqueConstraint to contain only objects that are ///// present in the source UniqueConstraint and in the target UniqueConstraint. ///// </summary> ///// <param name="sourceDataContext">The source DataContext.</param> ///// <param name="targetDataContext">The target DataContext.</param> ///// <param name="sourceUniqueConstraint">The source UniqueConstraint.</param> ///// <param name="targetUniqueConstraint">The target UniqueConstraint.</param> ///// <param name="dataComparisonType"> ///// The completeness of comparisons between matching objects. ///// </param> //public static void IntersectWith( // DataContext sourceDataContext, DataContext targetDataContext, // UniqueConstraint sourceUniqueConstraint, UniqueConstraint targetUniqueConstraint, // DataComparisonType dataComparisonType = DataComparisonType.SchemaLevelNamespaces) //{ // var matchingUniqueConstraintColumns = new HashSet<string>(StringComparer.OrdinalIgnoreCase); // var removableUniqueConstraintColumns = new HashSet<string>(StringComparer.OrdinalIgnoreCase); // matchingUniqueConstraintColumns.UnionWith(sourceUniqueConstraint.UniqueConstraintColumns.Keys); // matchingUniqueConstraintColumns.IntersectWith(targetUniqueConstraint.UniqueConstraintColumns.Keys); // removableUniqueConstraintColumns.UnionWith(sourceUniqueConstraint.UniqueConstraintColumns.Keys); // removableUniqueConstraintColumns.ExceptWith(matchingUniqueConstraintColumns); // foreach (var uniqueConstraintColumn in removableUniqueConstraintColumns) // RemoveUniqueConstraintColumn(sourceUniqueConstraint, uniqueConstraintColumn); // foreach (var uniqueConstraintColumn in matchingUniqueConstraintColumns) // { // var sourceUniqueConstraintColumn = sourceUniqueConstraint.UniqueConstraintColumns[uniqueConstraintColumn]; // if (sourceUniqueConstraintColumn == null) // continue; // var targetUniqueConstraintColumn = targetUniqueConstraint.UniqueConstraintColumns[uniqueConstraintColumn]; // if (targetUniqueConstraintColumn == null) // continue; // switch (dataComparisonType) // { // case DataComparisonType.Definitions: // if (!UniqueConstraintColumn.CompareDefinitions(sourceDataContext, targetDataContext, sourceUniqueConstraintColumn, targetUniqueConstraintColumn)) // RemoveUniqueConstraintColumn(sourceUniqueConstraint, uniqueConstraintColumn); // break; // case DataComparisonType.Namespaces: // if (!UniqueConstraintColumn.CompareObjectNames(sourceUniqueConstraintColumn, targetUniqueConstraintColumn)) // RemoveUniqueConstraintColumn(sourceUniqueConstraint, uniqueConstraintColumn); // break; // //case DataComparisonType.SchemaLevelNamespaces: // // // Do Nothing // // break; // } // } //} public static long ObjectCount(UniqueConstraint uniqueConstraint) { return(uniqueConstraint.UniqueConstraintColumns.Count); }
public UniqueConstraintColumn(UniqueConstraint uniqueConstraint, string objectName) { Init(this, uniqueConstraint, objectName); }
public void CreateUniqueConstraint( Dictionary <string, UserTable> userTables, Dictionary <string, UniqueConstraintColumn> uniqueConstraintColumns, IDataRecord reader) { var schemaName = Convert.ToString(reader[SchemaNameOrdinal]); var tableName = Convert.ToString(reader[TableNameOrdinal]); var objectName = Convert.ToString(reader[ObjectNameOrdinal]); var userTableNamespaceBuilder = new StringBuilder(schemaName.Length + tableName.Length + 1); userTableNamespaceBuilder.Append(schemaName). Append(Constants.Dot). Append(tableName); var userTableNamespace = userTableNamespaceBuilder.ToString(); if (!userTables.ContainsKey(userTableNamespace)) { return; } var userTable = userTables[userTableNamespace]; if (userTable == null) { return; } var uniqueConstraintNamespaceBuilder = new StringBuilder(userTableNamespace.Length + objectName.Length + 1); uniqueConstraintNamespaceBuilder. Append(userTableNamespace). Append(Constants.Dot). Append(objectName); var uniqueConstraintNamespace = uniqueConstraintNamespaceBuilder.ToString(); var uniqueConstraint = userTable.UniqueConstraints[uniqueConstraintNamespace]; if (uniqueConstraint == null) { uniqueConstraint = new UniqueConstraint { UserTable = userTable, ObjectName = objectName, FileGroup = Convert.ToString(reader[FileGroupOrdinal]), IgnoreDupKey = Convert.ToBoolean(reader[IgnoreDupKeyOrdinal]), IsClustered = Convert.ToBoolean(reader[IsClusteredOrdinal]), FillFactor = Convert.ToInt32(reader[FillFactorOrdinal]), IsPadded = Convert.ToBoolean(reader[IsPaddedOrdinal]), IsDisabled = Convert.ToBoolean(reader[IsDisabledOrdinal]), AllowRowLocks = Convert.ToBoolean(reader[AllowRowLocksOrdinal]), AllowPageLocks = Convert.ToBoolean(reader[AllowPageLocksOrdinal]), IndexType = Convert.ToString(reader[IndexTypeOrdinal]) // TODO: Remove this if possible... check other index code logic for usage (Mysql has BTREE, FULLTEXT, etc..., SQL Server doesn't) }; userTable.UniqueConstraints.Add(uniqueConstraint); } var uniqueConstraintColumn = new UniqueConstraintColumn { UniqueConstraint = uniqueConstraint, ObjectName = Convert.ToString(reader[ColumnNameOrdinal]), IsDescendingKey = Convert.ToBoolean(reader[IsDescendingKeyOrdinal]), KeyOrdinal = Convert.ToInt32(reader[KeyOrdinalOrdinal]), PartitionOrdinal = Convert.ToInt32(reader[PartitionOrdinalOrdinal]) }; uniqueConstraint.UniqueConstraintColumns.Add(uniqueConstraintColumn); uniqueConstraintColumns.Add(uniqueConstraintColumn.Namespace, uniqueConstraintColumn); }