コード例 #1
0
        /// <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);
        }
コード例 #2
0
 /// <summary>
 /// Shallow Clear...
 /// </summary>
 /// <param name="uniqueConstraint">The unique contraint to shallow clear.</param>
 public static void Clear(UniqueConstraint uniqueConstraint)
 {
     uniqueConstraint.UniqueConstraintColumns.Clear();
 }
コード例 #3
0
 public static void RemoveUniqueConstraintColumn(UniqueConstraint uniqueConstraint, UniqueConstraintColumn uniqueConstraintColumn)
 {
     uniqueConstraint.UniqueConstraintColumns.Remove(uniqueConstraintColumn.Namespace);
 }
コード例 #4
0
 public static void RemoveUniqueConstraintColumn(UniqueConstraint uniqueConstraint, string objectNamespace)
 {
     uniqueConstraint.UniqueConstraintColumns.Remove(objectNamespace);
 }
コード例 #5
0
        //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);
        }
コード例 #6
0
		public UniqueConstraintColumn(UniqueConstraint uniqueConstraint, string objectName)
        {
            Init(this, uniqueConstraint, objectName);
        }
コード例 #7
0
        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);
        }