~ubuntu-branches/ubuntu/raring/apgdiff/raring

« back to all changes in this revision

Viewing changes to src/main/java/cz/startnet/utils/pgdiff/schema/PgTrigger.java

  • Committer: Bazaar Package Importer
  • Author(s): Christoph Berg
  • Date: 2008-09-09 15:42:54 UTC
  • Revision ID: james.westby@ubuntu.com-20080909154254-458sv7ew1rczdal1
Tags: upstream-1.2
ImportĀ upstreamĀ versionĀ 1.2

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * $Id: PgTrigger.java 80 2007-09-01 20:25:45Z fordfrog $
 
3
 */
 
4
package cz.startnet.utils.pgdiff.schema;
 
5
 
 
6
import cz.startnet.utils.pgdiff.PgDiffUtils;
 
7
 
 
8
 
 
9
/**
 
10
 * Stores trigger information.
 
11
 *
 
12
 * @author fordfrog
 
13
 * @version $Id: PgTrigger.java 80 2007-09-01 20:25:45Z fordfrog $
 
14
 */
 
15
public class PgTrigger {
 
16
    /**
 
17
     * Function name and arguments that should be fired on the trigger.
 
18
     */
 
19
    private String function;
 
20
 
 
21
    /**
 
22
     * Name of the trigger.
 
23
     */
 
24
    private String name;
 
25
 
 
26
    /**
 
27
     * Name of the table the trigger is defined on.
 
28
     */
 
29
    private String tableName;
 
30
 
 
31
    /**
 
32
     * Whether the trigger should be fired BEFORE or AFTER action.
 
33
     * Default is before.
 
34
     */
 
35
    private boolean before = true;
 
36
 
 
37
    /**
 
38
     * Whether the trigger should be fired FOR EACH ROW or FOR EACH
 
39
     * STATEMENT. Default is FOR EACH STATEMENT.
 
40
     */
 
41
    private boolean forEachRow;
 
42
 
 
43
    /**
 
44
     * Whether the trigger should be fired on DELETE.
 
45
     */
 
46
    private boolean onDelete;
 
47
 
 
48
    /**
 
49
     * Whether the trigger should be fired on INSERT.
 
50
     */
 
51
    private boolean onInsert;
 
52
 
 
53
    /**
 
54
     * Whether the trigger should be fired on UPDATE.
 
55
     */
 
56
    private boolean onUpdate;
 
57
 
 
58
    /**
 
59
     * Setter for {@link #before}.
 
60
     *
 
61
     * @param before {@link #before}
 
62
     */
 
63
    public void setBefore(final boolean before) {
 
64
        this.before = before;
 
65
    }
 
66
 
 
67
    /**
 
68
     * Getter for {@link #before}.
 
69
     *
 
70
     * @return {@link #before}
 
71
     */
 
72
    public boolean isBefore() {
 
73
        return before;
 
74
    }
 
75
 
 
76
    /**
 
77
     * Creates and returns SQL for creation of trigger.
 
78
     *
 
79
     * @param quoteNames whether names should be quoted
 
80
     *
 
81
     * @return created SQL
 
82
     */
 
83
    public String getCreationSQL(final boolean quoteNames) {
 
84
        final StringBuilder sbDDL = new StringBuilder();
 
85
        sbDDL.append("CREATE TRIGGER ");
 
86
        sbDDL.append(PgDiffUtils.getQuotedName(getName(), quoteNames));
 
87
        sbDDL.append("\n\t");
 
88
        sbDDL.append(isBefore() ? "BEFORE" : "AFTER");
 
89
 
 
90
        boolean firstEvent = true;
 
91
 
 
92
        if (isOnInsert()) {
 
93
            sbDDL.append(" INSERT");
 
94
            firstEvent = false;
 
95
        }
 
96
 
 
97
        if (isOnUpdate()) {
 
98
            if (firstEvent) {
 
99
                firstEvent = false;
 
100
            } else {
 
101
                sbDDL.append(" OR");
 
102
            }
 
103
 
 
104
            sbDDL.append(" UPDATE");
 
105
        }
 
106
 
 
107
        if (isOnDelete()) {
 
108
            if (!firstEvent) {
 
109
                sbDDL.append(" OR");
 
110
            }
 
111
 
 
112
            sbDDL.append(" DELETE");
 
113
        }
 
114
 
 
115
        sbDDL.append(" ON ");
 
116
        sbDDL.append(PgDiffUtils.getQuotedName(getTableName(), quoteNames));
 
117
        sbDDL.append("\n\tFOR EACH ");
 
118
        sbDDL.append(isForEachRow() ? "ROW" : "STATEMENT");
 
119
        sbDDL.append("\n\tEXECUTE PROCEDURE ");
 
120
        sbDDL.append(getFunction());
 
121
        sbDDL.append(';');
 
122
 
 
123
        return sbDDL.toString();
 
124
    }
 
125
 
 
126
    /**
 
127
     * Creates and returns SQL for dropping the trigger.
 
128
     *
 
129
     * @param quoteNames whether names should be quoted
 
130
     *
 
131
     * @return created SQL
 
132
     */
 
133
    public String getDropSQL(final boolean quoteNames) {
 
134
        return "DROP TRIGGER "
 
135
        + PgDiffUtils.getQuotedName(getName(), quoteNames) + " ON "
 
136
        + PgDiffUtils.getQuotedName(getTableName(), quoteNames) + ";";
 
137
    }
 
138
 
 
139
    /**
 
140
     * Setter for {@link #forEachRow}.
 
141
     *
 
142
     * @param forEachRow {@link #forEachRow}
 
143
     */
 
144
    public void setForEachRow(final boolean forEachRow) {
 
145
        this.forEachRow = forEachRow;
 
146
    }
 
147
 
 
148
    /**
 
149
     * Getter for {@link #forEachRow}.
 
150
     *
 
151
     * @return {@link #forEachRow}
 
152
     */
 
153
    public boolean isForEachRow() {
 
154
        return forEachRow;
 
155
    }
 
156
 
 
157
    /**
 
158
     * Setter for {@link #function}.
 
159
     *
 
160
     * @param function {@link #function}
 
161
     */
 
162
    public void setFunction(final String function) {
 
163
        this.function = function;
 
164
    }
 
165
 
 
166
    /**
 
167
     * Getter for {@link #function}.
 
168
     *
 
169
     * @return {@link #function}
 
170
     */
 
171
    public String getFunction() {
 
172
        return function;
 
173
    }
 
174
 
 
175
    /**
 
176
     * Setter for {@link #name}.
 
177
     *
 
178
     * @param name {@link #name}
 
179
     */
 
180
    public void setName(final String name) {
 
181
        this.name = name;
 
182
    }
 
183
 
 
184
    /**
 
185
     * Getter for {@link #name}.
 
186
     *
 
187
     * @return {@link #name}
 
188
     */
 
189
    public String getName() {
 
190
        return name;
 
191
    }
 
192
 
 
193
    /**
 
194
     * Setter for {@link #onDelete}.
 
195
     *
 
196
     * @param onDelete {@link #onDelete}
 
197
     */
 
198
    public void setOnDelete(final boolean onDelete) {
 
199
        this.onDelete = onDelete;
 
200
    }
 
201
 
 
202
    /**
 
203
     * Getter for {@link #onDelete}.
 
204
     *
 
205
     * @return {@link #onDelete}
 
206
     */
 
207
    public boolean isOnDelete() {
 
208
        return onDelete;
 
209
    }
 
210
 
 
211
    /**
 
212
     * Setter for {@link #onInsert}.
 
213
     *
 
214
     * @param onInsert {@link #onInsert}
 
215
     */
 
216
    public void setOnInsert(final boolean onInsert) {
 
217
        this.onInsert = onInsert;
 
218
    }
 
219
 
 
220
    /**
 
221
     * Getter for {@link #onInsert}.
 
222
     *
 
223
     * @return {@link #onInsert}
 
224
     */
 
225
    public boolean isOnInsert() {
 
226
        return onInsert;
 
227
    }
 
228
 
 
229
    /**
 
230
     * Setter for {@link #onUpdate}.
 
231
     *
 
232
     * @param onUpdate {@link #onUpdate}
 
233
     */
 
234
    public void setOnUpdate(final boolean onUpdate) {
 
235
        this.onUpdate = onUpdate;
 
236
    }
 
237
 
 
238
    /**
 
239
     * Getter for {@link #onUpdate}.
 
240
     *
 
241
     * @return {@link #onUpdate}
 
242
     */
 
243
    public boolean isOnUpdate() {
 
244
        return onUpdate;
 
245
    }
 
246
 
 
247
    /**
 
248
     * Setter for {@link #tableName}.
 
249
     *
 
250
     * @param tableName {@link #tableName}
 
251
     */
 
252
    public void setTableName(final String tableName) {
 
253
        this.tableName = tableName;
 
254
    }
 
255
 
 
256
    /**
 
257
     * Getter for {@link #tableName}.
 
258
     *
 
259
     * @return {@link #tableName}
 
260
     */
 
261
    public String getTableName() {
 
262
        return tableName;
 
263
    }
 
264
 
 
265
    /**
 
266
     * {@inheritDoc}
 
267
     *
 
268
     * @param object {@inheritDoc}
 
269
     *
 
270
     * @return {@inheritDoc}
 
271
     */
 
272
    public boolean equals(final Object object) {
 
273
        boolean equals = false;
 
274
 
 
275
        if (this == object) {
 
276
            equals = true;
 
277
        } else if (object instanceof PgTrigger) {
 
278
            final PgTrigger trigger = (PgTrigger) object;
 
279
            equals =
 
280
                (before == trigger.before)
 
281
                && (forEachRow == trigger.forEachRow)
 
282
                && function.equals(trigger.function)
 
283
                && name.equals(trigger.name) && (onDelete == trigger.onDelete)
 
284
                && (onInsert == trigger.onInsert)
 
285
                && (onUpdate == trigger.onUpdate)
 
286
                && tableName.equals(trigger.tableName);
 
287
        }
 
288
 
 
289
        return equals;
 
290
    }
 
291
 
 
292
    /**
 
293
     * {@inheritDoc}
 
294
     *
 
295
     * @return {@inheritDoc}
 
296
     */
 
297
    @Override
 
298
    public int hashCode() {
 
299
        return (getClass().getName() + "|" + before + "|" + forEachRow + "|"
 
300
        + function + "|" + name + "|" + onDelete + "|" + onInsert + "|"
 
301
        + onUpdate + "|" + tableName).hashCode();
 
302
    }
 
303
}