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

« back to all changes in this revision

Viewing changes to src/main/java/cz/startnet/utils/pgdiff/PgDiffUtils.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;
2
7
 
 
8
import java.util.Locale;
 
9
 
3
10
/**
4
11
 * Utilities for creation of diffs.
5
12
 *
8
15
public class PgDiffUtils {
9
16
 
10
17
    /**
 
18
     * Array of reserved keywords. Non-reserved keywords are excluded. Source
 
19
     * http://www.postgresql.org/docs/9.0/static/sql-keywords-appendix.html.
 
20
     */
 
21
    private static final String[] KEYWORDS = new String[]{
 
22
        "ABS",
 
23
        "ABSOLUTE",
 
24
        "ACTION",
 
25
        "ADD",
 
26
        "ADMIN",
 
27
        "AFTER",
 
28
        "AGGREGATE",
 
29
        "ALIAS",
 
30
        "ALL",
 
31
        "ALLOCATE",
 
32
        "ALTER",
 
33
        "ANALYSE",
 
34
        "ANALYZE",
 
35
        "AND",
 
36
        "ANY",
 
37
        "ARE",
 
38
        "ARRAY",
 
39
        "ARRAY_AGG",
 
40
        "AS",
 
41
        "ASC",
 
42
        "ASENSITIVE",
 
43
        "ASSERTION",
 
44
        "ASYMMETRIC",
 
45
        "AT",
 
46
        "ATOMIC",
 
47
        "AUTHORIZATION",
 
48
        "AVG",
 
49
        "BEFORE",
 
50
        "BEGIN",
 
51
        "BETWEEN",
 
52
        "BIGINT",
 
53
        "BINARY",
 
54
        "BIT",
 
55
        "BIT_LENGTH",
 
56
        "BLOB",
 
57
        "BOOLEAN",
 
58
        "BOTH",
 
59
        "BREADTH",
 
60
        "BY",
 
61
        "CALL",
 
62
        "CALLED",
 
63
        "CARDINALITY",
 
64
        "CASCADE",
 
65
        "CASCADED",
 
66
        "CASE",
 
67
        "CAST",
 
68
        "CATALOG",
 
69
        "CEIL",
 
70
        "CEILING",
 
71
        "CHAR",
 
72
        "CHARACTER",
 
73
        "CHARACTER_LENGTH",
 
74
        "CHAR_LENGTH",
 
75
        "CHECK",
 
76
        "CLASS",
 
77
        "CLOB",
 
78
        "CLOSE",
 
79
        "COALESCE",
 
80
        "COLLATE",
 
81
        "COLLATION",
 
82
        "COLLECT",
 
83
        "COLUMN",
 
84
        "COMMIT",
 
85
        "COMPLETION",
 
86
        "CONCURRENTLY",
 
87
        "CONDITION",
 
88
        "CONNECT",
 
89
        "CONNECTION",
 
90
        "CONSTRAINT",
 
91
        "CONSTRAINTS",
 
92
        "CONSTRUCTOR",
 
93
        "CONTINUE",
 
94
        "CONVERT",
 
95
        "CORR",
 
96
        "CORRESPONDING",
 
97
        "COUNT",
 
98
        "COVAR_POP",
 
99
        "COVAR_SAMP",
 
100
        "CREATE",
 
101
        "CROSS",
 
102
        "CUBE",
 
103
        "CUME_DIST",
 
104
        "CURRENT",
 
105
        "CURRENT_CATALOG",
 
106
        "CURRENT_DATE",
 
107
        "CURRENT_DEFAULT_TRANSFORM_GROUP",
 
108
        "CURRENT_PATH",
 
109
        "CURRENT_ROLE",
 
110
        "CURRENT_SCHEMA",
 
111
        "CURRENT_TIME",
 
112
        "CURRENT_TIMESTAMP",
 
113
        "CURRENT_TRANSFORM_GROUP_FOR_TYPE",
 
114
        "CURRENT_USER",
 
115
        "CURSOR",
 
116
        "CYCLE",
 
117
        "DATA",
 
118
        "DATALINK",
 
119
        "DATE",
 
120
        "DAY",
 
121
        "DEALLOCATE",
 
122
        "DEC",
 
123
        "DECIMAL",
 
124
        "DECLARE",
 
125
        "DEFAULT",
 
126
        "DEFERRABLE",
 
127
        "DEFERRED",
 
128
        "DELETE",
 
129
        "DENSE_RANK",
 
130
        "DEPTH",
 
131
        "DEREF",
 
132
        "DESC",
 
133
        "DESCRIBE",
 
134
        "DESCRIPTOR",
 
135
        "DESTROY",
 
136
        "DESTRUCTOR",
 
137
        "DETERMINISTIC",
 
138
        "DIAGNOSTICS",
 
139
        "DICTIONARY",
 
140
        "DISCONNECT",
 
141
        "DISTINCT",
 
142
        "DLNEWCOPY",
 
143
        "DLPREVIOUSCOPY",
 
144
        "DLURLCOMPLETE",
 
145
        "DLURLCOMPLETEONLY",
 
146
        "DLURLCOMPLETEWRITE",
 
147
        "DLURLPATH",
 
148
        "DLURLPATHONLY",
 
149
        "DLURLPATHWRITE",
 
150
        "DLURLSCHEME",
 
151
        "DLURLSERVER",
 
152
        "DLVALUE",
 
153
        "DO",
 
154
        "DOMAIN",
 
155
        "DOUBLE",
 
156
        "DROP",
 
157
        "DYNAMIC",
 
158
        "EACH",
 
159
        "ELEMENT",
 
160
        "ELSE",
 
161
        "END",
 
162
        "END-EXEC",
 
163
        "EQUALS",
 
164
        "ESCAPE",
 
165
        "EVERY",
 
166
        "EXCEPT",
 
167
        "EXCEPTION",
 
168
        "EXEC",
 
169
        "EXECUTE",
 
170
        "EXISTS",
 
171
        "EXP",
 
172
        "EXTERNAL",
 
173
        "EXTRACT",
 
174
        "FALSE",
 
175
        "FETCH",
 
176
        "FILTER",
 
177
        "FIRST",
 
178
        "FIRST_VALUE",
 
179
        "FLOAT",
 
180
        "FLOOR",
 
181
        "FOR",
 
182
        "FOREIGN",
 
183
        "FOUND",
 
184
        "FREE",
 
185
        "FREEZE",
 
186
        "FROM",
 
187
        "FULL",
 
188
        "FUNCTION",
 
189
        "FUSION",
 
190
        "GENERAL",
 
191
        "GET",
 
192
        "GLOBAL",
 
193
        "GO",
 
194
        "GOTO",
 
195
        "GRANT",
 
196
        "GROUP",
 
197
        "GROUPING",
 
198
        "HAVING",
 
199
        "HOLD",
 
200
        "HOST",
 
201
        "HOUR",
 
202
        "IDENTITY",
 
203
        "IGNORE",
 
204
        "ILIKE",
 
205
        "IMMEDIATE",
 
206
        "IMPORT",
 
207
        "IN",
 
208
        "INDICATOR",
 
209
        "INITIALIZE",
 
210
        "INITIALLY",
 
211
        "INNER",
 
212
        "INOUT",
 
213
        "INPUT",
 
214
        "INSENSITIVE",
 
215
        "INSERT",
 
216
        "INT",
 
217
        "INTEGER",
 
218
        "INTERSECT",
 
219
        "INTERSECTION",
 
220
        "INTERVAL",
 
221
        "INTO",
 
222
        "IS",
 
223
        "ISNULL",
 
224
        "ISOLATION",
 
225
        "ITERATE",
 
226
        "JOIN",
 
227
        "KEY",
 
228
        "LAG",
 
229
        "LANGUAGE",
 
230
        "LARGE",
 
231
        "LAST",
 
232
        "LAST_VALUE",
 
233
        "LATERAL",
 
234
        "LEAD",
 
235
        "LEADING",
 
236
        "LEFT",
 
237
        "LESS",
 
238
        "LEVEL",
 
239
        "LIKE",
 
240
        "LIKE_REGEX",
 
241
        "LIMIT",
 
242
        "LN",
 
243
        "LOCAL",
 
244
        "LOCALTIME",
 
245
        "LOCALTIMESTAMP",
 
246
        "LOCATOR",
 
247
        "LOWER",
 
248
        "MAP",
 
249
        "MATCH",
 
250
        "MAX",
 
251
        "MAX_CARDINALITY",
 
252
        "MEMBER",
 
253
        "MERGE",
 
254
        "METHOD",
 
255
        "MIN",
 
256
        "MINUTE",
 
257
        "MOD",
 
258
        "MODIFIES",
 
259
        "MODIFY",
 
260
        "MODULE",
 
261
        "MONTH",
 
262
        "MULTISET",
 
263
        "NAMES",
 
264
        "NATIONAL",
 
265
        "NATURAL",
 
266
        "NCHAR",
 
267
        "NCLOB",
 
268
        "NEW",
 
269
        "NEXT",
 
270
        "NO",
 
271
        "NONE",
 
272
        "NORMALIZE",
 
273
        "NOT",
 
274
        "NOTNULL",
 
275
        "NTH_VALUE",
 
276
        "NTILE",
 
277
        "NULL",
 
278
        "NULLIF",
 
279
        "NUMERIC",
 
280
        "OBJECT",
 
281
        "OCCURRENCES_REGEX",
 
282
        "OCTET_LENGTH",
 
283
        "OF",
 
284
        "OFF",
 
285
        "OFFSET",
 
286
        "OLD",
 
287
        "ON",
 
288
        "ONLY",
 
289
        "OPEN",
 
290
        "OPERATION",
 
291
        "OPTION",
 
292
        "OR",
 
293
        "ORDER",
 
294
        "ORDINALITY",
 
295
        "OUT",
 
296
        "OUTER",
 
297
        "OUTPUT",
 
298
        "OVER",
 
299
        "OVERLAPS",
 
300
        "OVERLAY",
 
301
        "PAD",
 
302
        "PARAMETER",
 
303
        "PARAMETERS",
 
304
        "PARTIAL",
 
305
        "PARTITION",
 
306
        "PATH",
 
307
        "PERCENTILE_CONT",
 
308
        "PERCENTILE_DISC",
 
309
        "PERCENT_RANK",
 
310
        "PLACING",
 
311
        "POSITION",
 
312
        "POSITION_REGEX",
 
313
        "POSTFIX",
 
314
        "POWER",
 
315
        "PRECISION",
 
316
        "PREFIX",
 
317
        "PREORDER",
 
318
        "PREPARE",
 
319
        "PRESERVE",
 
320
        "PRIMARY",
 
321
        "PRIOR",
 
322
        "PRIVILEGES",
 
323
        "PROCEDURE",
 
324
        "PUBLIC",
 
325
        "RANGE",
 
326
        "RANK",
 
327
        "READ",
 
328
        "READS",
 
329
        "REAL",
 
330
        "RECURSIVE",
 
331
        "REF",
 
332
        "REFERENCES",
 
333
        "REFERENCING",
 
334
        "REGR_AVGX",
 
335
        "REGR_AVGY",
 
336
        "REGR_COUNT",
 
337
        "REGR_INTERCEPT",
 
338
        "REGR_R2",
 
339
        "REGR_SLOPE",
 
340
        "REGR_SXX",
 
341
        "REGR_SXY",
 
342
        "REGR_SYY",
 
343
        "RELATIVE",
 
344
        "RELEASE",
 
345
        "RESTRICT",
 
346
        "RESULT",
 
347
        "RETURN",
 
348
        "RETURNING",
 
349
        "RETURNS",
 
350
        "REVOKE",
 
351
        "RIGHT",
 
352
        "ROLE",
 
353
        "ROLLBACK",
 
354
        "ROLLUP",
 
355
        "ROUTINE",
 
356
        "ROW",
 
357
        "ROWS",
 
358
        "ROW_NUMBER",
 
359
        "SAVEPOINT",
 
360
        "SCHEMA",
 
361
        "SCOPE",
 
362
        "SCROLL",
 
363
        "SEARCH",
 
364
        "SECOND",
 
365
        "SECTION",
 
366
        "SELECT",
 
367
        "SENSITIVE",
 
368
        "SEQUENCE",
 
369
        "SESSION",
 
370
        "SESSION_USER",
 
371
        "SET",
 
372
        "SETS",
 
373
        "SIMILAR",
 
374
        "SIZE",
 
375
        "SMALLINT",
 
376
        "SOME",
 
377
        "SPACE",
 
378
        "SPECIFIC",
 
379
        "SPECIFICTYPE",
 
380
        "SQL",
 
381
        "SQLCODE",
 
382
        "SQLERROR",
 
383
        "SQLEXCEPTION",
 
384
        "SQLSTATE",
 
385
        "SQLWARNING",
 
386
        "SQRT",
 
387
        "START",
 
388
        "STATE",
 
389
        "STATEMENT",
 
390
        "STATIC",
 
391
        "STDDEV_POP",
 
392
        "STDDEV_SAMP",
 
393
        "STRUCTURE",
 
394
        "SUBMULTISET",
 
395
        "SUBSTRING",
 
396
        "SUBSTRING_REGEX",
 
397
        "SUM",
 
398
        "SYMMETRIC",
 
399
        "SYSTEM",
 
400
        "SYSTEM_USER",
 
401
        "TABLE",
 
402
        "TABLESAMPLE",
 
403
        "TEMPORARY",
 
404
        "TERMINATE",
 
405
        "THAN",
 
406
        "THEN",
 
407
        "TIME",
 
408
        "TIMESTAMP",
 
409
        "TIMEZONE_HOUR",
 
410
        "TIMEZONE_MINUTE",
 
411
        "TO",
 
412
        "TRAILING",
 
413
        "TRANSACTION",
 
414
        "TRANSLATE",
 
415
        "TRANSLATE_REGEX",
 
416
        "TRANSLATION",
 
417
        "TREAT",
 
418
        "TRIGGER",
 
419
        "TRIM",
 
420
        "TRIM_ARRAY",
 
421
        "TRUE",
 
422
        "TRUNCATE",
 
423
        "UESCAPE",
 
424
        "UNDER",
 
425
        "UNION",
 
426
        "UNIQUE",
 
427
        "UNKNOWN",
 
428
        "UNNEST",
 
429
        "UPDATE",
 
430
        "UPPER",
 
431
        "USAGE",
 
432
        "USER",
 
433
        "USING",
 
434
        "VALUE",
 
435
        "VALUES",
 
436
        "VARBINARY",
 
437
        "VARCHAR",
 
438
        "VARIABLE",
 
439
        "VARIADIC",
 
440
        "VARYING",
 
441
        "VAR_POP",
 
442
        "VAR_SAMP",
 
443
        "VERBOSE",
 
444
        "VIEW",
 
445
        "WHEN",
 
446
        "WHENEVER",
 
447
        "WHERE",
 
448
        "WIDTH_BUCKET",
 
449
        "WINDOW",
 
450
        "WITH",
 
451
        "WITHIN",
 
452
        "WITHOUT",
 
453
        "WORK",
 
454
        "WRITE",
 
455
        "XML",
 
456
        "XMLAGG",
 
457
        "XMLATTRIBUTES",
 
458
        "XMLBINARY",
 
459
        "XMLCAST",
 
460
        "XMLCOMMENT",
 
461
        "XMLCONCAT",
 
462
        "XMLDOCUMENT",
 
463
        "XMLELEMENT",
 
464
        "XMLEXISTS",
 
465
        "XMLFOREST",
 
466
        "XMLITERATE",
 
467
        "XMLNAMESPACES",
 
468
        "XMLPARSE",
 
469
        "XMLPI",
 
470
        "XMLQUERY",
 
471
        "XMLROOT",
 
472
        "XMLSERIALIZE",
 
473
        "XMLTABLE",
 
474
        "XMLTEXT",
 
475
        "XMLVALIDATE",
 
476
        "YEAR",
 
477
        "ZONE"};
 
