Пример #1
0
        public static void CreateIndexes(TextWriter writer, PgSchema oldSchema, PgSchema newSchema, SearchPathHelper searchPathHelper)
        {
            foreach (var newTable in newSchema.GetTables())
            {
                var newTableName = newTable.Name;

                // Add new indexes
                if (oldSchema == null)
                {
                    foreach (var index in newTable.GetIndexes())
                    {
                        searchPathHelper.OutputSearchPath(writer);
                        writer.WriteLine();
                        writer.WriteLine(index.GetCreationSql());
                    }
                }
                else
                {
                    foreach (var index in GetNewIndexes(
                                 oldSchema.GetTable(newTableName), newTable))
                    {
                        searchPathHelper.OutputSearchPath(writer);
                        writer.WriteLine();
                        writer.WriteLine(index.GetCreationSql());
                    }
                }
            }
        }
Пример #2
0
        public static void AlterComments(TextWriter writer, PgSchema oldSchema, PgSchema newSchema, SearchPathHelper searchPathHelper)
        {
            if (oldSchema == null)
            {
                return;
            }

            foreach (var oldTable in oldSchema.GetTables())
            {
                var newTable = newSchema.GetTable(oldTable.Name);

                if (newTable == null)
                {
                    continue;
                }

                foreach (var oldTrigger in oldTable.GetTriggers())
                {
                    var newTrigger =
                        newTable.GetTrigger(oldTrigger.Name);

                    if (newTrigger == null)
                    {
                        continue;
                    }

                    if (oldTrigger.Comment == null &&
                        newTrigger.Comment != null ||
                        oldTrigger.Comment != null &&
                        newTrigger.Comment != null &&
                        !oldTrigger.Comment.Equals(
                            newTrigger.Comment))
                    {
                        searchPathHelper.OutputSearchPath(writer);
                        writer.WriteLine();
                        writer.Write("COMMENT ON TRIGGER ");
                        writer.Write(PgDiffUtils.GetQuotedName(newTrigger.Name));
                        writer.Write(" ON ");
                        writer.Write(PgDiffUtils.GetQuotedName(newTrigger.TableName));
                        writer.Write(" IS ");
                        writer.Write(newTrigger.Comment);
                        writer.WriteLine(';');
                    }
                    else if (oldTrigger.Comment != null && newTrigger.Comment == null)
                    {
                        searchPathHelper.OutputSearchPath(writer);
                        writer.WriteLine();
                        writer.Write("COMMENT ON TRIGGER ");
                        writer.Write(PgDiffUtils.GetQuotedName(newTrigger.Name));
                        writer.Write(" ON ");
                        writer.Write(PgDiffUtils.GetQuotedName(newTrigger.TableName));
                        writer.WriteLine(" IS NULL;");
                    }
                }
            }
        }
Пример #3
0
 public static void CreateTables(TextWriter writer, PgSchema oldSchema, PgSchema newSchema, SearchPathHelper searchPathHelper)
 {
     foreach (var table in newSchema.GetTables())
     {
         if (oldSchema == null ||
             !oldSchema.ContainsTable(table.Name))
         {
             searchPathHelper.OutputSearchPath(writer);
             writer.WriteLine();
             writer.WriteLine(table.GetCreationSql());
         }
     }
 }
Пример #4
0
        public static void DropTriggers(TextWriter writer, PgSchema oldSchema, PgSchema newSchema, SearchPathHelper searchPathHelper)
        {
            foreach (var newTable in newSchema.GetTables())
            {
                var oldTable = oldSchema?.GetTable(newTable.Name);

                // Drop triggers that no more exist or are modified
                foreach (var trigger in GetDropTriggers(oldTable, newTable))
                {
                    searchPathHelper.OutputSearchPath(writer);
                    writer.WriteLine();
                    writer.WriteLine(trigger.GetDropSql());
                }
            }
        }
