2
* $Id: PgDiffTriggers.java 80 2007-09-01 20:25:45Z fordfrog $
4
package cz.startnet.utils.pgdiff;
6
import cz.startnet.utils.pgdiff.schema.PgSchema;
7
import cz.startnet.utils.pgdiff.schema.PgTable;
8
import cz.startnet.utils.pgdiff.schema.PgTrigger;
10
import java.io.PrintWriter;
12
import java.util.ArrayList;
13
import java.util.List;
20
* @version $Id: PgDiffTriggers.java 80 2007-09-01 20:25:45Z fordfrog $
22
public class PgDiffTriggers {
24
* Creates a new instance of PgDiffTriggers.
26
private PgDiffTriggers() {
31
* Outputs commands for differences in triggers.
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 diffTriggers(
39
final PrintWriter writer,
40
final PgDiffArguments arguments,
41
final PgSchema oldSchema,
42
final PgSchema newSchema) {
43
for (PgTable newTable : newSchema.getTables()) {
44
final PgTable oldTable;
46
if (oldSchema == null) {
49
oldTable = oldSchema.getTable(newTable.getName());
52
// Drop triggers that no more exist or are modified
53
for (PgTrigger trigger : getDropTriggers(oldTable, newTable)) {
55
writer.println(trigger.getDropSQL(arguments.isQuoteNames()));
59
for (PgTrigger trigger : getNewTriggers(oldTable, newTable)) {
62
trigger.getCreationSQL(arguments.isQuoteNames()));
68
* Returns list of triggers that should be dropped.
70
* @param oldTable original table
71
* @param newTable new table
73
* @return list of triggers that should be dropped
75
private static List<PgTrigger> getDropTriggers(
76
final PgTable oldTable,
77
final PgTable newTable) {
78
final List<PgTrigger> list = new ArrayList<PgTrigger>();
80
if ((newTable != null) && (oldTable != null)) {
81
final List<PgTrigger> newTriggers = newTable.getTriggers();
83
for (final PgTrigger oldTrigger : oldTable.getTriggers()) {
84
if (!newTriggers.contains(oldTrigger)) {
94
* Returns list of triggers that should be added.
96
* @param oldTable original table
97
* @param newTable new table
99
* @return list of triggers that should be added
101
private static List<PgTrigger> getNewTriggers(
102
final PgTable oldTable,
103
final PgTable newTable) {
104
final List<PgTrigger> list = new ArrayList<PgTrigger>();
106
if (newTable != null) {
107
if (oldTable == null) {
108
list.addAll(newTable.getTriggers());
110
for (PgTrigger newTrigger : newTable.getTriggers()) {
111
if (!oldTable.getTriggers().contains(newTrigger)) {
112
list.add(newTrigger);