16
23
* Creates a new instance of PgDiffViews.
18
25
private PgDiffViews() {
23
* Outputs commands for creation of views.
29
* Outputs statements for creation of views.
25
31
* @param writer writer the output should be written to
26
* @param arguments object containing arguments settings
27
32
* @param oldSchema original schema
28
33
* @param newSchema new schema
30
35
public static void createViews(final PrintWriter writer,
31
final PgDiffArguments arguments, final PgSchema oldSchema,
32
final PgSchema newSchema) {
36
final PgSchema oldSchema, final PgSchema newSchema) {
33
37
for (final PgView newView : newSchema.getViews()) {
34
38
if (oldSchema == null
35
39
|| !oldSchema.containsView(newView.getName())
37
41
oldSchema.getView(newView.getName()), newView)) {
40
newView.getCreationSQL(arguments.isQuoteNames()));
43
writer.println(newView.getCreationSQL());
46
* Outputs commands for dropping views.
49
* Outputs statements for dropping views.
48
51
* @param writer writer the output should be written to
49
* @param arguments object containing arguments settings
50
52
* @param oldSchema original schema
51
53
* @param newSchema new schema
53
55
public static void dropViews(final PrintWriter writer,
54
final PgDiffArguments arguments, final PgSchema oldSchema,
55
final PgSchema newSchema) {
56
final PgSchema oldSchema, final PgSchema newSchema) {
56
57
if (oldSchema != null) {
57
58
for (final PgView oldView : oldSchema.getViews()) {
58
59
final PgView newView = newSchema.getView(oldView.getName());
60
if ((newView == null) || isViewModified(oldView, newView)) {
61
if (newView == null || isViewModified(oldView, newView)) {
63
oldView.getDropSQL(arguments.isQuoteNames()));
63
writer.println(oldView.getDropSQL());
78
78
private static boolean isViewModified(final PgView oldView,
79
79
final PgView newView) {
80
final String oldViewColumnNames;
82
if (oldView.getColumnNames() == null) {
83
oldViewColumnNames = "";
85
oldViewColumnNames = oldView.getColumnNames();
88
final String newViewColumnNames;
90
if (newView.getColumnNames() == null) {
91
newViewColumnNames = "";
93
newViewColumnNames = newView.getColumnNames();
96
return (!oldViewColumnNames.equals(newViewColumnNames)
97
|| !oldView.getQuery().equals(newView.getQuery()));
80
final String[] oldViewColumnNames;
82
if (oldView.getColumnNames() == null
83
|| oldView.getColumnNames().isEmpty()) {
84
oldViewColumnNames = null;
86
oldViewColumnNames = oldView.getColumnNames().toArray(
87
new String[oldView.getColumnNames().size()]);
90
final String[] newViewColumnNames;
92
if (newView.getColumnNames() == null
93
|| newView.getColumnNames().isEmpty()) {
94
newViewColumnNames = null;
96
newViewColumnNames = newView.getColumnNames().toArray(
97
new String[newView.getColumnNames().size()]);
100
if (oldViewColumnNames == null && newViewColumnNames == null) {
101
return !oldView.getQuery().trim().equals(newView.getQuery().trim());
103
return !Arrays.equals(oldViewColumnNames, newViewColumnNames);
108
* Outputs statements for altering view default values.
110
* @param writer writer
111
* @param oldSchema old schema
112
* @param newSchema new schema
114
public static void alterViews(final PrintWriter writer,
115
final PgSchema oldSchema, final PgSchema newSchema) {
116
if (oldSchema != null) {
117
for (final PgView oldView : oldSchema.getViews()) {
118
final PgView newView = newSchema.getView(oldView.getName());
120
if (oldView != null && newView != null) {
121
diffDefaultValues(writer, oldView, newView);
128
* Diffs default values in views.
130
* @param writer writer
131
* @param oldView old view
132
* @param newView new view
134
private static void diffDefaultValues(final PrintWriter writer,
135
final PgView oldView, final PgView newView) {
136
final List<PgView.DefaultValue> oldValues =
137
oldView.getDefaultValues();
138
final List<PgView.DefaultValue> newValues =
139
newView.getDefaultValues();
141
// modify defaults that are in old view
142
for (final PgView.DefaultValue oldValue : oldValues) {
143
boolean found = false;
145
for (final PgView.DefaultValue newValue : newValues) {
146
if (oldValue.getColumnName().equals(newValue.getColumnName())
147
&& !oldValue.getDefaultValue().equals(
148
newValue.getDefaultValue())) {
152
writer.print("ALTER VIEW ");
153
writer.print(PgDiffUtils.getQuotedName(newView.getName()));
154
writer.print(" ALTER COLUMN ");
155
writer.print(PgDiffUtils.getQuotedName(
156
newValue.getColumnName()));
157
writer.print(" SET DEFAULT ");
158
writer.print(newValue.getDefaultValue());
167
writer.print("ALTER VIEW ");
168
writer.print(PgDiffUtils.getQuotedName(newView.getName()));
169
writer.print(" ALTER COLUMN ");
170
writer.print(PgDiffUtils.getQuotedName(
171
oldValue.getColumnName()));
172
writer.print(" DROP DEFAULT;");
177
for (final PgView.DefaultValue newValue : newValues) {
178
boolean found = false;
180
for (final PgView.DefaultValue oldValue : oldValues) {
181
if (newValue.getColumnName().equals(oldValue.getColumnName())) {
192
writer.print("ALTER VIEW ");
193
writer.print(PgDiffUtils.getQuotedName(newView.getName()));
194
writer.print(" ALTER COLUMN ");
195
writer.print(PgDiffUtils.getQuotedName(newValue.getColumnName()));
196
writer.print(" SET DEFAULT ");
197
writer.print(newValue.getDefaultValue());