Пример #5
0
        public static void CreateTriggers(TextWriter writer, PgSchema oldSchema, PgSchema newSchema, SearchPathHelper searchPathHelper)
        {
            foreach (var newTable in newSchema.GetTables())
            {
                var oldTable = oldSchema?.GetTable(newTable.Name);

                // Add new triggers
                foreach (var trigger in GetNewTriggers(oldTable, newTable))
                {
                    searchPathHelper.OutputSearchPath(writer);
                    writer.WriteLine();
                    writer.WriteLine(trigger.GetCreationSql());
                }
            }
        }
Пример #6
0
        public static void DropConstraints(TextWriter writer, PgSchema oldSchema, PgSchema newSchema, bool primaryKey, SearchPathHelper searchPathHelper)
        {
            foreach (var newTable in newSchema.GetTables())
            {
                var oldTable = oldSchema?.GetTable(newTable.Name);

                // Drop constraints that no more exist or are modified
                foreach (var constraint in GetDropConstraints(oldTable, newTable, primaryKey))
                {
                    searchPathHelper.OutputSearchPath(writer);
                    writer.WriteLine();
                    writer.WriteLine(constraint.GetDropSql());
                }
            }
        }
Пример #7
0
        public static void CreateConstraints(TextWriter writer, PgSchema oldSchema, PgSchema newSchema, bool primaryKey, SearchPathHelper searchPathHelper)
        {
            foreach (var newTable in newSchema.GetTables())
            {
                var oldTable = oldSchema?.GetTable(newTable.Name);

                // Add new constraints
                foreach (var constraint in GetNewConstraints(oldTable, newTable, primaryKey))
                {
                    searchPathHelper.OutputSearchPath(writer);
                    writer.WriteLine();
                    writer.WriteLine(constraint.GetCreationSql());
                }
            }
        }
Пример #8
0
        public static void DropIndexes(TextWriter writer, PgSchema oldSchema, PgSchema newSchema, SearchPathHelper searchPathHelper)
        {
            foreach (var newTable in newSchema.GetTables())
            {
                var newTableName = newTable.Name;
                var oldTable     = oldSchema?.GetTable(newTableName);

                // Drop indexes that do not exist in new schema or are modified
                foreach (var index in GetDropIndexes(oldTable, newTable))
                {
                    searchPathHelper.OutputSearchPath(writer);
                    writer.WriteLine();
                    writer.WriteLine(index.GetDropSql());
                }
            }
        }
Пример #9
0
        public static void DropTables(TextWriter writer, PgSchema oldSchema, PgSchema newSchema, SearchPathHelper searchPathHelper)
        {
            if (oldSchema == null)
            {
                return;
            }

            foreach (var table in oldSchema.GetTables())
            {
                if (!newSchema.ContainsTable(table.Name))
                {
                    searchPathHelper.OutputSearchPath(writer);
                    writer.WriteLine();
                    writer.WriteLine(table.GetDropSql());
                }
            }
        }
Пример #10
0
        public static void DropClusters(TextWriter writer, PgSchema oldSchema, PgSchema newSchema, SearchPathHelper searchPathHelper)
        {
            foreach (var newTable in newSchema.GetTables())
            {
                var oldTable = oldSchema?.GetTable(newTable.Name);

                var oldCluster = oldTable?.ClusterIndexName;

                var newCluster = newTable.ClusterIndexName;

                if (oldCluster != null && newCluster == null && newTable.ContainsIndex(oldCluster))
                {
                    searchPathHelper.OutputSearchPath(writer);
                    writer.WriteLine();
                    writer.Write("ALTER TABLE ");
                    writer.Write(PgDiffUtils.GetQuotedName(newTable.Name));
                    writer.WriteLine(" SET WITHOUT CLUSTER;");
                }
            }
        }
