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