View Javadoc

1   /*
2    * ModeShape (http://www.modeshape.org)
3    * See the COPYRIGHT.txt file distributed with this work for information
4    * regarding copyright ownership.  Some portions may be licensed
5    * to Red Hat, Inc. under one or more contributor license agreements.
6    * See the AUTHORS.txt file in the distribution for a full listing of 
7    * individual contributors.
8    *
9    * ModeShape is free software. Unless otherwise indicated, all code in ModeShape
10   * is licensed to you under the terms of the GNU Lesser General Public License as
11   * published by the Free Software Foundation; either version 2.1 of
12   * the License, or (at your option) any later version.
13   * 
14   * ModeShape is distributed in the hope that it will be useful,
15   * but WITHOUT ANY WARRANTY; without even the implied warranty of
16   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17   * Lesser General Public License for more details.
18   *
19   * You should have received a copy of the GNU Lesser General Public
20   * License along with this software; if not, write to the Free
21   * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
22   * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
23   */
24  package org.modeshape.sequencer.ddl.dialect.oracle;
25  
26  import java.util.Arrays;
27  import java.util.List;
28  
29  import org.modeshape.graph.property.Name;
30  import org.modeshape.sequencer.ddl.DdlConstants;
31  import org.modeshape.sequencer.ddl.StandardDdlLexicon;
32  
33  /**
34   * Oracle-specific constants including key words and statement start phrases.
35   * 
36   * @author blafond
37   *
38   */
39  public interface OracleDdlConstants extends DdlConstants {
40  	
41  	public static final String[] CUSTOM_KEYWORDS = {
42  		"ANALYZE", "ASSOCIATE", "TRUNCATE",	"MATERIALIZED",	"SAVEPOINT", "PURGE", "LOCK", "TRIGGER", "EXPLAIN",	"PLAN",	"DIMENSION", 
43  		"DIRECTORY", "DATABASE", "CONTROLFILE", "DISKGROUP", "INDEXTYPE", "SYNONYM", "SEQUENCE", "LIBRARY", "CLUSTER", "OUTLINE",
44  		"PACKAGE", "SPFILE", "PFILE", "AUDIT", "COMMIT", "PURGE", "MERGE", "RENAME", "FLASHBACK", "NOAUDIT", "DISASSOCIATE", 
45  		"NESTED", "REVOKE", "COMMENT", INDEX, "VARCHAR2", "NVARCHAR2", "NUMBER",
46  	  	"BINARY_FLOAT", "BINARY_DOUBLE", "LONG", "RAW", "BLOB", "CLOB", "NCLOB", "BFILE", "INTERVAL"
47  	};
48  	
49  	interface OracleStatementStartPhrases {
50  		static final String[] STMT_ALTER_CLUSTER = {ALTER, "CLUSTER"};
51  		static final String[] STMT_ALTER_DATABASE = {ALTER, "DATABASE"};
52  		static final String[] STMT_ALTER_DIMENSION = {ALTER, "DIMENSION"};
53  		static final String[] STMT_ALTER_DISKGROUP = {ALTER, "DISKGROUP"};
54  		static final String[] STMT_ALTER_FUNCTION = {ALTER, "FUNCTION"};
55  		static final String[] STMT_ALTER_INDEX = {ALTER, INDEX};
56  		static final String[] STMT_ALTER_INDEXTYPE = {ALTER, "INDEXTYPE"};
57  		static final String[] STMT_ALTER_JAVA = {ALTER, "JAVA"};
58  		static final String[] STMT_ALTER_MATERIALIZED = {ALTER, "MATERIALIZED"};
59  		static final String[] STMT_ALTER_OPERATOR = {ALTER, "OPERATOR"};
60  		static final String[] STMT_ALTER_OUTLINE = {ALTER, "OUTLINE"};
61  		static final String[] STMT_ALTER_PACKAGE = {ALTER, "PACKAGE"};
62  		static final String[] STMT_ALTER_PROCEDURE = {ALTER, "PROCEDURE"};
63  		static final String[] STMT_ALTER_PROFILE = {ALTER, "PROFILE"};
64  		static final String[] STMT_ALTER_RESOURCE = {ALTER, "RESOURCE"};
65  		static final String[] STMT_ALTER_ROLE = {ALTER, "ROLE"};
66  		static final String[] STMT_ALTER_ROLLBACK = {ALTER, "ROLLBACK"};
67  		static final String[] STMT_ALTER_SEQUENCE = {ALTER, "SEQUENCE"};
68  		static final String[] STMT_ALTER_SESSION = {ALTER, "SESSION"};
69  		static final String[] STMT_ALTER_SYSTEM = {ALTER, "SYSTEM"};
70  		static final String[] STMT_ALTER_TABLESPACE = {ALTER, "TABLESPACE"};
71  		static final String[] STMT_ALTER_TRIGGER = {ALTER, "TRIGGER"};
72  		static final String[] STMT_ALTER_TYPE = {ALTER, "TYPE"};
73  		static final String[] STMT_ALTER_USER = {ALTER, "USER"};
74  		static final String[] STMT_ALTER_VIEW = {ALTER, "VIEW"};
75  		
76  	    static final String[][] ALTER_PHRASES = { STMT_ALTER_CLUSTER, STMT_ALTER_DATABASE, 
77  			STMT_ALTER_DIMENSION, STMT_ALTER_DISKGROUP, STMT_ALTER_FUNCTION, STMT_ALTER_INDEX, STMT_ALTER_INDEXTYPE, STMT_ALTER_JAVA, 
78  			STMT_ALTER_MATERIALIZED, STMT_ALTER_OPERATOR, STMT_ALTER_OUTLINE, STMT_ALTER_PACKAGE, STMT_ALTER_PROCEDURE, 
79  			STMT_ALTER_PROFILE, STMT_ALTER_RESOURCE, STMT_ALTER_ROLE, STMT_ALTER_ROLLBACK, STMT_ALTER_SEQUENCE, 
80  			STMT_ALTER_SESSION, STMT_ALTER_SYSTEM, STMT_ALTER_TABLESPACE, STMT_ALTER_TRIGGER, STMT_ALTER_TYPE, 
81  			STMT_ALTER_USER, STMT_ALTER_VIEW  
82  		};
83  		
84  		static final String[] STMT_ANALYZE = {"ANALYZE"};
85  		static final String[] STMT_ASSOCIATE_STATISTICS = {"ASSOCIATE", "STATISTICS"};
86  		static final String[] STMT_AUDIT = {"AUDIT"};
87  		
88  		/*
89                  COMMIT [ WORK ] [ [ COMMENT string ]
90                      | [ WRITE [ IMMEDIATE | BATCH ] [ WAIT | NOWAIT ] ]
91                      | FORCE string [, integer ] ] ;
92                  
93                  COMMIT WORK COMMENT "some comment"
94                  
95                  COMMIT COMMENT "some comment"
96                  
97                  COMMIT WORK WRITE [ IMMEDIATE | BATCH ] [ WAIT | NOWAIT ]
98                  
99                  COMMIT WRITE IMMEDIATE NOWAIT;
100                 
101                 COMMIT WORK WRITE IMMEDIATE NOWAIT;
102                 
103                 COMMIT FORCE "some string", 10;
104 		 */
105 		static final String[] STMT_COMMIT_WORK = {"COMMIT", "WORK"};
106 		static final String[] STMT_COMMIT_WRITE = {"COMMIT", "WRITE"};
107 		static final String[] STMT_COMMIT_FORCE = {"COMMIT", "FORCE"};
108 		static final String[] STMT_COMMIT       = {"COMMIT"}; // DON"T REGISTER THIS STMT
109 		static final String[] STMT_COMMENT_ON = {"COMMENT", "ON"};
110 		
111 		static final String[] STMT_CREATE_CLUSTER = {CREATE, "CLUSTER"};
112 		static final String[] STMT_CREATE_CONTEXT = {CREATE, "CONTEXT"};
113 		static final String[] STMT_CREATE_CONTROLFILE = {CREATE, "CONTROLFILE"};
114 		static final String[] STMT_CREATE_DATABASE = {CREATE, "DATABASE"};
115 		static final String[] STMT_CREATE_DIMENSION = {CREATE, "DIMENSION"};
116 		static final String[] STMT_CREATE_DIRECTORY = {CREATE, "DIRECTORY"};
117 		static final String[] STMT_CREATE_DISKGROUP = {CREATE, "DISKGROUP"};
118 		static final String[] STMT_CREATE_FUNCTION = {CREATE, "FUNCTION"};   // PARSE UNTIL '/'
119 		static final String[] STMT_CREATE_INDEX = {CREATE, "INDEX"};
120 		static final String[] STMT_CREATE_INDEXTYPE = {CREATE, "INDEXTYPE"};
121 		static final String[] STMT_CREATE_JAVA = {CREATE, "JAVA"};
122 		static final String[] STMT_CREATE_LIBRARY = {CREATE, "LIBRARY"}; // PARSE UNTIL '/'
123 		static final String[] STMT_CREATE_MATERIALIZED_VIEW = {CREATE, "MATERIALIZED", "VIEW"};
124 		static final String[] STMT_CREATE_MATERIALIZED_VEIW_LOG = {CREATE, "MATERIALIZED", "VIEW", "LOG"};
125 		static final String[] STMT_CREATE_OPERATOR = {CREATE, "OPERATOR"};
126 		static final String[] STMT_CREATE_OR_REPLACE_DIRECTORY = {CREATE, "OR", "REPLACE", "DIRECTORY"};    // PARSE UNTIL '/'
127 		static final String[] STMT_CREATE_OR_REPLACE_FUNCTION = {CREATE, "OR", "REPLACE", "FUNCTION"};    // PARSE UNTIL '/'
128 		static final String[] STMT_CREATE_OR_REPLACE_LIBRARY = {CREATE, "OR", "REPLACE", "LIBRARY"};    // PARSE UNTIL '/'
129 		static final String[] STMT_CREATE_OR_REPLACE_OUTLINE = {CREATE,"OR", "REPLACE", "OUTLINE"};
130 		static final String[] STMT_CREATE_OR_REPLACE_PUBLIC_OUTLINE = {CREATE,"OR", "REPLACE", "PUBLIC", "OUTLINE"}; // TODO: BML
131 		static final String[] STMT_CREATE_OR_REPLACE_PRIVATE_OUTLINE = {CREATE,"OR", "REPLACE", "PRIVATE", "OUTLINE"}; // TODO: BML
132 		static final String[] STMT_CREATE_OR_REPLACE_PACKAGE = {CREATE,"OR", "REPLACE", "PACKAGE"};
133 		static final String[] STMT_CREATE_OR_REPLACE_PROCEDURE = {CREATE,"OR", "REPLACE", "PROCEDURE"}; // PARSE UNTIL '/'
134 		static final String[] STMT_CREATE_OR_REPLACE_PUBLIC_SYNONYM = {CREATE, "OR", "REPLACE", "PUBLIC", "SYNONYM"};
135 		static final String[] STMT_CREATE_OR_REPLACE_SYNONYM = {CREATE, "OR", "REPLACE", "SYNONYM"};
136 		static final String[] STMT_CREATE_OR_REPLACE_TRIGGER = {CREATE, "OR", "REPLACE", "TRIGGER"}; // PARSE UNTIL '/
137 		static final String[] STMT_CREATE_OR_REPLACE_TYPE = {CREATE, "OR", "REPLACE", "TYPE"};
138 		static final String[] STMT_CREATE_OUTLINE = {CREATE, "OUTLINE"};
139 		static final String[] STMT_CREATE_PACKAGE = {CREATE, "PACKAGE"};   // PARSE UNTIL '/'
140 		static final String[] STMT_CREATE_PFILE = {CREATE, "PFILE"};
141 		static final String[] STMT_CREATE_PROCEDURE = {CREATE, "PROCEDURE"}; // PARSE UNTIL '/'
142 		static final String[] STMT_CREATE_PROFILE = {CREATE, "PROFILE"};
143 		static final String[] STMT_CREATE_PUBLIC_DATABASE = {CREATE, "PUBLIC", "DATABASE"};
144 		static final String[] STMT_CREATE_PUBLIC_ROLLBACK = {CREATE, "PUBLIC", "ROLLBACK"};
145 		static final String[] STMT_CREATE_PUBLIC_SYNONYM = {CREATE, "PUBLIC", "SYNONYM"};
146 		static final String[] STMT_CREATE_ROLE = {CREATE, "ROLE"};
147 		static final String[] STMT_CREATE_ROLLBACK = {CREATE, "ROLLBACK"};
148 		static final String[] STMT_CREATE_SEQUENCE = {CREATE, "SEQUENCE"};
149 		static final String[] STMT_CREATE_SPFILE = {CREATE, "SPFILE"};
150 		static final String[] STMT_CREATE_SYNONYM = {CREATE, "SYNONYM"};
151 		static final String[] STMT_CREATE_TABLESPACE = {CREATE, "TABLESPACE"};
152 		static final String[] STMT_CREATE_TRIGGER = {CREATE, "TRIGGER"};
153 		static final String[] STMT_CREATE_TYPE = {CREATE, "TYPE"};
154 		static final String[] STMT_CREATE_USER = {CREATE, "USER"};
155 		static final String[] STMT_CREATE_UNIQUE_INDEX = {CREATE, "UNIQUE", "INDEX"};
156 		static final String[] STMT_CREATE_BITMAP_INDEX = {CREATE, "BITMAP", "INDEX"};
157 	
158 		public static final String[][] CREATE_PHRASES = {
159 			STMT_CREATE_CLUSTER, STMT_CREATE_CONTEXT, STMT_CREATE_CONTROLFILE, STMT_CREATE_DATABASE, STMT_CREATE_DIMENSION, 
160 			STMT_CREATE_DIRECTORY, STMT_CREATE_DISKGROUP, STMT_CREATE_FUNCTION, STMT_CREATE_INDEX, STMT_CREATE_INDEXTYPE, 
161 			STMT_CREATE_JAVA, STMT_CREATE_MATERIALIZED_VIEW, STMT_CREATE_MATERIALIZED_VEIW_LOG, STMT_CREATE_OPERATOR, 
162 			STMT_CREATE_OR_REPLACE_DIRECTORY, STMT_CREATE_OR_REPLACE_FUNCTION, STMT_CREATE_LIBRARY,
163             STMT_CREATE_OR_REPLACE_LIBRARY, STMT_CREATE_OR_REPLACE_OUTLINE, STMT_CREATE_OR_REPLACE_PROCEDURE,
164 			STMT_CREATE_OR_REPLACE_PUBLIC_SYNONYM, STMT_CREATE_OR_REPLACE_SYNONYM, STMT_CREATE_OR_REPLACE_PACKAGE, STMT_CREATE_OR_REPLACE_TRIGGER,
165 			STMT_CREATE_OR_REPLACE_TYPE, STMT_CREATE_OUTLINE, STMT_CREATE_PACKAGE, STMT_CREATE_PFILE, STMT_CREATE_PROCEDURE, 
166 			STMT_CREATE_PROFILE, STMT_CREATE_PUBLIC_DATABASE, STMT_CREATE_PUBLIC_ROLLBACK, STMT_CREATE_PUBLIC_SYNONYM, STMT_CREATE_ROLE,
167 			STMT_CREATE_ROLLBACK, STMT_CREATE_SEQUENCE, STMT_CREATE_SPFILE, STMT_CREATE_SYNONYM, STMT_CREATE_TABLESPACE, STMT_CREATE_TRIGGER, 
168 			STMT_CREATE_TYPE, STMT_CREATE_USER, STMT_CREATE_UNIQUE_INDEX, STMT_CREATE_BITMAP_INDEX,
169 			STMT_CREATE_TABLESPACE, STMT_CREATE_PROCEDURE
170 		};
171 		
172 	      static final String[][] SLASHED_STMT_PHRASES = {
173 	          STMT_CREATE_FUNCTION, 
174 	          STMT_CREATE_LIBRARY, 
175 	          STMT_CREATE_OR_REPLACE_DIRECTORY, 
176 	          STMT_CREATE_OR_REPLACE_FUNCTION,
177 	          STMT_CREATE_OR_REPLACE_LIBRARY, 
178 	          STMT_CREATE_OR_REPLACE_PROCEDURE, 
179 	          STMT_CREATE_OR_REPLACE_TRIGGER,
180 	          STMT_CREATE_PACKAGE, 
181 	          STMT_CREATE_PROCEDURE
182 	        };
183 		
184 		static final String[] STMT_DISASSOCIATE_STATISTICS = {"DISASSOCIATE", "STATISTICS"};
185 		
186 		static final String[] STMT_DROP_CLUSTER = {DROP, "CLUSTER"};
187 		static final String[] STMT_DROP_CONTEXT = {DROP, "CONTEXT"};
188 		static final String[] STMT_DROP_DATABASE = {DROP, "DATABASE"};
189 		static final String[] STMT_DROP_DIMENSION = {DROP, "DIMENSION"};
190 		static final String[] STMT_DROP_DIRECTORY = {DROP, "DIRECTORY"};
191 		static final String[] STMT_DROP_DISKGROUP = {DROP, "DISKGROUP"};
192 		static final String[] STMT_DROP_FUNCTION = {DROP, "FUNCTION"};
193 		static final String[] STMT_DROP_INDEX = {DROP, "INDEX"};
194 		static final String[] STMT_DROP_INDEXTYPE = {DROP, "INDEXTYPE"};
195 		static final String[] STMT_DROP_JAVA = {DROP, "JAVA"};
196 		static final String[] STMT_DROP_LIBRARY = {DROP, "LIBRARY"};
197 		static final String[] STMT_DROP_MATERIALIZED = {DROP, "MATERIALIZED"};
198 		static final String[] STMT_DROP_OPERATOR = {DROP, "OPERATOR"};
199 		static final String[] STMT_DROP_OUTLINE = {DROP, "OUTLINE"};
200 		static final String[] STMT_DROP_PACKAGE = {DROP, "PACKAGE"};
201 		static final String[] STMT_DROP_PROCEDURE = {DROP, "PROCEDURE"};
202 		static final String[] STMT_DROP_PROFILE = {DROP, "PROFILE"};
203 		static final String[] STMT_DROP_ROLE = {DROP, "ROLE"};
204 		static final String[] STMT_DROP_ROLLBACK = {DROP, "ROLLBACK"};
205 		static final String[] STMT_DROP_SEQUENCE = {DROP, "SEQUENCE"};
206 		static final String[] STMT_DROP_SYNONYM = {DROP, "SYNONYM"};
207 		static final String[] STMT_DROP_TABLESPACE = {DROP, "TABLESPACE"};
208 		static final String[] STMT_DROP_TRIGGER = {DROP, "TRIGGER"};
209 		static final String[] STMT_DROP_TYPE = {DROP, "TYPE"};
210 		static final String[] STMT_DROP_USER = {DROP, "USER"};
211 		
212 		static final String[] STMT_DROP_PUBLIC_DATABASE = {DROP, "PUBLIC", "DATABASE"};
213 		static final String[] STMT_DROP_PUBLIC_SYNONYM = {DROP, "PUBLIC", "SYNONYM"};
214 		
215 		static final String[][] DROP_PHRASES = {
216 			STMT_DROP_CLUSTER, STMT_DROP_CONTEXT, STMT_DROP_DATABASE, STMT_DROP_DIMENSION, STMT_DROP_DIRECTORY, STMT_DROP_DISKGROUP,
217 			STMT_DROP_FUNCTION, STMT_DROP_INDEX, STMT_DROP_INDEXTYPE, STMT_DROP_JAVA, STMT_DROP_LIBRARY, STMT_DROP_MATERIALIZED,
218 			STMT_DROP_OPERATOR, STMT_DROP_OUTLINE, STMT_DROP_PACKAGE, STMT_DROP_PROCEDURE, STMT_DROP_PROFILE, STMT_DROP_ROLE, 
219 			STMT_DROP_ROLLBACK, STMT_DROP_SEQUENCE, STMT_DROP_SYNONYM, STMT_DROP_TABLESPACE, STMT_DROP_TRIGGER, STMT_DROP_TYPE,
220 			STMT_DROP_USER, STMT_DROP_PUBLIC_DATABASE, STMT_DROP_PUBLIC_SYNONYM
221 		};
222 		
223 		static final String[] STMT_EXPLAIN_PLAN = {"EXPLAIN", "PLAN"};
224 		static final String[] STMT_FLASHBACK = {"FLASHBACK"};
225 		static final String[] STMT_LOCK_TABLE = {"LOCK", "TABLE"};
226 		static final String[] STMT_MERGE = {"MERGE"};
227 		static final String[] STMT_NOAUDIT = {"NOAUDIT"};
228 		static final String[] STMT_PURGE = {"PURGE"};
229 		static final String[] STMT_RENAME = {"RENAME"};
230 		static final String[] STMT_ROLLBACK_TO_SAVEPOINT = {"ROLLBACK", "TO", "SAVEPOINT"};
231 		static final String[] STMT_ROLLBACK_WORK = {"ROLLBACK", "WORK"};
232 		static final String[] STMT_ROLLBACK = {"ROLLBACK"};
233 		static final String[] STMT_SAVEPOINT = {"SAVEPOINT"};
234 		static final String[] STMT_SET_CONSTRAINT = {SET, "CONSTRAINT"};
235 		static final String[] STMT_SET_CONSTRAINTS = {SET, "CONSTRAINTS"};
236 		static final String[] STMT_SET_ROLE = {SET, "ROLE"};
237 		static final String[] STMT_SET_TRANSACTION = {SET, "TRANSACTION"};
238 		static final String[] STMT_TRUNCATE = {"TRUNCATE"};
239 		
240 		static final String[][] SET_PHRASES = {
241 			STMT_SET_CONSTRAINT, STMT_SET_CONSTRAINTS, STMT_SET_ROLE, STMT_SET_TRANSACTION
242 		};
243 		
244 		static final String[][] MISC_PHRASES = {
245 			STMT_ANALYZE, STMT_ASSOCIATE_STATISTICS, STMT_AUDIT, STMT_COMMIT_WORK, STMT_COMMIT_WRITE, STMT_COMMIT_FORCE, 
246 			STMT_COMMENT_ON, STMT_DISASSOCIATE_STATISTICS,
247 			STMT_EXPLAIN_PLAN, STMT_FLASHBACK, STMT_LOCK_TABLE, STMT_MERGE, STMT_NOAUDIT, STMT_PURGE, 
248 			STMT_RENAME, STMT_ROLLBACK_TO_SAVEPOINT, STMT_ROLLBACK_WORK, STMT_ROLLBACK, STMT_SAVEPOINT, STMT_TRUNCATE
249 		};
250 		
251 	    // CREATE TABLE, CREATE VIEW, and GRANT statements.
252 	    public final static Name[] VALID_SCHEMA_CHILD_STMTS = {
253 	    	StandardDdlLexicon.TYPE_CREATE_TABLE_STATEMENT, 
254 	    	StandardDdlLexicon.TYPE_CREATE_VIEW_STATEMENT,
255 	    	StandardDdlLexicon.TYPE_GRANT_STATEMENT
256 	  	};
257 	    
258 	    public final static Name[] COMPLEX_STMT_TYPES = {
259 	    	OracleDdlLexicon.TYPE_CREATE_FUNCTION_STATEMENT
260 	    };
261 	}
262 	
263 	interface OracleDataTypes {
264 		static final String[] DTYPE_CHAR_ORACLE = {"CHAR"}; //CHAR(size [BYTE | CHAR])
265 		static final String[] DTYPE_VARCHAR2 = {"VARCHAR2"}; // VARCHAR2(size [BYTE | CHAR])
266 		static final String[] DTYPE_NVARCHAR2 = {"NVARCHAR2"}; // NVARCHAR2(size)
267 		static final String[] DTYPE_NUMBER = {"NUMBER"}; // NUMBER(p,s)
268 		static final String[] DTYPE_BINARY_FLOAT = {"BINARY_FLOAT "};
269 		static final String[] DTYPE_BINARY_DOUBLE = {"BINARY_DOUBLE"};
270 		static final String[] DTYPE_LONG = {"LONG"};
271 		static final String[] DTYPE_LONG_RAW = {"LONG", "RAW"};
272 		static final String[] DTYPE_RAW = {"RAW"}; // RAW(size)
273 		static final String[] DTYPE_BLOB = {"BLOB"};
274 		static final String[] DTYPE_CLOB = {"CLOB"};
275 		static final String[] DTYPE_NCLOB = {"NCLOB"};
276 		static final String[] DTYPE_BFILE = {"BFILE"};
277 		static final String[] DTYPE_INTERVAL_YEAR = {"INTERVAL", "YEAR"}; //INTERVAL YEAR (year_precision) TO MONTH
278 		static final String[] DTYPE_INTERVAL_DAY = {"INTERVAL", "DAY"}; //	INTERVAL DAY (day_precision) TO SECOND (fractional_seconds_precision)
279 	
280 	  	static final List<String[]> CUSTOM_DATATYPE_START_PHRASES = 
281 	  		Arrays.asList(new String[][] {
282 	  				DTYPE_CHAR_ORACLE, DTYPE_VARCHAR2, DTYPE_NVARCHAR2, DTYPE_NUMBER, DTYPE_BINARY_FLOAT, DTYPE_BINARY_DOUBLE,
283 	  				DTYPE_LONG, DTYPE_LONG_RAW, DTYPE_RAW, DTYPE_BLOB, DTYPE_CLOB, DTYPE_NCLOB, DTYPE_BFILE, DTYPE_INTERVAL_YEAR,
284 	  				DTYPE_INTERVAL_DAY
285 	  	  	});
286 		
287 	  	static final List<String> CUSTOM_DATATYPE_START_WORDS = 
288 	  		Arrays.asList(new String[] {"VARCHAR2", "NVARCHAR2", "NUMBER",
289 	  	  		"BINARY_FLOAT", "BINARY_DOUBLE", "LONG", "RAW", "BLOB", "CLOB", "NCLOB", "BFILE", "INTERVAL"
290 	  	  	});
291 	}
292 }