Пример #11
0
        public static void AlterTables(TextWriter writer, PgDiffArguments arguments,
                                       PgSchema oldSchema, PgSchema newSchema, SearchPathHelper searchPathHelper)
        {
            foreach (var newTable in newSchema.GetTables())
            {
                if (oldSchema == null ||
                    !oldSchema.ContainsTable(newTable.Name))
                {
                    continue;
                }

                var oldTable = oldSchema.GetTable(newTable.Name);
                UpdateTableColumns(writer, arguments, oldTable, newTable, searchPathHelper);
                CheckWithOids(writer, oldTable, newTable, searchPathHelper);
                CheckInherits(writer, oldTable, newTable, searchPathHelper);
                CheckTablespace(writer, oldTable, newTable, searchPathHelper);
                AddAlterStatistics(writer, oldTable, newTable, searchPathHelper);
                AddAlterStorage(writer, oldTable, newTable, searchPathHelper);
                AlterComments(writer, oldTable, newTable, searchPathHelper);
            }
        }
Пример #12
0
        public static void CreateClusters(TextWriter writer, PgSchema oldSchema, PgSchema newSchema, SearchPathHelper searchPathHelper)
        {
            foreach (var newTable in newSchema.GetTables())
            {
                var oldTable   = oldSchema?.GetTable(newTable.Name);
                var oldCluster = oldTable?.ClusterIndexName;

                var newCluster = newTable.ClusterIndexName;

                if (oldCluster == null && newCluster != null ||
                    oldCluster != null && newCluster != null &&
                    newCluster.CompareTo(oldCluster) != 0)
                {
                    searchPathHelper.OutputSearchPath(writer);
                    writer.WriteLine();
                    writer.Write("ALTER TABLE ");
                    writer.Write(PgDiffUtils.GetQuotedName(newTable.Name));
                    writer.Write(" CLUSTER ON ");
                    writer.Write(PgDiffUtils.GetQuotedName(newCluster));
                    writer.WriteLine(';');
                }
            }
        }
Пример #13
0
        public static void AlterComments(TextWriter writer, PgSchema oldSchema, PgSchema newSchema, SearchPathHelper searchPathHelper)
        {
            if (oldSchema == null)
            {
                return;
            }

            foreach (var oldTable in oldSchema.GetTables())
            {
                var newTable = newSchema.GetTable(oldTable.Name);

                if (newTable == null)
                {
                    continue;
                }

                foreach (var oldConstraint in oldTable.Constraints)
                {
                    var newConstraint =
                        newTable.GetConstraint(oldConstraint.Name);

                    if (newConstraint == null)
                    {
                        continue;
                    }

                    if (oldConstraint.Comment == null &&
                        newConstraint.Comment != null ||
                        oldConstraint.Comment != null &&
                        newConstraint.Comment != null &&
                        !oldConstraint.Comment.Equals(
                            newConstraint.Comment))
                    {
                        searchPathHelper.OutputSearchPath(writer);
                        writer.WriteLine();
                        writer.Write("COMMENT ON ");

                        if (newConstraint.IsPrimaryKeyConstraint())
                        {
                            writer.Write("INDEX ");
                            writer.Write(PgDiffUtils.GetQuotedName(newConstraint.Name));
                        }
                        else
                        {
                            writer.Write("CONSTRAINT ");
                            writer.Write(PgDiffUtils.GetQuotedName(newConstraint.Name));
                            writer.Write(" ON ");
                            writer.Write(PgDiffUtils.GetQuotedName(newConstraint.TableName));
                        }

                        writer.Write(" IS ");
                        writer.Write(newConstraint.Comment);
                        writer.WriteLine(';');
                    }
                    else if (oldConstraint.Comment != null && newConstraint.Comment == null)
                    {
                        searchPathHelper.OutputSearchPath(writer);
                        writer.WriteLine();
                        writer.Write("COMMENT ON ");

                        if (newConstraint.IsPrimaryKeyConstraint())
                        {
                            writer.Write("INDEX ");
                            writer.Write(PgDiffUtils.GetQuotedName(newConstraint.Name));
                        }
                        else
                        {
                            writer.Write("CONSTRAINT ");
                            writer.Write(PgDiffUtils.GetQuotedName(newConstraint.Name));
                            writer.Write(" ON ");
                            writer.Write(PgDiffUtils.GetQuotedName(newConstraint.TableName));
                        }

                        writer.WriteLine(" IS NULL;");
                    }
                }
            }
        }