~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: 2010-10-11 09:08:18 UTC
  • mfrom: (2.1.7 sid)
  • Revision ID: james.westby@ubuntu.com-20101011090818-sdw8yfemrnxo328k
Tags: 2.2.2-1
* New upstream version.
* Using changelog included in zipfile, thanks Miroslav for providing this.
* Update manpage.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/**
 
2
 * Copyright 2006 StartNet s.r.o.
 
3
 *
 
4
 * Distributed under MIT license
 
5
 */
1
6
package cz.startnet.utils.pgdiff.schema;
2
7
 
3
8
import cz.startnet.utils.pgdiff.PgDiffUtils;
43
48
     * Whether the trigger should be fired on UPDATE.
44
49
     */
45
50
    private boolean onUpdate;
 
51
    /**
 
52
     * Whether the trigger should be fired on TRUNCATE.
 
53
     */
 
54
    private boolean onTruncate;
 
55
    /**
 
56
     * WHEN condition.
 
57
     */
 
58
    private String when;
46
59
 
47
60
    /**
48
61
     * Setter for {@link #before}.
65
78
    /**
66
79
     * Creates and returns SQL for creation of trigger.
67
80
     *
68
 
     * @param quoteNames whether names should be quoted
69
 
     *
70
81
     * @return created SQL
71
82
     */
72
 
    public String getCreationSQL(final boolean quoteNames) {
73
 
        final StringBuilder sbDDL = new StringBuilder();
74
 
        sbDDL.append("CREATE TRIGGER ");
75
 
        sbDDL.append(PgDiffUtils.getQuotedName(getName(), quoteNames));
76
 
        sbDDL.append("\n\t");
77
 
        sbDDL.append(isBefore() ? "BEFORE" : "AFTER");
 
83
    public String getCreationSQL() {
 
84
        final StringBuilder sbSQL = new StringBuilder(100);
 
85
        sbSQL.append("CREATE TRIGGER ");
 
86
        sbSQL.append(PgDiffUtils.getQuotedName(getName()));
 
87
        sbSQL.append("\n\t");
 
88
        sbSQL.append(isBefore() ? "BEFORE" : "AFTER");
78
89
 
79
90
        boolean firstEvent = true;
80
91
 
81
92
        if (isOnInsert()) {
82
 
            sbDDL.append(" INSERT");
 
93
            sbSQL.append(" INSERT");
83
94
            firstEvent = false;
84
95
        }
85
96
 
87
98
            if (firstEvent) {
88
99
                firstEvent = false;
89
100
            } else {
90
 
                sbDDL.append(" OR");
 
101
                sbSQL.append(" OR");
91
102
            }
92
103
 
93
 
            sbDDL.append(" UPDATE");
 
104
            sbSQL.append(" UPDATE");
94
105
        }
95
106
 
96
107
        if (isOnDelete()) {
97
108
            if (!firstEvent) {
98
 
                sbDDL.append(" OR");
99
 
            }
100
 
 
101
 
            sbDDL.append(" DELETE");
102
 
        }
103
 
 
104
 
        sbDDL.append(" ON ");
105
 
        sbDDL.append(PgDiffUtils.getQuotedName(getTableName(), quoteNames));
106
 
        sbDDL.append("\n\tFOR EACH ");
107
 
        sbDDL.append(isForEachRow() ? "ROW" : "STATEMENT");
108
 
        sbDDL.append("\n\tEXECUTE PROCEDURE ");
109
 
        sbDDL.append(getFunction());
110
 
        sbDDL.append(';');
111
 
 
112
 
        return sbDDL.toString();
 
109
                sbSQL.append(" OR");
 
110
            }
 
111
 
 
112
            sbSQL.append(" DELETE");
 
113
        }
 
114
 
 
115
        if (isOnTruncate()) {
 
116
            if (!firstEvent) {
 
117
                sbSQL.append(" OR");
 
118
            }
 
119
 
 
120
            sbSQL.append(" TRUNCATE");
 
121
        }
 
122
 
 
123
        sbSQL.append(" ON ");
 
124
        sbSQL.append(PgDiffUtils.getQuotedName(getTableName()));
 
125
        sbSQL.append("\n\tFOR EACH ");
 
126
        sbSQL.append(isForEachRow() ? "ROW" : "STATEMENT");
 
127
 
 
128
        if (when != null && !when.isEmpty()) {
 
129
            sbSQL.append("\n\tWHEN (");
 
130
            sbSQL.append(when);
 
131
            sbSQL.append(')');
 
132
        }
 
