50
56
final PgDiffArguments arguments, final InputStream oldInputStream,
51
57
final InputStream newInputStream) {
52
58
diffDatabaseSchemas(writer, arguments,
53
PgDumpLoader.loadDatabaseSchema(
54
oldInputStream, arguments.getInCharsetName()),
55
PgDumpLoader.loadDatabaseSchema(
56
newInputStream, arguments.getInCharsetName()));
59
PgDumpLoader.loadDatabaseSchema(oldInputStream,
60
arguments.getInCharsetName(),
61
arguments.isOutputIgnoredStatements()),
62
PgDumpLoader.loadDatabaseSchema(newInputStream,
63
arguments.getInCharsetName(),
64
arguments.isOutputIgnoredStatements()));
60
68
* Creates new schemas (not the objects inside the schemas).
62
70
* @param writer writer the output should be written to
63
* @param arguments object containing arguments settings
64
71
* @param oldDatabase original database schema
65
72
* @param newDatabase new database schema
67
74
private static void createNewSchemas(final PrintWriter writer,
68
final PgDiffArguments arguments, final PgDatabase oldDatabase,
69
final PgDatabase newDatabase) {
75
final PgDatabase oldDatabase, final PgDatabase newDatabase) {
70
76
for (final PgSchema newSchema : newDatabase.getSchemas()) {
71
77
if (oldDatabase.getSchema(newSchema.getName()) == null) {
73
writer.println(newSchema.getCreationSQL(
74
arguments.isQuoteNames()));
79
writer.println(newSchema.getCreationSQL());
91
96
writer.println("START TRANSACTION;");
94
dropOldSchemas(writer, arguments, oldDatabase, newDatabase);
95
createNewSchemas(writer, arguments, oldDatabase, newDatabase);
99
dropOldSchemas(writer, oldDatabase, newDatabase);
100
createNewSchemas(writer, oldDatabase, newDatabase);
96
101
updateSchemas(writer, arguments, oldDatabase, newDatabase);
98
103
if (arguments.isAddTransaction()) {
100
105
writer.println("COMMIT TRANSACTION;");
108
if (arguments.isOutputIgnoredStatements()) {
109
if (!oldDatabase.getIgnoredStatements().isEmpty()) {
112
writer.println(Resources.getString(
113
"OriginalDatabaseIgnoredStatements"));
115
for (final String statement :
116
oldDatabase.getIgnoredStatements()) {
118
writer.println(statement);
121
writer.println("*/");
124
if (!newDatabase.getIgnoredStatements().isEmpty()) {
128
Resources.getString("NewDatabaseIgnoredStatements"));
130
for (final String statement :
131
newDatabase.getIgnoredStatements()) {
133
writer.println(statement);
136
writer.println("*/");
105
142
* Drops old schemas that do not exist anymore.
107
144
* @param writer writer the output should be written to
108
* @param arguments object containing arguments settings
109
145
* @param oldDatabase original database schema
110
146
* @param newDatabase new database schema
112
148
private static void dropOldSchemas(final PrintWriter writer,
113
final PgDiffArguments arguments, final PgDatabase oldDatabase,
114
final PgDatabase newDatabase) {
149
final PgDatabase oldDatabase, final PgDatabase newDatabase) {
115
150
for (final PgSchema oldSchema : oldDatabase.getSchemas()) {
116
151
if (newDatabase.getSchema(oldSchema.getName()) == null) {
117
152
writer.println();
118
153
writer.println("DROP SCHEMA "
119
+ PgDiffUtils.getQuotedName(oldSchema.getName(),
120
arguments.isQuoteNames()) + " CASCADE;");
154
+ PgDiffUtils.getQuotedName(oldSchema.getName())
133
168
private static void updateSchemas(final PrintWriter writer,
134
169
final PgDiffArguments arguments, final PgDatabase oldDatabase,
135
170
final PgDatabase newDatabase) {
136
final boolean setSearchPath = (newDatabase.getSchemas().size() > 1)
137
|| !newDatabase.getSchemas().
138
get(0).getName().equals("public");
171
final boolean setSearchPath = newDatabase.getSchemas().size() > 1
172
|| !newDatabase.getSchemas().get(0).getName().equals("public");
140
174
for (final PgSchema newSchema : newDatabase.getSchemas()) {
175
final SearchPathHelper searchPathHelper;
141
177
if (setSearchPath) {
143
writer.println("SET search_path = "
144
+ PgDiffUtils.getQuotedName(newSchema.getName(),
145
arguments.isQuoteNames()) + ", pg_catalog;");
178
searchPathHelper = new SearchPathHelper("SET search_path = "
179
+ PgDiffUtils.getQuotedName(newSchema.getName(), true)
182
searchPathHelper = new SearchPathHelper(null);
148
185
final PgSchema oldSchema =
149
186
oldDatabase.getSchema(newSchema.getName());
188
PgDiffTriggers.dropTriggers(
189
writer, oldSchema, newSchema, searchPathHelper);
151
190
PgDiffFunctions.dropFunctions(
152
writer, arguments, oldSchema, newSchema);
153
PgDiffTriggers.dropTriggers(
154
writer, arguments, oldSchema, newSchema);
191
writer, arguments, oldSchema, newSchema, searchPathHelper);
155
192
PgDiffFunctions.createFunctions(
156
writer, arguments, oldSchema, newSchema);
157
PgDiffViews.dropViews(writer, arguments, oldSchema, newSchema);
158
PgDiffConstraints.dropConstraints(
159
writer, arguments, oldSchema, newSchema, true);
160
PgDiffConstraints.dropConstraints(
161
writer, arguments, oldSchema, newSchema, false);
162
PgDiffIndexes.dropIndexes(writer, arguments, oldSchema, newSchema);
163
PgDiffTables.dropClusters(writer, arguments, oldSchema, newSchema);
164
PgDiffTables.dropTables(writer, arguments, oldSchema, newSchema);
193
writer, arguments, oldSchema, newSchema, searchPathHelper);
194
PgDiffViews.dropViews(
195
writer, oldSchema, newSchema, searchPathHelper);
196
PgDiffConstraints.dropConstraints(
197
writer, oldSchema, newSchema, true, searchPathHelper);
198
PgDiffConstraints.dropConstraints(
199
writer, oldSchema, newSchema, false, searchPathHelper);
200
PgDiffIndexes.dropIndexes(
201
writer, oldSchema, newSchema, searchPathHelper);
202
PgDiffTables.dropClusters(
203
writer, oldSchema, newSchema, searchPathHelper);
204
PgDiffTables.dropTables(
205
writer, oldSchema, newSchema, searchPathHelper);
165
206
PgDiffSequences.dropSequences(
166
writer, arguments, oldSchema, newSchema);
207
writer, oldSchema, newSchema, searchPathHelper);
168
209
PgDiffSequences.createSequences(
169
writer, arguments, oldSchema, newSchema);
210
writer, oldSchema, newSchema, searchPathHelper);
170
211
PgDiffSequences.alterSequences(
171
writer, arguments, oldSchema, newSchema);
172
PgDiffTables.createTables(writer, arguments, oldSchema, newSchema);
173
PgDiffTables.alterTables(writer, arguments, oldSchema, newSchema);
174
PgDiffConstraints.createConstraints(
175
writer, arguments, oldSchema, newSchema, true);
176
PgDiffConstraints.createConstraints(
177
writer, arguments, oldSchema, newSchema, false);
212
writer, arguments, oldSchema, newSchema, searchPathHelper);
213
PgDiffTables.createTables(
214
writer, oldSchema, newSchema, searchPathHelper);
215
PgDiffTables.alterTables(
216
writer, arguments, oldSchema, newSchema, searchPathHelper);
217
PgDiffConstraints.createConstraints(
218
writer, oldSchema, newSchema, true, searchPathHelper);
219
PgDiffConstraints.createConstraints(
220
writer, oldSchema, newSchema, false, searchPathHelper);
178
221
PgDiffIndexes.createIndexes(
179
writer, arguments, oldSchema, newSchema);
222
writer, oldSchema, newSchema, searchPathHelper);
180
223
PgDiffTables.createClusters(
181
writer, arguments, oldSchema, newSchema);
224
writer, oldSchema, newSchema, searchPathHelper);
182
225
PgDiffTriggers.createTriggers(
183
writer, arguments, oldSchema, newSchema);
184
PgDiffViews.createViews(writer, arguments, oldSchema, newSchema);
226
writer, oldSchema, newSchema, searchPathHelper);
227
PgDiffViews.createViews(
228
writer, oldSchema, newSchema, searchPathHelper);
229
PgDiffViews.alterViews(
230
writer, oldSchema, newSchema, searchPathHelper);