2
* $Id: PgTrigger.java 80 2007-09-01 20:25:45Z fordfrog $
4
package cz.startnet.utils.pgdiff.schema;
6
import cz.startnet.utils.pgdiff.PgDiffUtils;
10
* Stores trigger information.
13
* @version $Id: PgTrigger.java 80 2007-09-01 20:25:45Z fordfrog $
15
public class PgTrigger {
17
* Function name and arguments that should be fired on the trigger.
19
private String function;
22
* Name of the trigger.
27
* Name of the table the trigger is defined on.
29
private String tableName;
32
* Whether the trigger should be fired BEFORE or AFTER action.
35
private boolean before = true;
38
* Whether the trigger should be fired FOR EACH ROW or FOR EACH
39
* STATEMENT. Default is FOR EACH STATEMENT.
41
private boolean forEachRow;
44
* Whether the trigger should be fired on DELETE.
46
private boolean onDelete;
49
* Whether the trigger should be fired on INSERT.
51
private boolean onInsert;
54
* Whether the trigger should be fired on UPDATE.
56
private boolean onUpdate;
59
* Setter for {@link #before}.
61
* @param before {@link #before}
63
public void setBefore(final boolean before) {
68
* Getter for {@link #before}.
70
* @return {@link #before}
72
public boolean isBefore() {
77
* Creates and returns SQL for creation of trigger.
79
* @param quoteNames whether names should be quoted
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));
88
sbDDL.append(isBefore() ? "BEFORE" : "AFTER");
90
boolean firstEvent = true;
93
sbDDL.append(" INSERT");
104
sbDDL.append(" UPDATE");
112
sbDDL.append(" DELETE");
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());
123
return sbDDL.toString();
127
* Creates and returns SQL for dropping the trigger.
129
* @param quoteNames whether names should be quoted
131
* @return created SQL
133
public String getDropSQL(final boolean quoteNames) {
134
return "DROP TRIGGER "
135
+ PgDiffUtils.getQuotedName(getName(), quoteNames) + " ON "
136
+ PgDiffUtils.getQuotedName(getTableName(), quoteNames) + ";";
140
* Setter for {@link #forEachRow}.
142
* @param forEachRow {@link #forEachRow}
144
public void setForEachRow(final boolean forEachRow) {
145
this.forEachRow = forEachRow;
149
* Getter for {@link #forEachRow}.
151
* @return {@link #forEachRow}
153
public boolean isForEachRow() {
158
* Setter for {@link #function}.
160
* @param function {@link #function}
162
public void setFunction(final String function) {
163
this.function = function;
167
* Getter for {@link #function}.
169
* @return {@link #function}
171
public String getFunction() {
176
* Setter for {@link #name}.
178
* @param name {@link #name}
180
public void setName(final String name) {
185
* Getter for {@link #name}.
187
* @return {@link #name}
189
public String getName() {
194
* Setter for {@link #onDelete}.
196
* @param onDelete {@link #onDelete}
198
public void setOnDelete(final boolean onDelete) {
199
this.onDelete = onDelete;
203
* Getter for {@link #onDelete}.
205
* @return {@link #onDelete}
207
public boolean isOnDelete() {
212
* Setter for {@link #onInsert}.
214
* @param onInsert {@link #onInsert}
216
public void setOnInsert(final boolean onInsert) {
217
this.onInsert = onInsert;
221
* Getter for {@link #onInsert}.
223
* @return {@link #onInsert}
225
public boolean isOnInsert() {
230
* Setter for {@link #onUpdate}.
232
* @param onUpdate {@link #onUpdate}
234
public void setOnUpdate(final boolean onUpdate) {
235
this.onUpdate = onUpdate;
239
* Getter for {@link #onUpdate}.
241
* @return {@link #onUpdate}
243
public boolean isOnUpdate() {
248
* Setter for {@link #tableName}.
250
* @param tableName {@link #tableName}
252
public void setTableName(final String tableName) {
253
this.tableName = tableName;
257
* Getter for {@link #tableName}.
259
* @return {@link #tableName}
261
public String getTableName() {
268
* @param object {@inheritDoc}
270
* @return {@inheritDoc}
272
public boolean equals(final Object object) {
273
boolean equals = false;
275
if (this == object) {
277
} else if (object instanceof PgTrigger) {
278
final PgTrigger trigger = (PgTrigger) object;
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);
295
* @return {@inheritDoc}
298
public int hashCode() {
299
return (getClass().getName() + "|" + before + "|" + forEachRow + "|"
300
+ function + "|" + name + "|" + onDelete + "|" + onInsert + "|"
301
+ onUpdate + "|" + tableName).hashCode();