133
 
 
134
        sbSQL.append("\n\tEXECUTE PROCEDURE ");
 
135
        sbSQL.append(getFunction());
 
136
        sbSQL.append(';');
 
137
 
 
138
        return sbSQL.toString();
113
139
    }
114
140
 
115
141
    /**
116
142
     * Creates and returns SQL for dropping the trigger.
117
143
     *
118
 
     * @param quoteNames whether names should be quoted
119
 
     *
120
144
     * @return created SQL
121
145
     */
122
 
    public String getDropSQL(final boolean quoteNames) {
123
 
        return "DROP TRIGGER "
124
 
                + PgDiffUtils.getQuotedName(getName(), quoteNames) + " ON "
125
 
                + PgDiffUtils.getQuotedName(getTableName(), quoteNames) + ";";
 
146
    public String getDropSQL() {
 
147
        return "DROP TRIGGER " + PgDiffUtils.getQuotedName(getName()) + " ON "
 
148
                + PgDiffUtils.getQuotedName(getTableName()) + ";";
126
149
    }
127
150
 
128
151
    /**
234
257
    }
235
258
 
236
259
    /**
 
260
     * Getter for {@link #onTruncate}.
 
261
     *
 
262
     * @return {@link #onTruncate}
 
263
     */
 
264
    public boolean isOnTruncate() {
 
265
        return onTruncate;
 
266
    }
 
267
 
 
268
    /**
 
269
     * Setter for {@link #onTruncate}.
 
270
     *
 
271
     * @param onTruncate {@link #onTruncate}
 
272
     */
 
273
    public void setOnTruncate(final boolean onTruncate) {
 
274
        this.onTruncate = onTruncate;
 
275
    }
 
276
 
 
277
    /**
237
278
     * Setter for {@link #tableName}.
238
279
     *
239
280
     * @param tableName {@link #tableName}
252
293
    }
253
294
 
254
295
    /**
255
 
     * {@inheritDoc}
256
 
     *
257
 
     * @param object {@inheritDoc}
258
 
     *
259
 
     * @return {@inheritDoc}
260
 
     */
 
296
     * Getter for {@link #when}.
 
297
     *
 
298
     * @return {@link #when}
 
299
     */
 
300
    public String getWhen() {
 
301
        return when;
 
302
    }
 
303
 
 
304
    /**
 
305
     * Setter for {@link #when}.
 
306
     *
 
307
     * @param when {@link #when}
 
308
     */
 
309
    public void setWhen(final String when) {
 
310
        this.when = when;
 
311
    }
 
312
 
261
313
    @Override
262
314
    public boolean equals(final Object object) {
263
315
        boolean equals = false;
266
318
            equals = true;
267
319
        } else if (object instanceof PgTrigger) {
268
320
            final PgTrigger trigger = (PgTrigger) object;
269
 
            equals = (before == trigger.before)
270
 
                    && (forEachRow == trigger.forEachRow)
271
 
                    && function.equals(trigger.function)
272
 
                    && name.equals(trigger.name)
273
 
                    && (onDelete == trigger.onDelete)
274
 
                    && (onInsert == trigger.onInsert)
275
 
                    && (onUpdate == trigger.onUpdate)
276
 
                    && tableName.equals(trigger.tableName);
 
321
            equals = (before == trigger.isBefore())
 
322
                    && (forEachRow == trigger.isForEachRow())
 
323
                    && function.equals(trigger.getFunction())
 
324
                    && name.equals(trigger.getName())
 
325
                    && (onDelete == trigger.isOnDelete())
 
326
                    && (onInsert == trigger.isOnInsert())
 
327
                    && (onUpdate == trigger.isOnUpdate())
 
328
                    && (onTruncate == trigger.isOnTruncate())
 
329
                    && tableName.equals(trigger.getTableName());
277
330
        }
278
331
 
279
332
        return equals;
280
333
    }
281
334
 
282
 
    /**
283
 
     * {@inheritDoc}
284
 
     *
285
 
     * @return {@inheritDoc}
286
 
     */
287
335
    @Override
288
336
    public int hashCode() {
289
337
        return (getClass().getName() + "|" + before + "|" + forEachRow + "|"
290
338
                + function + "|" + name + "|" + onDelete + "|" + onInsert + "|"
291
 
                + onUpdate + "|" + tableName).hashCode();
 
339
                + onUpdate + "|" + onTruncate + "|" + tableName).hashCode();
292
340
    }
293
341
}