001/*
002 * ModeShape (http://www.modeshape.org)
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 *       http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016package org.modeshape.sequencer.ddl.dialect.postgres;
017
018import java.util.Arrays;
019import java.util.List;
020import org.modeshape.sequencer.ddl.DdlConstants;
021import org.modeshape.sequencer.ddl.DdlTokenStream;
022import org.modeshape.sequencer.ddl.StandardDdlLexicon;
023
024/**
025 *
026 */
027public interface PostgresDdlConstants extends DdlConstants {
028    public static final String[] CUSTOM_KEYWORDS = {"SHOW", "LISTEN", "UNLISTEN", "REINDEX", "MOVE", "ABORT", "ANALYZE",
029        "TRUNCATE", "REASSIGN", "RELEASE", "RESET", "REVOKE", "ROLLBACK", "FETCH", "EXPLAIN", "DISCARD", "COPY", "CLUSTER",
030        "NOTIFY", "LOAD", "COMMENT", "LOCK", "SERVER", "SEARCH", "PARSER", "DICTIONARY", "WRAPPER", "PROCEDURAL", "CONVERSION",
031        "AGGREGATE", "TEMPLATE", "MAPPING", "TRUSTED", "TRIGGER", "VACUUM", "FAMILTY", "BIGSERIAL", "BOX", "BOOLEAN", "BOX",
032        "BYTEA", "CIDR", "CIRCLE", "FLOAT4", "FLOAT8", "INET", "INT2", "INT4", "INT8", "LINE", "LSEG", "MACADDR", "MONEY",
033        "PATH", "POINT", "POLYGON", "SERIAL", "SERIAL4", "SERIAL8", "TEXT", "TIMESTAMPZ", "TSQUERY", "TSVECTOR", "TXID_SNAPSHOT",
034        "UUID", "XML"};
035
036    interface PostgresStatementStartPhrases {
037        static final String[] STMT_ALTER_AGGREGATE = {ALTER, "AGGREGATE"};
038        static final String[] STMT_ALTER_CONVERSION = {ALTER, "CONVERSION"};
039        static final String[] STMT_ALTER_DATABASE = {ALTER, "DATABASE"};
040        static final String[] STMT_ALTER_FOREIGN_DATA_WRAPPER = {ALTER, "FOREIGN", "DATA", "WRAPPER"};
041        static final String[] STMT_ALTER_FUNCTION = {ALTER, "FUNCTION"};
042        static final String[] STMT_ALTER_GROUP = {ALTER, "GROUP", DdlTokenStream.ANY_VALUE, DdlTokenStream.ANY_VALUE,
043            DdlTokenStream.ANY_VALUE};
044        static final String[] STMT_ALTER_INDEX = {ALTER, "INDEX"};
045        static final String[] STMT_ALTER_LANGUAGE = {ALTER, "LANGUAGE"};
046        static final String[] STMT_ALTER_PROCEDURAL_LANGUAGE = {ALTER, "PROCEDURAL", "LANGUAGE"};
047        static final String[] STMT_ALTER_OPERATOR = {ALTER, "OPERATOR"};
048        static final String[] STMT_ALTER_OPERATOR_CLASS = {ALTER, "OPERATOR", "CLASS", DdlTokenStream.ANY_VALUE,
049            DdlTokenStream.ANY_VALUE, DdlTokenStream.ANY_VALUE, DdlTokenStream.ANY_VALUE};
050        static final String[] STMT_ALTER_OPERATOR_FAMILY = {ALTER, "OPERATOR", "FAMILY", DdlTokenStream.ANY_VALUE,
051            DdlTokenStream.ANY_VALUE, DdlTokenStream.ANY_VALUE, DdlTokenStream.ANY_VALUE};
052        static final String[] STMT_ALTER_ROLE = {ALTER, "ROLE"};
053        static final String[] STMT_ALTER_SCHEMA = {ALTER, "SCHEMA"};
054        static final String[] STMT_ALTER_SEQUENCE = {ALTER, "SEQUENCE"};
055        static final String[] STMT_ALTER_SERVER = {ALTER, "SERVER"};
056        static final String[] STMT_ALTER_TABLESPACE = {ALTER, "TABLESPACE"};
057        static final String[] STMT_ALTER_TEXT_SEARCH_CONFIGURATION = {ALTER, "TEXT", "SEARCH", "CONFIGURATION"};
058        static final String[] STMT_ALTER_TEXT_SEARCH_DICTIONARY = {ALTER, "TEXT", "SEARCH", "DICTIONARY"};
059        static final String[] STMT_ALTER_TEXT_SEARCH_PARSER = {ALTER, "TEXT", "SEARCH", "PARSER"};
060        static final String[] STMT_ALTER_TEXT_SEARCH_TEMPLATE = {ALTER, "TEXT", "SEARCH", "TEMPLATE"};
061        static final String[] STMT_ALTER_TEXT_SEARCH = {ALTER, "TEXT", "SEARCH"};
062        static final String[] STMT_ALTER_TRIGGER = {ALTER, "TRIGGER"};
063        static final String[] STMT_ALTER_TYPE = {ALTER, "TYPE"};
064        static final String[] STMT_ALTER_USER = {ALTER, "USER"};
065        static final String[] STMT_ALTER_USER_MAPPING = {ALTER, "USER", "MAPPING"};
066        static final String[] STMT_ALTER_VIEW = {ALTER, "VIEW"};
067
068        static final String[][] ALTER_PHRASES = {STMT_ALTER_AGGREGATE, STMT_ALTER_CONVERSION, STMT_ALTER_DATABASE,
069            STMT_ALTER_FOREIGN_DATA_WRAPPER, STMT_ALTER_FUNCTION, STMT_ALTER_GROUP, STMT_ALTER_INDEX,
070            STMT_ALTER_PROCEDURAL_LANGUAGE, STMT_ALTER_LANGUAGE, STMT_ALTER_OPERATOR_CLASS, STMT_ALTER_OPERATOR_FAMILY,
071            STMT_ALTER_OPERATOR, STMT_ALTER_ROLE, STMT_ALTER_SCHEMA, STMT_ALTER_SEQUENCE, STMT_ALTER_SERVER,
072            STMT_ALTER_TABLESPACE, STMT_ALTER_TEXT_SEARCH_CONFIGURATION, STMT_ALTER_TEXT_SEARCH_DICTIONARY,
073            STMT_ALTER_TEXT_SEARCH_PARSER, STMT_ALTER_TEXT_SEARCH_TEMPLATE, STMT_ALTER_TEXT_SEARCH, STMT_ALTER_TRIGGER,
074            STMT_ALTER_TYPE, STMT_ALTER_USER_MAPPING, STMT_ALTER_USER, STMT_ALTER_VIEW};
075
076        static final String[] STMT_CREATE_AGGREGATE = {CREATE, "AGGREGATE"};
077        static final String[] STMT_CREATE_CAST = {CREATE, "CAST"};
078        static final String[] STMT_CREATE_CONSTRAINT_TRIGGER = {CREATE, "CONSTRAINT", "TRIGGER"};
079        static final String[] STMT_CREATE_CONVERSION = {CREATE, "CONVERSION"};
080        static final String[] STMT_CREATE_DATABASE = {CREATE, "DATABASE"};
081        static final String[] STMT_CREATE_FOREIGN_DATA_WRAPPER = {CREATE, "FOREIGN", "DATA", "WRAPPER"};
082        static final String[] STMT_CREATE_FUNCTION = {CREATE, "FUNCTION"};
083        static final String[] STMT_CREATE_OR_REPLACE_FUNCTION = {CREATE, "OR", "REPLACE", "FUNCTION"};
084        static final String[] STMT_CREATE_GROUP = {CREATE, "GROUP"};
085        static final String[] STMT_CREATE_INDEX = {CREATE, "INDEX"};
086        static final String[] STMT_CREATE_UNIQUE_INDEX = {CREATE, "UNIQUE", "INDEX"};
087        static final String[] STMT_CREATE_LANGUAGE = {CREATE, "LANGUAGE"};
088        static final String[] STMT_CREATE_PROCEDURAL_LANGUAGE = {CREATE, "PROCEDURAL", "LANGUAGE"};
089        static final String[] STMT_CREATE_TRUSTED_PROCEDURAL_LANGUAGE = {CREATE, "TRUSTED", "PROCEDURAL", "LANGUAGE"};
090        static final String[] STMT_CREATE_OPERATOR = {CREATE, "OPERATOR"};
091        static final String[] STMT_CREATE_OPERATOR_CLASS = {CREATE, "OPERATOR", "CLASS"};
092        static final String[] STMT_CREATE_OPERATOR_FAMILY = {CREATE, "OPERATOR", "FAMILY"};
093        static final String[] STMT_CREATE_ROLE = {CREATE, "ROLE"};
094        static final String[] STMT_CREATE_RULE = {CREATE, "RULE"};
095        static final String[] STMT_CREATE_OR_REPLACE_RULE = {CREATE, "OR", "REPLACE", "RULE"};
096        static final String[] STMT_CREATE_TEMP_TABLE = {CREATE, "TEMP", TABLE};
097        static final String[] STMT_CREATE_GLOBAL_TEMP_TABLE = {CREATE, "GLOBAL", "TEMP", TABLE};
098        static final String[] STMT_CREATE_LOCAL_TEMP_TABLE = {CREATE, "LOCAL", "TEMP", TABLE};
099        static final String[] STMT_CREATE_SEQUENCE = {CREATE, "SEQUENCE"};
100        static final String[] STMT_CREATE_TEMP_SEQUENCE = {CREATE, "TEMP", "SEQUENCE"};
101        static final String[] STMT_CREATE_TEMPORARY_SEQUENCE = {CREATE, "TEMPORARY", "SEQUENCE"};
102        static final String[] STMT_CREATE_SERVER = {CREATE, "SERVER"};
103        static final String[] STMT_CREATE_TABLESPACE = {CREATE, "TABLESPACE"};
104        static final String[] STMT_CREATE_TEXT_SEARCH_CONFIGURATION = {CREATE, "TEXT", "SEARCH", "CONFIGURATION"};
105        static final String[] STMT_CREATE_TEXT_SEARCH_DICTIONARY = {CREATE, "TEXT", "SEARCH", "DICTIONARY"};
106        static final String[] STMT_CREATE_TEXT_SEARCH_PARSER = {CREATE, "TEXT", "SEARCH", "PARSER"};
107        static final String[] STMT_CREATE_TEXT_SEARCH_TEMPLATE = {CREATE, "TEXT", "SEARCH", "TEMPLATE"};
108        static final String[] STMT_CREATE_TEXT_SEARCH = {CREATE, "TEXT", "SEARCH"};
109        static final String[] STMT_CREATE_TRIGGER = {CREATE, "TRIGGER"};
110        static final String[] STMT_CREATE_TYPE = {CREATE, "TYPE"};
111        static final String[] STMT_CREATE_USER = {CREATE, "USER"};
112        static final String[] STMT_CREATE_USER_MAPPING = {CREATE, "USER", "MAPPING"};
113
114        static final String[][] CREATE_PHRASES = {STMT_CREATE_AGGREGATE, STMT_CREATE_CAST, STMT_CREATE_CONSTRAINT_TRIGGER,
115            STMT_CREATE_CONVERSION, STMT_CREATE_DATABASE, STMT_CREATE_FOREIGN_DATA_WRAPPER, STMT_CREATE_FUNCTION,
116            STMT_CREATE_OR_REPLACE_FUNCTION, STMT_CREATE_GROUP, STMT_CREATE_INDEX, STMT_CREATE_UNIQUE_INDEX,
117            STMT_CREATE_PROCEDURAL_LANGUAGE, STMT_CREATE_TRUSTED_PROCEDURAL_LANGUAGE, STMT_CREATE_LANGUAGE,
118            STMT_CREATE_OPERATOR_CLASS, STMT_CREATE_OPERATOR_FAMILY, STMT_CREATE_OPERATOR, STMT_CREATE_ROLE, STMT_CREATE_RULE,
119            STMT_CREATE_OR_REPLACE_RULE, STMT_CREATE_TEMP_TABLE, STMT_CREATE_GLOBAL_TEMP_TABLE, STMT_CREATE_LOCAL_TEMP_TABLE,
120            STMT_CREATE_SEQUENCE, STMT_CREATE_TEMP_SEQUENCE, STMT_CREATE_TEMPORARY_SEQUENCE, STMT_CREATE_SERVER,
121            STMT_CREATE_TABLESPACE, STMT_CREATE_TEXT_SEARCH_CONFIGURATION, STMT_CREATE_TEXT_SEARCH_DICTIONARY,
122            STMT_CREATE_TEXT_SEARCH_PARSER, STMT_CREATE_TEXT_SEARCH_TEMPLATE, STMT_CREATE_TEXT_SEARCH, STMT_CREATE_TRIGGER,
123            STMT_CREATE_TYPE, STMT_CREATE_USER_MAPPING, STMT_CREATE_USER};
124
125        static final String[] STMT_DROP_AGGREGATE = {DROP, "AGGREGATE"};
126        static final String[] STMT_DROP_CAST = {DROP, "CAST"};
127        static final String[] STMT_DROP_CONSTRAINT_TRIGGER = {DROP, "CONSTRAINT", "TRIGGER"};
128        static final String[] STMT_DROP_CONVERSION = {DROP, "CONVERSION"};
129        static final String[] STMT_DROP_DATABASE = {DROP, "DATABASE"};
130        static final String[] STMT_DROP_FOREIGN_DATA_WRAPPER = {DROP, "FOREIGN", "DATA", "WRAPPER"};
131        static final String[] STMT_DROP_FUNCTION = {DROP, "FUNCTION"};
132        static final String[] STMT_DROP_GROUP = {DROP, "GROUP"};
133        static final String[] STMT_DROP_INDEX = {DROP, "INDEX"};
134        static final String[] STMT_DROP_LANGUAGE = {DROP, "LANGUAGE"};
135        static final String[] STMT_DROP_PROCEDURAL_LANGUAGE = {DROP, "PROCEDURAL", "LANGUAGE"};
136        static final String[] STMT_DROP_OPERATOR = {DROP, "OPERATOR"};
137        static final String[] STMT_DROP_OPERATOR_CLASS = {DROP, "OPERATOR", "CLASS"};
138        static final String[] STMT_DROP_OPERATOR_FAMILY = {DROP, "OPERATOR", "FAMILY"};
139        static final String[] STMT_DROP_OWNED_BY = {DROP, "OWNED", "BY"};
140        static final String[] STMT_DROP_ROLE = {DROP, "ROLE"};
141        static final String[] STMT_DROP_RULE = {DROP, "RULE"};
142        static final String[] STMT_DROP_SEQUENCE = {DROP, "SEQUENCE"};
143        static final String[] STMT_DROP_SERVER = {DROP, "SERVER"};
144        static final String[] STMT_DROP_TABLESPACE = {DROP, "TABLESPACE"};
145        static final String[] STMT_DROP_TEXT_SEARCH_CONFIGURATION = {DROP, "TEXT", "SEARCH", "CONFIGURATION"};
146        static final String[] STMT_DROP_TEXT_SEARCH_DICTIONARY = {DROP, "TEXT", "SEARCH", "DICTIONARY"};
147        static final String[] STMT_DROP_TEXT_SEARCH_PARSER = {DROP, "TEXT", "SEARCH", "PARSER"};
148        static final String[] STMT_DROP_TEXT_SEARCH_TEMPLATE = {DROP, "TEXT", "SEARCH", "TEMPLATE"};
149        static final String[] STMT_DROP_TEXT_SEARCH = {DROP, "TEXT", "SEARCH"};
150        static final String[] STMT_DROP_TRIGGER = {DROP, "TRIGGER"};
151        static final String[] STMT_DROP_TYPE = {DROP, "TYPE"};
152        static final String[] STMT_DROP_USER = {DROP, "USER"};
153        static final String[] STMT_DROP_USER_MAPPING = {DROP, "USER", "MAPPING"};
154
155        static final String[][] DROP_PHRASES = {STMT_DROP_AGGREGATE, STMT_DROP_CAST, STMT_DROP_CONSTRAINT_TRIGGER,
156            STMT_DROP_CONVERSION, STMT_DROP_DATABASE, STMT_DROP_FOREIGN_DATA_WRAPPER, STMT_DROP_FUNCTION, STMT_DROP_GROUP,
157            STMT_DROP_INDEX, STMT_DROP_PROCEDURAL_LANGUAGE, STMT_DROP_LANGUAGE, STMT_DROP_OPERATOR_CLASS,
158            STMT_DROP_OPERATOR_FAMILY, STMT_DROP_OWNED_BY, STMT_DROP_OPERATOR, STMT_DROP_ROLE, STMT_DROP_RULE,
159            STMT_DROP_SEQUENCE, STMT_DROP_SERVER, STMT_DROP_TABLESPACE, STMT_DROP_TEXT_SEARCH_CONFIGURATION,
160            STMT_DROP_TEXT_SEARCH_DICTIONARY, STMT_DROP_TEXT_SEARCH_PARSER, STMT_DROP_TEXT_SEARCH_TEMPLATE,
161            STMT_DROP_TEXT_SEARCH, STMT_DROP_TRIGGER, STMT_DROP_TYPE, STMT_DROP_USER_MAPPING, STMT_DROP_USER};
162
163        static final String[] STMT_SET_CONSTRAINTS = {"SET", "CONSTRAINTS"};
164        static final String[] STMT_SET_ROLE = {"SET", "ROLE"};
165        static final String[] STMT_SET_SESSION_AUTHORIZATION = {"SET", "SESSION", "AUTHORIZATION"};
166        static final String[] STMT_SET_TRANSACTION = {"SET", "TRANSACTION"};
167
168        static final String[][] SET_PHRASES = {STMT_SET_CONSTRAINTS, STMT_SET_ROLE, STMT_SET_SESSION_AUTHORIZATION,
169            STMT_SET_TRANSACTION};
170
171        static final String[] STMT_ABORT = {"ABORT"};
172        static final String[] STMT_ANALYZE = {"ANALYZE"};
173        static final String[] STMT_CLUSTER = {"CLUSTER"};
174        static final String[] STMT_COMMENT_ON = {"COMMENT", "ON"};
175        static final String[] STMT_COMMIT = {"COMMIT"};
176        static final String[] STMT_COPY = {"COPY"};
177        static final String[] STMT_DEALLOCATE_PREPARE = {"DEALLOCATE", "PREPARE"};
178        static final String[] STMT_DEALLOCATE = {"DEALLOCATE"};
179        static final String[] STMT_DECLARE = {"DECLARE"};
180        static final String[] STMT_DISCARD = {"DISCARD"};
181        static final String[] STMT_EXPLAIN_ANALYZE = {"EXPLAIN", "ANALYZE"};
182        static final String[] STMT_EXPLAIN = {"EXPLAIN"};
183        static final String[] STMT_FETCH = {"FETCH"};
184        static final String[] STMT_LISTEN = {"LISTEN"};
185        static final String[] STMT_LOAD = {"LOAD"};
186        static final String[] STMT_LOCK_TABLE = {"LOCK", "TABLE"};
187        static final String[] STMT_MOVE = {"MOVE"};
188        static final String[] STMT_NOTIFY = {"NOTIFY"};
189        static final String[] STMT_PREPARE = {"PREPARE"};
190        static final String[] STMT_PREPARE_TRANSATION = {"PREPARE", "TRANSATION"};
191        static final String[] STMT_REASSIGN_OWNED = {"REASSIGN", "OWNED"};
192        static final String[] STMT_REINDEX = {"REINDEX"};
193        static final String[] STMT_RELEASE_SAVEPOINT = {"RELEASE", "SAVEPOINT"};
194        static final String[] STMT_REVOKE = {"REVOKE"};
195        static final String[] STMT_ROLLBACK = {"ROLLBACK"};
196        static final String[] STMT_ROLLBACK_PREPARED = {"ROLLBACK", "PREPARED"};
197        static final String[] STMT_ROLLBACK_TO_SAVEPOINT = {"ROLLBACK", "TO", "SAVEPOINT"};
198        static final String[] STMT_SELECT_INTO = {"SELECT", "INTO"};
199
200        static final String[] STMT_SHOW = {"SHOW"};
201        static final String[] STMT_TRUNCATE = {"TRUNCATE"};
202        static final String[] STMT_UNLISTEN = {"UNLISTEN"};
203        static final String[] STMT_VACUUM = {"VACUUM"};
204        // static final String[] STMT_VALUES = {"VALUES"};
205
206        static final String[][] MISC_PHRASES = {STMT_ABORT, STMT_ANALYZE, STMT_CLUSTER, STMT_COMMENT_ON, STMT_COMMIT, STMT_COPY,
207            STMT_DEALLOCATE_PREPARE, STMT_DEALLOCATE, STMT_DECLARE, STMT_DISCARD, STMT_EXPLAIN_ANALYZE, STMT_EXPLAIN, STMT_FETCH,
208            STMT_LISTEN, STMT_LOAD, STMT_LOCK_TABLE, STMT_MOVE, STMT_NOTIFY, STMT_PREPARE, STMT_PREPARE_TRANSATION,
209            STMT_REASSIGN_OWNED, STMT_REINDEX, STMT_RELEASE_SAVEPOINT, STMT_REVOKE, STMT_ROLLBACK_TO_SAVEPOINT,
210            STMT_ROLLBACK_PREPARED, STMT_ROLLBACK, STMT_SELECT_INTO, STMT_SHOW, STMT_TRUNCATE, STMT_UNLISTEN, STMT_VACUUM // ,
211                                                                                                                          // STMT_VALUES
212        };
213
214        // CREATE TABLE, CREATE VIEW, CREATE INDEX, CREATE SEQUENCE, CREATE TRIGGER and GRANT
215        public final static String[] VALID_SCHEMA_CHILD_STMTS = {StandardDdlLexicon.TYPE_CREATE_TABLE_STATEMENT,
216            StandardDdlLexicon.TYPE_CREATE_VIEW_STATEMENT, StandardDdlLexicon.TYPE_GRANT_ON_TABLE_STATEMENT,
217            PostgresDdlLexicon.TYPE_CREATE_INDEX_STATEMENT, PostgresDdlLexicon.TYPE_CREATE_SEQUENCE_STATEMENT,
218            PostgresDdlLexicon.TYPE_CREATE_TRIGGER_STATEMENT, PostgresDdlLexicon.TYPE_GRANT_ON_SEQUENCE_STATEMENT,
219            PostgresDdlLexicon.TYPE_GRANT_ON_SCHEMA_STATEMENT};
220
221        public final static String[] COMPLEX_STMT_TYPES = {PostgresDdlLexicon.TYPE_CREATE_FUNCTION_STATEMENT};
222    }
223
224    // SPEC Name Aliases Description
225    //
226    // X bigint int8 signed eight-byte integer
227    // bigserial serial8 autoincrementing eight-byte integer
228    // X bit [ (n) ] fixed-length bit string
229    // X bit varying [ (n) ] varbit variable-length bit string
230    // boolean bool logical Boolean (true/false)
231    // box rectangular box on a plane
232    // bytea binary data ("byte array")
233    // X character varying [ (n) ] varchar [ (n) ] variable-length character string
234    // X character [ (n) ] char [ (n) ] fixed-length character string
235    // cidr IPv4 or IPv6 network address
236    // circle circle on a plane
237    // X date calendar date (year, month, day)
238    // X double precision float8 double precision floating-point number (8 bytes)
239    // inet IPv4 or IPv6 host address
240    // X integer int, int4 signed four-byte integer
241    // X interval [ fields ] [ (p) ] time span
242    // line infinite line on a plane
243    // lseg line segment on a plane
244    // macaddr MAC (Media Access Control) address
245    // money currency amount
246    // X numeric [ (p, s) ] decimal [ (p, s) ] exact numeric of selectable precision
247    // path geometric path on a plane
248    // point geometric point on a plane
249    // polygon closed geometric path on a plane
250    // X real float4 single precision floating-point number (4 bytes)
251    // X smallint int2 signed two-byte integer
252    // serial serial4 auto incrementing four-byte integer
253    // text variable-length character string
254    // time [ (p) ] [ without time zone ] time of day (no time zone)
255    // X time [ (p) ] with time zone timetz time of day, including time zone
256    // timestamp [ (p) ] [ without time zone ] date and time (no time zone)
257    // X timestamp [ (p) ] with time zone timestamptz date and time, including time zone
258    // tsquery text search query
259    // tsvector text search document
260    // txid_snapshot user-level transaction ID snapshot
261    // uuid universally unique identifier
262    // X xml XML data
263    // interval hour to minute
264
265    interface PostgresDataTypes {
266        static final String[] DTYPE_BIGSERIAL = {"BIGSERIAL"};
267        static final String[] DTYPE_BOX = {"BOX"};
268        static final String[] DTYPE_BYTEA = {"BYTEA"};
269        static final String[] DTYPE_CIDR = {"CIDR"};
270        static final String[] DTYPE_CIRCLE = {"CIRCLE"};
271        static final String[] DTYPE_INET = {"INET"};
272        static final String[] DTYPE_LINE = {"LINE"};
273        static final String[] DTYPE_LSEG = {"LSEG"};
274        static final String[] DTYPE_MACADDR = {"MACADDR"};
275        static final String[] DTYPE_MONEY = {"MONEY"};
276        static final String[] DTYPE_PATH = {"PATH"};
277        static final String[] DTYPE_POINT = {"POINT"};
278        static final String[] DTYPE_POLYGON = {"POLYGON"};
279        static final String[] DTYPE_SERIAL = {"SERIAL"};
280        static final String[] DTYPE_TEXT = {"TEXT"};
281        static final String[] DTYPE_TSQUERY = {"TSQUERY"};
282        static final String[] DTYPE_TSVECTOR = {"TSVECTOR"};
283        static final String[] DTYPE_TXID_SNAPSHOT = {"TXID_SNAPSHOT"};
284        static final String[] DTYPE_UUID = {"UUID"};
285        static final String[] DTYPE_XML = {"XML"};
286        static final String[] DTYPE_BOOLEAN = {"BOOLEAN"};
287        static final String[] DTYPE_BOOL = {"BOOL"};
288        static final String[] DTYPE_FLOAT4 = {"FLOAT4"};
289        static final String[] DTYPE_FLOAT8 = {"FLOAT8"};
290        static final String[] DTYPE_INT2 = {"INT2"};
291        static final String[] DTYPE_INT4 = {"INT4"};
292        static final String[] DTYPE_INT8 = {"INT8"};
293        static final String[] DTYPE_SERIAL4 = {"SERIAL4"};
294        static final String[] DTYPE_SERIAL8 = {"SERIAL8"};
295        static final String[] DTYPE_TIMESTAMPZ = {"TIMESTAMPZ"};
296        static final String[] DTYPE_VARBIT = {"VARBIT"};
297
298        static final List<String[]> CUSTOM_DATATYPE_START_PHRASES = Arrays.asList(DTYPE_BIGSERIAL,
299                                                                                  DTYPE_BOOL,
300                                                                                  DTYPE_BOOLEAN,
301                                                                                  DTYPE_BOX,
302                                                                                  DTYPE_BYTEA,
303                                                                                  DTYPE_CIDR,
304                                                                                  DTYPE_CIRCLE,
305                                                                                  DTYPE_FLOAT4,
306                                                                                  DTYPE_FLOAT8,
307                                                                                  DTYPE_INET,
308                                                                                  DTYPE_INT2,
309                                                                                  DTYPE_INT4,
310                                                                                  DTYPE_INT8,
311                                                                                  DTYPE_LINE,
312                                                                                  DTYPE_LSEG,
313                                                                                  DTYPE_MACADDR,
314                                                                                  DTYPE_MONEY,
315                                                                                  DTYPE_PATH,
316                                                                                  DTYPE_POINT,
317                                                                                  DTYPE_POLYGON,
318                                                                                  DTYPE_SERIAL,
319                                                                                  DTYPE_SERIAL4,
320                                                                                  DTYPE_SERIAL8,
321                                                                                  DTYPE_TEXT,
322                                                                                  DTYPE_TIMESTAMPZ,
323                                                                                  DTYPE_TSQUERY,
324                                                                                  DTYPE_TSVECTOR,
325                                                                                  DTYPE_TXID_SNAPSHOT,
326                                                                                  DTYPE_UUID,
327                                                                                  DTYPE_XML);
328
329        static final List<String> CUSTOM_DATATYPE_START_WORDS = Arrays.asList("BIGSERIAL",
330                                                                              "BOX",
331                                                                              "BOOLEAN",
332                                                                              "BOX",
333                                                                              "BYTEA",
334                                                                              "CIDR",
335                                                                              "CIRCLE",
336                                                                              "FLOAT4",
337                                                                              "FLOAT8",
338                                                                              "INET",
339                                                                              "INT2",
340                                                                              "INT4",
341                                                                              "INT8",
342                                                                              "LINE",
343                                                                              "LSEG",
344                                                                              "MACADDR",
345                                                                              "MONEY",
346                                                                              "PATH",
347                                                                              "POINT",
348                                                                              "POLYGON",
349                                                                              "SERIAL",
350                                                                              "SERIAL4",
351                                                                              "SERIAL8",
352                                                                              "TEXT",
353                                                                              "TIMESTAMPZ",
354                                                                              "TSQUERY",
355                                                                              "TSVECTOR",
356                                                                              "TXID_SNAPSHOT",
357                                                                              "UUID",
358                                                                              "XML");
359    }
360}