478
 
 
479
    /**
11
480
     * Creates a new PgDiffUtils object.
12
481
     */
13
482
    private PgDiffUtils() {
14
 
        super();
15
483
    }
16
484
 
17
485
    /**
18
 
     * If <code>quoteName</code> is true then returns quoted name
19
 
     * otherwise returns the original name.
 
486
     * If name contains only lower case characters and digits and is not
 
487
     * keyword, it is returned not quoted, otherwise the string is returned
 
488
     * quoted.
20
489
     *
21
490
     * @param name name
22
 
     * @param quoteName whether the name should be quoted
23
 
     *
24
 
     * @return if <code>quoteName</code> is true then returns quoted name
25
 
     *         otherwise returns the original name
 
491
     * @param excludeKeywords whether check against keywords should be skipped
 
492
     * 
 
493
     * @return quoted string if needed, otherwise not quoted string
26
494
     */
27
495
    public static String getQuotedName(final String name,
28
 
            final boolean quoteName) {
29
 
        return quoteName ? ("\"" + name + "\"") : name;
 
496
            final boolean excludeKeywords) {
 
497
        if (name.indexOf('-') != -1 || name.indexOf('.') != -1) {
 
498
            return '"' + name + '"';
 
499
        }
 
500
 
 
501
        for (int i = 0; i < name.length(); i++) {
 
502
            final char chr = name.charAt(i);
 
503
 
 
504
            if (Character.isUpperCase(chr)) {
 
505
                return '"' + name + '"';
 
506
            }
 
507
        }
 
508
 
 
509
        if (excludeKeywords) {
 
510
            return name;
 
511
        }
 
512
 
 
513
        final String upperName = name.toUpperCase(Locale.ENGLISH);
 
514
 
 
515
        for (final String keyword : KEYWORDS) {
 
516
            if (keyword.equals(upperName)) {
 
517
                return '"' + name + '"';
 
518
            }
 
519
        }
 
520
 
 
521
        return name;
 
522
    }
 
523
 
 
524
    /**
 
525
     * If name contains only lower case characters and digits and is not
 
526
     * keyword, it is returned not quoted, otherwise the string is returned
 
527
     * quoted.
 
528
     *
 
529
     * @param name name
 
530
     *
 
531
     * @return quoted string if needed, otherwise not quoted string
 
532
     */
 
533
    public static String getQuotedName(final String name) {
 
534
        return getQuotedName(name, false);
30
535
    }
31
536
}