2
* $Id: PgDiff.java 91 2008-08-01 17:35:19Z fordfrog $
4
package cz.startnet.utils.pgdiff;
6
import cz.startnet.utils.pgdiff.loader.PgDumpLoader;
7
import cz.startnet.utils.pgdiff.schema.PgDatabase;
8
import cz.startnet.utils.pgdiff.schema.PgSchema;
10
import java.io.InputStream;
11
import java.io.PrintWriter;
14
* Creates diff of two database schemas.
17
* @version $Id: PgDiff.java 91 2008-08-01 17:35:19Z fordfrog $
22
* Creates a new instance of PgDiff.
29
* Creates diff on the two database schemas.
31
* @param writer writer the output should be written to
32
* @param arguments object containing arguments settings
34
public static void createDiff(
35
final PrintWriter writer,
36
final PgDiffArguments arguments) {
40
PgDumpLoader.loadDatabaseSchema(arguments.getOldDumpFile(),
41
arguments.getInCharsetName()),
42
PgDumpLoader.loadDatabaseSchema(arguments.getNewDumpFile(),
43
arguments.getInCharsetName()));
47
* Creates diff on the two database schemas.
49
* @param writer writer the output should be written to
50
* @param arguments object containing arguments settings
51
* @param oldInputStream input stream of file containing dump of the
53
* @param newInputStream input stream of file containing dump of the new
56
public static void createDiff(
57
final PrintWriter writer,
58
final PgDiffArguments arguments,
59
final InputStream oldInputStream,
60
final InputStream newInputStream) {
64
PgDumpLoader.loadDatabaseSchema(oldInputStream, arguments.
66
PgDumpLoader.loadDatabaseSchema(newInputStream, arguments.
71
* Creates new schemas (not the objects inside the schemas).
73
* @param writer writer the output should be written to
74
* @param arguments object containing arguments settings
75
* @param oldDatabase original database schema
76
* @param newDatabase new database schema
78
private static void createNewSchemas(
79
final PrintWriter writer,
80
final PgDiffArguments arguments,
81
final PgDatabase oldDatabase,
82
final PgDatabase newDatabase) {
83
for (PgSchema newSchema : newDatabase.getSchemas()) {
84
if (oldDatabase.getSchema(newSchema.getName()) == null) {
87
newSchema.getCreationSQL(arguments.isQuoteNames()));
93
* Creates diff from comparison of two database schemas.
95
* @param writer writer the output should be written to
96
* @param arguments object containing arguments settings
97
* @param oldDatabase original database schema
98
* @param newDatabase new database schema
100
private static void diffDatabaseSchemas(
101
final PrintWriter writer,
102
final PgDiffArguments arguments,
103
final PgDatabase oldDatabase,
104
final PgDatabase newDatabase) {
105
if (arguments.isAddTransaction()) {
106
writer.println("START TRANSACTION;");
109
dropOldSchemas(writer, arguments, oldDatabase, newDatabase);
110
createNewSchemas(writer, arguments, oldDatabase, newDatabase);
111
updateSchemas(writer, arguments, oldDatabase, newDatabase);
113
if (arguments.isAddTransaction()) {
115
writer.println("COMMIT TRANSACTION;");
120
* Drops old schemas that do not exist anymore.
122
* @param writer writer the output should be written to
123
* @param arguments object containing arguments settings
124
* @param oldDatabase original database schema
125
* @param newDatabase new database schema
127
private static void dropOldSchemas(
128
final PrintWriter writer,
129
final PgDiffArguments arguments,
130
final PgDatabase oldDatabase,
131
final PgDatabase newDatabase) {
132
for (PgSchema oldSchema : oldDatabase.getSchemas()) {
133
if (newDatabase.getSchema(oldSchema.getName()) == null) {
136
"DROP SCHEMA " + PgDiffUtils.getQuotedName(
138
arguments.isQuoteNames()) + " CASCADE;");
144
* Updates objects in schemas.
146
* @param writer writer the output should be written to
147
* @param arguments object containing arguments settings
148
* @param oldDatabase original database schema
149
* @param newDatabase new database schema
151
private static void updateSchemas(
152
final PrintWriter writer,
153
final PgDiffArguments arguments,
154
final PgDatabase oldDatabase,
155
final PgDatabase newDatabase) {
156
final boolean setSearchPath =
157
(newDatabase.getSchemas().size() > 1) || !newDatabase.getSchemas().
158
get(0).getName().equals("public");
160
for (PgSchema newSchema : newDatabase.getSchemas()) {
164
"SET search_path = " + PgDiffUtils.getQuotedName(
166
arguments.isQuoteNames()) + ", pg_catalog;");
169
final PgSchema oldSchema =
170
oldDatabase.getSchema(newSchema.getName());
171
PgDiffFunctions.diffFunctions(writer, arguments, oldSchema,
173
PgDiffViews.dropViews(writer, arguments, oldSchema, newSchema);
174
PgDiffSequences.diffSequences(
179
PgDiffTables.diffTables(writer, arguments, oldSchema, newSchema);
180
PgDiffConstraints.diffConstraints(
186
PgDiffConstraints.diffConstraints(
192
PgDiffIndexes.diffIndexes(writer, arguments, oldSchema, newSchema);
193
PgDiffTables.diffClusters(writer, arguments, oldSchema, newSchema);
194
PgDiffTriggers.diffTriggers(
199
PgDiffViews.createViews(writer, arguments, oldSchema, newSchema);