예제 #1
0
        /// <summary>
        /// Outputs statements for dropping tables.
        /// </summary>
        public static void Drop(StreamWriter writer, [NullGuard.AllowNull] PgSchema oldSchema, PgSchema newSchema, SearchPathHelper searchPathHelper)
        {
            if (oldSchema == null)
            {
                return;
            }

            var referencedTables = new Dictionary <string, List <PgTable> >();

            var dropedTables = new List <PgTable>();

            foreach (PgTable table in oldSchema.Tables)
            {
                if (!newSchema.ContainsTable(table.Name))
                {
                    searchPathHelper.OutputSearchPath(writer);
                    dropedTables.Add(table);

                    foreach (var constraint in table.Constraints)
                    {
                        var             regex           = new Regex(@"FOREIGN KEY.+REFERENCES (?<ReferencedTable>.+)\(.+\)");
                        MatchCollection matchCollection = regex.Matches(constraint.Definition);
                        if (matchCollection.Count > 0)
                        {
                            var referencedTable = matchCollection[0].Groups["ReferencedTable"].Value;

                            if (referencedTables.ContainsKey(referencedTable))
                            {
                                if (referencedTables.TryGetValue(referencedTable, out List <PgTable> tables))
                                {
                                    tables.Add(table);
                                }
                            }
                            else
                            {
                                referencedTables.Add(referencedTable, new List <PgTable>()
                                {
                                    table
                                });
                            }
                        }
                    }
                }
            }

            List <PgTable> dropableTables = null;

            while (dropableTables == null)
            {
                dropableTables = SortTablesByReferences(referencedTables, dropedTables);
            }

            foreach (PgTable table in dropableTables)
            {
                writer.WriteLine();
                writer.WriteLine(table.DropSQL);
            }
        }
예제 #2
0
 /// <summary>
 /// Outputs statements for creation of new tables.
 /// </summary>
 public static void Create(StreamWriter writer, [NullGuard.AllowNull] PgSchema oldSchema, PgSchema newSchema, SearchPathHelper searchPathHelper)
 {
     foreach (PgTable table in newSchema.Tables)
     {
         if (oldSchema == null || !oldSchema.ContainsTable(table.Name))
         {
             searchPathHelper.OutputSearchPath(writer);
             writer.WriteLine();
             writer.WriteLine(table.CreationSQL);
         }
     }
 }
예제 #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 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());
                }
            }
        }
예제 #5
0
        /// <summary>
        /// Outputs statements for altering tables.
        /// </summary>
        public static void Alter(StreamWriter writer, [NullGuard.AllowNull] PgSchema oldSchema, PgSchema newSchema, SearchPathHelper searchPathHelper)
        {
            foreach (PgTable newTable in newSchema.Tables)
            {
                if (oldSchema == null || !oldSchema.ContainsTable(newTable.Name))
                {
                    continue;
                }

                PgTable oldTable = oldSchema.GetTable(newTable.Name);
                UpdateTableColumns(writer, 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);
            }
        }
예제 #6
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);
            }
        }