/// <summary>
        /// Returns list of constraints that should be dropped.
        /// </summary>
        /// <param name="oldTable">Original table or null.</param>
        /// <param name="newTable">New table or null.</param>
        /// <param name="primaryKey">Determines whether primary keys should be processed or any other constraints should be processed.</param>
        /// <returns>List of constraints that should be dropped.</returns>
        private static List <PgConstraint> GetDropConstraints([NullGuard.AllowNull] PgTable oldTable, [NullGuard.AllowNull] PgTable newTable, bool primaryKey)
        {
            // todo db Constraints that are depending on a removed field should not be added to drop because they are already removed.
            var constraints        = new List <PgConstraint>();
            var renamedConstraints = GetRenameConstraints(oldTable, newTable);

            if (newTable != null && oldTable != null)
            {
                foreach (var oldConstraint in oldTable.Constraints)
                {
                    // we don't have to drop this constraint because its renamed
                    if (renamedConstraints.ContainsKey(oldConstraint))
                    {
                        continue;
                    }

                    if (oldConstraint.PrimaryKeyConstraint == primaryKey &&
                        (!newTable.ContainsConstraint(oldConstraint.Name) || !newTable.GetConstraint(oldConstraint.Name).Equals(oldConstraint)))
                    {
                        constraints.Add(oldConstraint);
                    }
                }
            }

            return(constraints);
        }
Esempio n. 2
0
        private static IEnumerable <PgConstraint> GetDropConstraints(PgTable oldTable, PgTable newTable, bool primaryKey)
        {
            var list = new List <PgConstraint>();

            if (newTable == null || oldTable == null)
            {
                return(list);
            }

            list.AddRange(oldTable.Constraints
                          .Where(c => c.IsPrimaryKeyConstraint() == primaryKey &&
                                 (!newTable.ContainsConstraint(c.Name) ||
                                  !newTable.GetConstraint(c.Name).Equals(c))));

            return(list);
        }
Esempio n. 3
0
        private static List <PgConstraint> GetNewConstraints(PgTable oldTable, PgTable newTable, bool primaryKey)
        {
            var list = new List <PgConstraint>();

            if (newTable == null)
            {
                return(list);
            }

            if (oldTable == null)
            {
                list.AddRange(newTable.Constraints.Where(c => c.IsPrimaryKeyConstraint() == primaryKey));
            }
            else
            {
                list.AddRange(newTable.Constraints
                              .Where(c => c.IsPrimaryKeyConstraint() == primaryKey &&
                                     (!oldTable.ContainsConstraint(c.Name) ||
                                      !oldTable.GetConstraint(c.Name).Equals(c))));
            }

            return(list);
        }
        /// <summary>
        /// Returns list of constraints that should be added.
        /// </summary>
        private static List <PgConstraint> GetNewConstraints([NullGuard.AllowNull] PgTable oldTable, [NullGuard.AllowNull] PgTable newTable, bool primaryKey, bool foreignKey)
        {
            var constraints        = new List <PgConstraint>();
            var renamedConstraints = GetRenameConstraints(oldTable, newTable);

            // no new constraints
            if (newTable == null)
            {
                return(constraints);
            }

            if (oldTable == null)
            {
                // all constraints are new
                foreach (var newConstraint in newTable.Constraints)
                {
                    if (newConstraint.PrimaryKeyConstraint == primaryKey && newConstraint.ForeignKeyConstraint == foreignKey)
                    {
                        constraints.Add(newConstraint);
                    }
                }
            }
            else
            {
                foreach (var newConstraint in newTable.Constraints)
                {
                    if ((newConstraint.PrimaryKeyConstraint == primaryKey && newConstraint.ForeignKeyConstraint == foreignKey) &&
                        (!oldTable.ContainsConstraint(newConstraint.Name) || !oldTable.GetConstraint(newConstraint.Name).Equals(newConstraint)))
                    {
                        constraints.Add(newConstraint);
                    }
                }
            }

            return(constraints);
        }