/// <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); } }
/// <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); } } }
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()); } } }
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()); } } }
/// <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); } }
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); } }