1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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
35
36
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
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"};
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"};
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"};
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"};
127 static final String[] STMT_CREATE_OR_REPLACE_FUNCTION = {CREATE, "OR", "REPLACE", "FUNCTION"};
128 static final String[] STMT_CREATE_OR_REPLACE_LIBRARY = {CREATE, "OR", "REPLACE", "LIBRARY"};
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"};
131 static final String[] STMT_CREATE_OR_REPLACE_PRIVATE_OUTLINE = {CREATE,"OR", "REPLACE", "PRIVATE", "OUTLINE"};
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"};
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"};
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"};
140 static final String[] STMT_CREATE_PFILE = {CREATE, "PFILE"};
141 static final String[] STMT_CREATE_PROCEDURE = {CREATE, "PROCEDURE"};
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
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"};
265 static final String[] DTYPE_VARCHAR2 = {"VARCHAR2"};
266 static final String[] DTYPE_NVARCHAR2 = {"NVARCHAR2"};
267 static final String[] DTYPE_NUMBER = {"NUMBER"};
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"};
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"};
278 static final String[] DTYPE_INTERVAL_DAY = {"INTERVAL", "DAY"};
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 }