31
* Outputs commands for differences in indexes.
33
* @param writer writer the output should be written to
34
* @param arguments object containing arguments settings
35
* @param oldSchema original schema
36
* @param newSchema new schema
38
public static void diffIndexes(
39
final PrintWriter writer,
40
final PgDiffArguments arguments,
41
final PgSchema oldSchema,
42
final PgSchema newSchema) {
43
for (PgTable newTable : newSchema.getTables()) {
27
* Outputs commands for creation of new indexes.
29
* @param writer writer the output should be written to
30
* @param arguments object containing arguments settings
31
* @param oldSchema original schema
32
* @param newSchema new schema
34
public static void createIndexes(final PrintWriter writer,
35
final PgDiffArguments arguments, final PgSchema oldSchema,
36
final PgSchema newSchema) {
37
for (final PgTable newTable : newSchema.getTables()) {
38
final String newTableName = newTable.getName();
39
final PgTable oldTable;
41
if (oldSchema == null) {
44
oldTable = oldSchema.getTable(newTableName);
48
if (oldSchema == null) {
49
for (PgIndex index : newTable.getIndexes()) {
52
index.getCreationSQL(arguments.isQuoteNames()));
55
for (PgIndex index : getNewIndexes(
56
oldSchema.getTable(newTableName), newTable)) {
59
index.getCreationSQL(arguments.isQuoteNames()));
66
* Outputs commands for dropping indexes that exist no more.
68
* @param writer writer the output should be written to
69
* @param arguments object containing arguments settings
70
* @param oldSchema original schema
71
* @param newSchema new schema
73
public static void dropIndexes(final PrintWriter writer,
74
final PgDiffArguments arguments, final PgSchema oldSchema,
75
final PgSchema newSchema) {
76
for (final PgTable newTable : newSchema.getTables()) {
44
77
final String newTableName = newTable.getName();
45
78
final PgTable oldTable;
53
86
// Drop indexes that do not exist in new schema or are modified
54
for (PgIndex index : getDropIndexes(oldTable, newTable)) {
87
for (final PgIndex index : getDropIndexes(oldTable, newTable)) {
56
89
writer.println(index.getDropSQL(arguments.isQuoteNames()));
60
if (oldSchema == null) {
61
for (PgIndex index : newTable.getIndexes()) {
64
index.getCreationSQL(arguments.isQuoteNames()));
67
for (PgIndex index : getNewIndexes(
68
oldSchema.getTable(newTableName),
72
index.getCreationSQL(arguments.isQuoteNames()));
86
102
* @todo Indexes that are depending on a removed field should not be added
87
103
* to drop because they are already removed.
89
private static List<PgIndex> getDropIndexes(
90
final PgTable oldTable,
105
private static List<PgIndex> getDropIndexes(final PgTable oldTable,
91
106
final PgTable newTable) {
92
107
final List<PgIndex> list = new ArrayList<PgIndex>();
94
109
if ((newTable != null) && (oldTable != null)) {
95
110
for (final PgIndex index : oldTable.getIndexes()) {
96
if (!newTable.containsIndex(index.getName()) || !newTable.
97
getIndex(index.getName()).equals(index)) {
111
if (!newTable.containsIndex(index.getName())
112
|| !newTable.getIndex(index.getName()).equals(index)) {
112
127
* @return list of indexes that should be added
114
private static List<PgIndex> getNewIndexes(
115
final PgTable oldTable,
129
private static List<PgIndex> getNewIndexes(final PgTable oldTable,
116
130
final PgTable newTable) {
117
131
final List<PgIndex> list = new ArrayList<PgIndex>();
125
139
for (final PgIndex index : newTable.getIndexes()) {
126
if (!oldTable.containsIndex(index.getName()) || !oldTable.
127
getIndex(index.getName()).equals(
140
if (!oldTable.containsIndex(index.getName())
141
|| !oldTable.getIndex(index.getName()).