commit f9a08ea8da37d082e5f3c8f5ed2ae25fa978c304 Author: GotPPay Date: Fri Feb 23 00:40:26 2018 +0100 First commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8f735f9 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +generated +output +example + + diff --git a/Gemfile b/Gemfile new file mode 100644 index 0000000..9cac0ee --- /dev/null +++ b/Gemfile @@ -0,0 +1,2 @@ +source 'https://rubygems.org' +gem 'fiddle' \ No newline at end of file diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 0000000..366f08c --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,13 @@ +GEM + remote: https://rubygems.org/ + specs: + fiddle (1.0.0) + +PLATFORMS + ruby + +DEPENDENCIES + fiddle + +BUNDLED WITH + 1.16.1 diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..db26998 --- /dev/null +++ b/Makefile @@ -0,0 +1,36 @@ + +JAVA=/usr/bin/java +OUTPUT=output +GENERATED=generated +GRAMMAR1=PlSqlParser.g4 +GRAMMAR2=PlSqlLexer.g4 + +# here is where you plug in the runtime for your OS +RUNTIME=runtime-linux +CC=g++ +CCARGS=-c -I $(RUNTIME)/antlr4-runtime/ -I $(GENERATED) -std=c++11 +LDARGS=-g +LIBS=$(RUNTIME)/lib/libantlr4-runtime.a + +all: parser + +parser: dirs antlr4 example.cpp + $(CC) $(CCARGS) example.cpp -o $(OUTPUT)/example.o + $(CC) $(CCARGS) $(GENERATED)/PlSqlParserBaseListener.cpp -o $(OUTPUT)/PlSqlParserBaseListener.o + $(CC) $(CCARGS) $(GENERATED)/PlSqlLexer.cpp -o $(OUTPUT)/PlSqlLexer.o + $(CC) $(CCARGS) $(GENERATED)/PlSqlParserListener.cpp -o $(OUTPUT)/PlSqlParserListener.o + $(CC) $(CCARGS) $(GENERATED)/PlSqlParser.cpp -o $(OUTPUT)/PlSqlParser.o + + #$(CC) $(LDARGS) $(OUTPUT)/parser.o $(OUTPUT)/PlSqlBaseListener.o $(OUTPUT)/PlSqlLexer.o $(OUTPUT)/PlSqlListener.o $(OUTPUT)/PlSqlParser.o $(LIBS) -o parser + $(CC) $(LDARGS) $(OUTPUT)/example.o $(OUTPUT)/PlSqlLexer.o $(OUTPUT)/PlSqlParser.o $(LIBS) -o example + +antlr4: $(GRAMMAR1) $(GRAMMAR2) + $(JAVA) -jar antlr-4.7-complete.jar -Dlanguage=Cpp -o $(GENERATED) $(GRAMMAR1) $(GRAMMAR2) + +dirs: + mkdir -p $(OUTPUT) + mkdir -p $(GENERATED) + +clean: + rm -rf $(OUTPUT) + rm -rf $(GENERATED) diff --git a/PlSqlLexer.g4 b/PlSqlLexer.g4 new file mode 100644 index 0000000..168cf75 --- /dev/null +++ b/PlSqlLexer.g4 @@ -0,0 +1,2415 @@ +/** + * Oracle(c) PL/SQL 11g Parser + * + * Copyright (c) 2009-2011 Alexandre Porcelli + * Copyright (c) 2015-2017 Ivan Kochurkin (KvanTTT, kvanttt@gmail.com, Positive Technologies). + * Copyright (c) 2017 Mark Adams + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +lexer grammar PlSqlLexer; + +ABORT: A B O R T; +ABS: A B S; +ACCESS: A C C E S S; +ACCESSED: A C C E S S E D; +ACCOUNT: A C C O U N T; +ACL: A C L; +ACOS: A C O S; +ACTION: A C T I O N; +ACTIONS: A C T I O N S; +ACTIVATE: A C T I V A T E; +ACTIVE: A C T I V E; +ACTIVE_COMPONENT: A C T I V E '_' C O M P O N E N T; +ACTIVE_DATA: A C T I V E '_' D A T A; +ACTIVE_FUNCTION: A C T I V E '_' F U N C T I O N; +ACTIVE_TAG: A C T I V E '_' T A G; +ACTIVITY: A C T I V I T Y; +ADAPTIVE_PLAN: A D A P T I V E '_' P L A N; +ADD: A D D; +ADD_COLUMN: A D D '_' C O L U M N; +ADD_GROUP: A D D '_' G R O U P; +ADD_MONTHS: A D D '_' M O N T H S; +ADJ_DATE: A D J '_' D A T E; +ADMIN: A D M I N; +ADMINISTER: A D M I N I S T E R; +ADMINISTRATOR: A D M I N I S T R A T O R; +ADVANCED: A D V A N C E D; +ADVISE: A D V I S E; +ADVISOR: A D V I S O R; +AFD_DISKSTRING: A F D '_' D I S K S T R I N G; +AFTER: A F T E R; +AGENT: A G E N T; +AGGREGATE: A G G R E G A T E; +A_LETTER: A; +ALIAS: A L I A S; +ALL: A L L; +ALLOCATE: A L L O C A T E; +ALLOW: A L L O W; +ALL_ROWS: A L L '_' R O W S; +ALTER: A L T E R; +ALWAYS: A L W A Y S; +ANALYZE: A N A L Y Z E; +ANCILLARY: A N C I L L A R Y; +AND: A N D; +AND_EQUAL: A N D '_' E Q U A L; +ANOMALY: A N O M A L Y; +ANSI_REARCH: A N S I '_' R E A R C H; +ANTIJOIN: A N T I J O I N; +ANY: A N Y; +ANYSCHEMA: A N Y S C H E M A; +APPEND: A P P E N D; +APPENDCHILDXML: A P P E N D C H I L D X M L; +APPEND_VALUES: A P P E N D '_' V A L U E S; +APPLICATION: A P P L I C A T I O N; +APPLY: A P P L Y; +APPROX_COUNT_DISTINCT: A P P R O X '_' C O U N T '_' D I S T I N C T; +ARCHIVAL: A R C H I V A L; +ARCHIVE: A R C H I V E; +ARCHIVED: A R C H I V E D; +ARCHIVELOG: A R C H I V E L O G; +ARRAY: A R R A Y; +AS: A S; +ASC: A S C; +ASCII: A S C I I; +ASCIISTR: A S C I I S T R; +ASIN: A S I N; +ASIS: A S I S; +ASSEMBLY: A S S E M B L Y; +ASSIGN: A S S I G N; +ASSOCIATE: A S S O C I A T E; +ASYNC: A S Y N C; +ASYNCHRONOUS: A S Y N C H R O N O U S; +ATAN2: A T A N '2'; +ATAN: A T A N; +AT: A T; +ATTRIBUTE: A T T R I B U T E; +ATTRIBUTES: A T T R I B U T E S; +AUDIT: A U D I T; +AUTHENTICATED: A U T H E N T I C A T E D; +AUTHENTICATION: A U T H E N T I C A T I O N; +AUTHID: A U T H I D; +AUTHORIZATION: A U T H O R I Z A T I O N; +AUTOALLOCATE: A U T O A L L O C A T E; +AUTO: A U T O; +AUTOEXTEND: A U T O E X T E N D; +AUTO_LOGIN: A U T O '_' L O G I N; +AUTOMATIC: A U T O M A T I C; +AUTONOMOUS_TRANSACTION: A U T O N O M O U S '_' T R A N S A C T I O N; +AUTO_REOPTIMIZE: A U T O '_' R E O P T I M I Z E; +AVAILABILITY: A V A I L A B I L I T Y; +AVRO: A V R O; +BACKGROUND: B A C K G R O U N D; +BACKUP: B A C K U P; +BASIC: B A S I C; +BASICFILE: B A S I C F I L E; +BATCH: B A T C H; +BATCHSIZE: B A T C H S I Z E; +BATCH_TABLE_ACCESS_BY_ROWID: B A T C H '_' T A B L E '_' A C C E S S '_' B Y '_' R O W I D; +BECOME: B E C O M E; +BEFORE: B E F O R E; +BEGIN: B E G I N; +BEGINNING: B E G I N N I N G; +BEGIN_OUTLINE_DATA: B E G I N '_' O U T L I N E '_' D A T A; +BEHALF: B E H A L F; +BEQUEATH: B E Q U E A T H; +BETWEEN: B E T W E E N; +BFILE: B F I L E; +BFILENAME: B F I L E N A M E; +BIGFILE: B I G F I L E; +BINARY: B I N A R Y; +BINARY_DOUBLE: B I N A R Y '_' D O U B L E; +BINARY_DOUBLE_INFINITY: B I N A R Y '_' D O U B L E '_' I N F I N I T Y; +BINARY_DOUBLE_MUJO: B I N A R Y '_' D O U B L E '_' N A N; +BINARY_FLOAT: B I N A R Y '_' F L O A T; +BINARY_FLOAT_INFINITY: B I N A R Y '_' F L O A T '_' I N F I N I T Y; +BINARY_FLOAT_MUJO: B I N A R Y '_' F L O A T '_' N A N; +BINARY_INTEGER: B I N A R Y '_' I N T E G E R; +BIND_AWARE: B I N D '_' A W A R E; +BINDING: B I N D I N G; +BIN_TO_NUM: B I N '_' T O '_' N U M; +BITAND: B I T A N D; +BITMAP_AND: B I T M A P '_' A N D; +BITMAP: B I T M A P; +BITMAPS: B I T M A P S; +BITMAP_TREE: B I T M A P '_' T R E E; +BITS: B I T S; +BLOB: B L O B; +BLOCK: B L O C K; +BLOCK_RANGE: B L O C K '_' R A N G E; +BLOCKS: B L O C K S; +BLOCKSIZE: B L O C K S I Z E; +BODY: B O D Y; +BOOLEAN: B O O L E A N; +BOTH: B O T H; +BOUND: B O U N D; +BRANCH: B R A N C H; +BREADTH: B R E A D T H; +BROADCAST: B R O A D C A S T; +BSON: B S O N; +BUFFER: B U F F E R; +BUFFER_CACHE: B U F F E R '_' C A C H E; +BUFFER_POOL: B U F F E R '_' P O O L; +BUILD: B U I L D; +BULK: B U L K; +BY: B Y; +BYPASS_RECURSIVE_CHECK: B Y P A S S '_' R E C U R S I V E '_' C H E C K; +BYPASS_UJVC: B Y P A S S '_' U J V C; +BYTE: B Y T E; +CACHE: C A C H E; +CACHE_CB: C A C H E '_' C B; +CACHE_INSTANCES: C A C H E '_' I N S T A N C E S; +CACHE_TEMP_TABLE: C A C H E '_' T E M P '_' T A B L E; +CACHING: C A C H I N G; +CALCULATED: C A L C U L A T E D; +CALLBACK: C A L L B A C K; +CALL: C A L L; +CANCEL: C A N C E L; +CANONICAL: C A N O N I C A L; +CAPACITY: C A P A C I T Y; +CARDINALITY: C A R D I N A L I T Y; +CASCADE: C A S C A D E; +CASE: C A S E; +CAST: C A S T; +CATEGORY: C A T E G O R Y; +CDBDEFAULT: C D B '$' D E F A U L T; +CEIL: C E I L; +CELL_FLASH_CACHE: C E L L '_' F L A S H '_' C A C H E; +CERTIFICATE: C E R T I F I C A T E; +CFILE: C F I L E; +CHAINED: C H A I N E D; +CHANGE: C H A N G E; +CHANGE_DUPKEY_ERROR_INDEX: C H A N G E '_' D U P K E Y '_' E R R O R '_' I N D E X; +CHARACTER: C H A R A C T E R; +CHAR: C H A R; +CHAR_CS: C H A R '_' C S; +CHARTOROWID: C H A R T O R O W I D; +CHECK_ACL_REWRITE: C H E C K '_' A C L '_' R E W R I T E; +CHECK: C H E C K; +CHECKPOINT: C H E C K P O I N T; +CHILD: C H I L D; +CHOOSE: C H O O S E; +CHR: C H R; +CHUNK: C H U N K; +CLASS: C L A S S; +CLASSIFIER: C L A S S I F I E R; +CLEANUP: C L E A N U P; +CLEAR: C L E A R; +C_LETTER: C; +CLIENT: C L I E N T; +CLOB: C L O B; +CLONE: C L O N E; +CLOSE_CACHED_OPEN_CURSORS: C L O S E '_' C A C H E D '_' O P E N '_' C U R S O R S; +CLOSE: C L O S E; +CLUSTER_BY_ROWID: C L U S T E R '_' B Y '_' R O W I D; +CLUSTER: C L U S T E R; +CLUSTER_DETAILS: C L U S T E R '_' D E T A I L S; +CLUSTER_DISTANCE: C L U S T E R '_' D I S T A N C E; +CLUSTER_ID: C L U S T E R '_' I D; +CLUSTERING: C L U S T E R I N G; +CLUSTERING_FACTOR: C L U S T E R I N G '_' F A C T O R; +CLUSTER_PROBABILITY: C L U S T E R '_' P R O B A B I L I T Y; +CLUSTER_SET: C L U S T E R '_' S E T; +COALESCE: C O A L E S C E; +COALESCE_SQ: C O A L E S C E '_' S Q; +COARSE: C O A R S E; +CO_AUTH_IND: C O '_' A U T H '_' I N D; +COLD: C O L D; +COLLECT: C O L L E C T; +COLUMNAR: C O L U M N A R; +COLUMN_AUTH_INDICATOR: C O L U M N '_' A U T H '_' I N D I C A T O R; +COLUMN: C O L U M N; +COLUMNS: C O L U M N S; +COLUMN_STATS: C O L U M N '_' S T A T S; +COLUMN_VALUE: C O L U M N '_' V A L U E; +COMMENT: C O M M E N T; +COMMIT: C O M M I T; +COMMITTED: C O M M I T T E D; +COMMON_DATA: C O M M O N '_' D A T A; +COMPACT: C O M P A C T; +COMPATIBILITY: C O M P A T I B I L I T Y; +COMPILE: C O M P I L E; +COMPLETE: C O M P L E T E; +COMPLIANCE: C O M P L I A N C E; +COMPONENT: C O M P O N E N T; +COMPONENTS: C O M P O N E N T S; +COMPOSE: C O M P O S E; +COMPOSITE: C O M P O S I T E; +COMPOSITE_LIMIT: C O M P O S I T E '_' L I M I T; +COMPOUND: C O M P O U N D; +COMPRESS: C O M P R E S S; +COMPUTE: C O M P U T E; +CONCAT: C O N C A T; +CON_DBID_TO_ID: C O N '_' D B I D '_' T O '_' I D; +CONDITIONAL: C O N D I T I O N A L; +CONDITION: C O N D I T I O N; +CONFIRM: C O N F I R M; +CONFORMING: C O N F O R M I N G; +CON_GUID_TO_ID: C O N '_' G U I D '_' T O '_' I D; +CON_ID: C O N '_' I D; +CON_NAME_TO_ID: C O N '_' N A M E '_' T O '_' I D; +CONNECT_BY_CB_WHR_ONLY: C O N N E C T '_' B Y '_' C B '_' W H R '_' O N L Y; +CONNECT_BY_COMBINE_SW: C O N N E C T '_' B Y '_' C O M B I N E '_' S W; +CONNECT_BY_COST_BASED: C O N N E C T '_' B Y '_' C O S T '_' B A S E D; +CONNECT_BY_ELIM_DUPS: C O N N E C T '_' B Y '_' E L I M '_' D U P S; +CONNECT_BY_FILTERING: C O N N E C T '_' B Y '_' F I L T E R I N G; +CONNECT_BY_ISCYCLE: C O N N E C T '_' B Y '_' I S C Y C L E; +CONNECT_BY_ISLEAF: C O N N E C T '_' B Y '_' I S L E A F; +CONNECT_BY_ROOT: C O N N E C T '_' B Y '_' R O O T; +CONNECT: C O N N E C T; +CONNECT_TIME: C O N N E C T '_' T I M E; +CONSIDER: C O N S I D E R; +CONSISTENT: C O N S I S T E N T; +CONSTANT: C O N S T A N T; +CONST: C O N S T; +CONSTRAINT: C O N S T R A I N T; +CONSTRAINTS: C O N S T R A I N T S; +CONSTRUCTOR: C O N S T R U C T O R; +CONTAINER: C O N T A I N E R; +CONTAINER_DATA: C O N T A I N E R '_' D A T A; +CONTAINERS: C O N T A I N E R S; +CONTENT: C O N T E N T; +CONTENTS: C O N T E N T S; +CONTEXT: C O N T E X T; +CONTINUE: C O N T I N U E; +CONTROLFILE: C O N T R O L F I L E; +CON_UID_TO_ID: C O N '_' U I D '_' T O '_' I D; +CONVERT: C O N V E R T; +COOKIE: C O O K I E; +COPY: C O P Y; +CORR_K: C O R R '_' K; +CORR_S: C O R R '_' S; +CORRUPTION: C O R R U P T I O N; +CORRUPT_XID_ALL: C O R R U P T '_' X I D '_' A L L; +CORRUPT_XID: C O R R U P T '_' X I D; +COS: C O S; +COSH: C O S H; +COST: C O S T; +COST_XML_QUERY_REWRITE: C O S T '_' X M L '_' Q U E R Y '_' R E W R I T E; +COUNT: C O U N T; +COVAR_POP: C O V A R '_' P O P; +COVAR_SAMP: C O V A R '_' S A M P; +CPU_COSTING: C P U '_' C O S T I N G; +CPU_PER_CALL: C P U '_' P E R '_' C A L L; +CPU_PER_SESSION: C P U '_' P E R '_' S E S S I O N; +CRASH: C R A S H; +CREATE: C R E A T E; +CREATE_FILE_DEST: C R E A T E '_' F I L E '_' D E S T; +CREATE_STORED_OUTLINES: C R E A T E '_' S T O R E D '_' O U T L I N E S; +CREATION: C R E A T I O N; +CREDENTIAL: C R E D E N T I A L; +CRITICAL: C R I T I C A L; +CROSS: C R O S S; +CROSSEDITION: C R O S S E D I T I O N; +CSCONVERT: C S C O N V E R T; +CUBE_AJ: C U B E '_' A J; +CUBE: C U B E; +CUBE_GB: C U B E '_' G B; +CUBE_SJ: C U B E '_' S J; +CUME_DISTM: C U M E '_' D I S T M; +CURRENT: C U R R E N T; +CURRENT_DATE: C U R R E N T '_' D A T E; +CURRENT_SCHEMA: C U R R E N T '_' S C H E M A; +CURRENT_TIME: C U R R E N T '_' T I M E; +CURRENT_TIMESTAMP: C U R R E N T '_' T I M E S T A M P; +CURRENT_USER: C U R R E N T '_' U S E R; +CURRENTV: C U R R E N T V; +CURSOR: C U R S O R; +CURSOR_SHARING_EXACT: C U R S O R '_' S H A R I N G '_' E X A C T; +CURSOR_SPECIFIC_SEGMENT: C U R S O R '_' S P E C I F I C '_' S E G M E N T; +CUSTOMDATUM: C U S T O M D A T U M; +CV: C V; +CYCLE: C Y C L E; +DANGLING: D A N G L I N G; +DATABASE: D A T A B A S E; +DATA: D A T A; +DATAFILE: D A T A F I L E; +DATAFILES: D A T A F I L E S; +DATAMOVEMENT: D A T A M O V E M E N T; +DATAOBJNO: D A T A O B J N O; +DATAOBJ_TO_MAT_PARTITION: D A T A O B J '_' T O '_' M A T '_' P A R T I T I O N; +DATAOBJ_TO_PARTITION: D A T A O B J '_' T O '_' P A R T I T I O N; +DATAPUMP: D A T A P U M P; +DATA_SECURITY_REWRITE_LIMIT: D A T A '_' S E C U R I T Y '_' R E W R I T E '_' L I M I T; +DATE: D A T E; +DATE_MODE: D A T E '_' M O D E; +DAY: D A Y; +DAYS: D A Y S; +DBA: D B A; +DBA_RECYCLEBIN: D B A '_' R E C Y C L E B I N; +DBMS_STATS: D B M S '_' S T A T S; +DB_ROLE_CHANGE: D B '_' R O L E '_' C H A N G E; +DBTIMEZONE: D B T I M E Z O N E; +DB_UNIQUE_NAME: D B '_' U N I Q U E '_' N A M E; +DB_VERSION: D B '_' V E R S I O N; +DDL: D D L; +DEALLOCATE: D E A L L O C A T E; +DEBUG: D E B U G; +DEBUGGER: D E B U G G E R; +DEC: D E C; +DECIMAL: D E C I M A L; +DECLARE: D E C L A R E; +DECOMPOSE: D E C O M P O S E; +DECORRELATE: D E C O R R E L A T E; +DECR: D E C R; +DECREMENT: D E C R E M E N T; +DECRYPT: D E C R Y P T; +DEDUPLICATE: D E D U P L I C A T E; +DEFAULT: D E F A U L T; +DEFAULTS: D E F A U L T S; +DEFERRABLE: D E F E R R A B L E; +DEFERRED: D E F E R R E D; +DEFINED: D E F I N E D; +DEFINE: D E F I N E; +DEFINER: D E F I N E R; +DEGREE: D E G R E E; +DELAY: D E L A Y; +DELEGATE: D E L E G A T E; +DELETE_ALL: D E L E T E '_' A L L; +DELETE: D E L E T E; +DELETEXML: D E L E T E X M L; +DEMAND: D E M A N D; +DENSE_RANKM: D E N S E '_' R A N K M; +DEPENDENT: D E P E N D E N T; +DEPTH: D E P T H; +DEQUEUE: D E Q U E U E; +DEREF: D E R E F; +DEREF_NO_REWRITE: D E R E F '_' N O '_' R E W R I T E; +DESC: D E S C; +DESTROY: D E S T R O Y; +DETACHED: D E T A C H E D; +DETERMINES: D E T E R M I N E S; +DETERMINISTIC: D E T E R M I N I S T I C; +DICTIONARY: D I C T I O N A R Y; +DIMENSION: D I M E N S I O N; +DIMENSIONS: D I M E N S I O N S; +DIRECT_LOAD: D I R E C T '_' L O A D; +DIRECTORY: D I R E C T O R Y; +DIRECT_PATH: D I R E C T '_' P A T H; +DISABLE_ALL: D I S A B L E '_' A L L; +DISABLE: D I S A B L E; +DISABLE_PARALLEL_DML: D I S A B L E '_' P A R A L L E L '_' D M L; +DISABLE_PRESET: D I S A B L E '_' P R E S E T; +DISABLE_RPKE: D I S A B L E '_' R P K E; +DISALLOW: D I S A L L O W; +DISASSOCIATE: D I S A S S O C I A T E; +DISCARD: D I S C A R D; +DISCONNECT: D I S C O N N E C T; +DISK: D I S K; +DISKGROUP: D I S K G R O U P; +DISKS: D I S K S; +DISMOUNT: D I S M O U N T; +DISTINCT: D I S T I N C T; +DISTINGUISHED: D I S T I N G U I S H E D; +DISTRIBUTED: D I S T R I B U T E D; +DISTRIBUTE: D I S T R I B U T E; +DML: D M L; +DML_UPDATE: D M L '_' U P D A T E; +DOCFIDELITY: D O C F I D E L I T Y; +DOCUMENT: D O C U M E N T; +DOMAIN_INDEX_FILTER: D O M A I N '_' I N D E X '_' F I L T E R; +DOMAIN_INDEX_NO_SORT: D O M A I N '_' I N D E X '_' N O '_' S O R T; +DOMAIN_INDEX_SORT: D O M A I N '_' I N D E X '_' S O R T; +DOUBLE: D O U B L E; +DOWNGRADE: D O W N G R A D E; +DRIVING_SITE: D R I V I N G '_' S I T E; +DROP_COLUMN: D R O P '_' C O L U M N; +DROP: D R O P; +DROP_GROUP: D R O P '_' G R O U P; +DSINTERVAL_UNCONSTRAINED: D S I N T E R V A L '_' U N C O N S T R A I N E D; +DST_UPGRADE_INSERT_CONV: D S T '_' U P G R A D E '_' I N S E R T '_' C O N V; +DUMP: D U M P; +DUPLICATE: D U P L I C A T E; +DV: D V; +DYNAMIC: D Y N A M I C; +DYNAMIC_SAMPLING: D Y N A M I C '_' S A M P L I N G; +DYNAMIC_SAMPLING_EST_CDN: D Y N A M I C '_' S A M P L I N G '_' E S T '_' C D N; +EACH: E A C H; +EDITIONABLE: E D I T I O N A B L E; +EDITION: E D I T I O N; +EDITIONING: E D I T I O N I N G; +EDITIONS: E D I T I O N S; +ELEMENT: E L E M E N T; +ELIM_GROUPBY: E L I M '_' G R O U P B Y; +ELIMINATE_JOIN: E L I M I N A T E '_' J O I N; +ELIMINATE_OBY: E L I M I N A T E '_' O B Y; +ELIMINATE_OUTER_JOIN: E L I M I N A T E '_' O U T E R '_' J O I N; +ELSE: E L S E; +ELSIF: E L S I F; +EM: E M; +EMPTY_BLOB: E M P T Y '_' B L O B; +EMPTY_CLOB: E M P T Y '_' C L O B; +EMPTY: E M P T Y; +ENABLE_ALL: E N A B L E '_' A L L; +ENABLE: E N A B L E; +ENABLE_PARALLEL_DML: E N A B L E '_' P A R A L L E L '_' D M L; +ENABLE_PRESET: E N A B L E '_' P R E S E T; +ENCODING: E N C O D I N G; +ENCRYPT: E N C R Y P T; +ENCRYPTION: E N C R Y P T I O N; +END: E N D; +END_OUTLINE_DATA: E N D '_' O U T L I N E '_' D A T A; +ENFORCED: E N F O R C E D; +ENFORCE: E N F O R C E; +ENQUEUE: E N Q U E U E; +ENTERPRISE: E N T E R P R I S E; +ENTITYESCAPING: E N T I T Y E S C A P I N G; +ENTRY: E N T R Y; +EQUIPART: E Q U I P A R T; +ERR: E R R; +ERROR_ARGUMENT: E R R O R '_' A R G U M E N T; +ERROR: E R R O R; +ERROR_ON_OVERLAP_TIME: E R R O R '_' O N '_' O V E R L A P '_' T I M E; +ERRORS: E R R O R S; +ESCAPE: E S C A P E; +ESTIMATE: E S T I M A T E; +EVAL: E V A L; +EVALNAME: E V A L N A M E; +EVALUATE: E V A L U A T E; +EVALUATION: E V A L U A T I O N; +EVENTS: E V E N T S; +EVERY: E V E R Y; +EXCEPT: E X C E P T; +EXCEPTION: E X C E P T I O N; +EXCEPTION_INIT: E X C E P T I O N '_' I N I T; +EXCEPTIONS: E X C E P T I O N S; +EXCHANGE: E X C H A N G E; +EXCLUDE: E X C L U D E; +EXCLUDING: E X C L U D I N G; +EXCLUSIVE: E X C L U S I V E; +EXECUTE: E X E C U T E; +EXEMPT: E X E M P T; +EXISTING: E X I S T I N G; +EXISTS: E X I S T S; +EXISTSNODE: E X I S T S N O D E; +EXIT: E X I T; +EXPAND_GSET_TO_UNION: E X P A N D '_' G S E T '_' T O '_' U N I O N; +EXPAND_TABLE: E X P A N D '_' T A B L E; +EXP: E X P; +EXPIRE: E X P I R E; +EXPLAIN: E X P L A I N; +EXPLOSION: E X P L O S I O N; +EXPORT: E X P O R T; +EXPR_CORR_CHECK: E X P R '_' C O R R '_' C H E C K; +EXPRESS: E X P R E S S; +EXTENDS: E X T E N D S; +EXTENT: E X T E N T; +EXTENTS: E X T E N T S; +EXTERNAL: E X T E R N A L; +EXTERNALLY: E X T E R N A L L Y; +EXTRACTCLOBXML: E X T R A C T C L O B X M L; +EXTRACT: E X T R A C T; +EXTRACTVALUE: E X T R A C T V A L U E; +EXTRA: E X T R A; +FACILITY: F A C I L I T Y; +FACT: F A C T; +FACTOR: F A C T O R; +FACTORIZE_JOIN: F A C T O R I Z E '_' J O I N; +FAILED: F A I L E D; +FAILED_LOGIN_ATTEMPTS: F A I L E D '_' L O G I N '_' A T T E M P T S; +FAILGROUP: F A I L G R O U P; +FAILOVER: F A I L O V E R; +FAILURE: F A I L U R E; +FALSE: F A L S E; +FAMILY: F A M I L Y; +FAR: F A R; +FAST: F A S T; +FASTSTART: F A S T S T A R T; +FBTSCAN: F B T S C A N; +FEATURE_DETAILS: F E A T U R E '_' D E T A I L S; +FEATURE_ID: F E A T U R E '_' I D; +FEATURE_SET: F E A T U R E '_' S E T; +FEATURE_VALUE: F E A T U R E '_' V A L U E; +FETCH: F E T C H; +FILE: F I L E; +FILE_NAME_CONVERT: F I L E '_' N A M E '_' C O N V E R T; +FILESYSTEM_LIKE_LOGGING: F I L E S Y S T E M '_' L I K E '_' L O G G I N G; +FILTER: F I L T E R; +FINAL: F I N A L; +FINE: F I N E; +FINISH: F I N I S H; +FIRST: F I R S T; +FIRSTM: F I R S T M; +FIRST_ROWS: F I R S T '_' R O W S; +FIRST_VALUE: F I R S T '_' V A L U E; +FIXED_VIEW_DATA: F I X E D '_' V I E W '_' D A T A; +FLAGGER: F L A G G E R; +FLASHBACK: F L A S H B A C K; +FLASH_CACHE: F L A S H '_' C A C H E; +FLOAT: F L O A T; +FLOB: F L O B; +FLOOR: F L O O R; +FLUSH: F L U S H; +FOLDER: F O L D E R; +FOLLOWING: F O L L O W I N G; +FOLLOWS: F O L L O W S; +FORALL: F O R A L L; +FORCE: F O R C E; +FORCE_XML_QUERY_REWRITE: F O R C E '_' X M L '_' Q U E R Y '_' R E W R I T E; +FOREIGN: F O R E I G N; +FOREVER: F O R E V E R; +FOR: F O R; +FORMAT: F O R M A T; +FORWARD: F O R W A R D; +FRAGMENT_NUMBER: F R A G M E N T '_' N U M B E R; +FREELIST: F R E E L I S T; +FREELISTS: F R E E L I S T S; +FREEPOOLS: F R E E P O O L S; +FRESH: F R E S H; +FROM: F R O M; +FROM_TZ: F R O M '_' T Z; +FULL: F U L L; +FULL_OUTER_JOIN_TO_OUTER: F U L L '_' O U T E R '_' J O I N '_' T O '_' O U T E R; +FUNCTION: F U N C T I O N; +FUNCTIONS: F U N C T I O N S; +GATHER_OPTIMIZER_STATISTICS: G A T H E R '_' O P T I M I Z E R '_' S T A T I S T I C S; +GATHER_PLAN_STATISTICS: G A T H E R '_' P L A N '_' S T A T I S T I C S; +GBY_CONC_ROLLUP: G B Y '_' C O N C '_' R O L L U P; +GBY_PUSHDOWN: G B Y '_' P U S H D O W N; +GENERATED: G E N E R A T E D; +GET: G E T; +GLOBAL: G L O B A L; +GLOBALLY: G L O B A L L Y; +GLOBAL_NAME: G L O B A L '_' N A M E; +GLOBAL_TOPIC_ENABLED: G L O B A L '_' T O P I C '_' E N A B L E D; +GOTO: G O T O; +GRANT: G R A N T; +GROUP_BY: G R O U P '_' B Y; +GROUP: G R O U P; +GROUP_ID: G R O U P '_' I D; +GROUPING: G R O U P I N G; +GROUPING_ID: G R O U P I N G '_' I D; +GROUPS: G R O U P S; +GUARANTEED: G U A R A N T E E D; +GUARANTEE: G U A R A N T E E; +GUARD: G U A R D; +HASH_AJ: H A S H '_' A J; +HASH: H A S H; +HASHKEYS: H A S H K E Y S; +HASH_SJ: H A S H '_' S J; +HAVING: H A V I N G; +HEADER: H E A D E R; +HEAP: H E A P; +HELP: H E L P; +HEXTORAW: H E X T O R A W; +HEXTOREF: H E X T O R E F; +HIDDEN_KEYWORD: H I D D E N; +HIDE: H I D E; +HIERARCHY: H I E R A R C H Y; +HIGH: H I G H; +HINTSET_BEGIN: H I N T S E T '_' B E G I N; +HINTSET_END: H I N T S E T '_' E N D; +HOT: H O T; +HOUR: H O U R; +HWM_BROKERED: H W M '_' B R O K E R E D; +HYBRID: H Y B R I D; +IDENTIFIED: I D E N T I F I E D; +IDENTIFIER: I D E N T I F I E R; +IDENTITY: I D E N T I T Y; +IDGENERATORS: I D G E N E R A T O R S; +ID: I D; +IDLE_TIME: I D L E '_' T I M E; +IF: I F; +IGNORE: I G N O R E; +IGNORE_OPTIM_EMBEDDED_HINTS: I G N O R E '_' O P T I M '_' E M B E D D E D '_' H I N T S; +IGNORE_ROW_ON_DUPKEY_INDEX: I G N O R E '_' R O W '_' O N '_' D U P K E Y '_' I N D E X; +IGNORE_WHERE_CLAUSE: I G N O R E '_' W H E R E '_' C L A U S E; +ILM: I L M; +IMMEDIATE: I M M E D I A T E; +IMPACT: I M P A C T; +IMPORT: I M P O R T; +INACTIVE: I N A C T I V E; +INCLUDE: I N C L U D E; +INCLUDE_VERSION: I N C L U D E '_' V E R S I O N; +INCLUDING: I N C L U D I N G; +INCREMENTAL: I N C R E M E N T A L; +INCREMENT: I N C R E M E N T; +INCR: I N C R; +INDENT: I N D E N T; +INDEX_ASC: I N D E X '_' A S C; +INDEX_COMBINE: I N D E X '_' C O M B I N E; +INDEX_DESC: I N D E X '_' D E S C; +INDEXED: I N D E X E D; +INDEXES: I N D E X E S; +INDEX_FFS: I N D E X '_' F F S; +INDEX_FILTER: I N D E X '_' F I L T E R; +INDEX: I N D E X; +INDEXING: I N D E X I N G; +INDEX_JOIN: I N D E X '_' J O I N; +INDEX_ROWS: I N D E X '_' R O W S; +INDEX_RRS: I N D E X '_' R R S; +INDEX_RS_ASC: I N D E X '_' R S '_' A S C; +INDEX_RS_DESC: I N D E X '_' R S '_' D E S C; +INDEX_RS: I N D E X '_' R S; +INDEX_SCAN: I N D E X '_' S C A N; +INDEX_SKIP_SCAN: I N D E X '_' S K I P '_' S C A N; +INDEX_SS_ASC: I N D E X '_' S S '_' A S C; +INDEX_SS_DESC: I N D E X '_' S S '_' D E S C; +INDEX_SS: I N D E X '_' S S; +INDEX_STATS: I N D E X '_' S T A T S; +INDEXTYPE: I N D E X T Y P E; +INDEXTYPES: I N D E X T Y P E S; +INDICATOR: I N D I C A T O R; +INDICES: I N D I C E S; +INFINITE: I N F I N I T E; +INFORMATIONAL: I N F O R M A T I O N A L; +INHERIT: I N H E R I T; +IN: I N; +INITCAP: I N I T C A P; +INITIAL: I N I T I A L; +INITIALIZED: I N I T I A L I Z E D; +INITIALLY: I N I T I A L L Y; +INITRANS: I N I T R A N S; +INLINE: I N L I N E; +INLINE_XMLTYPE_NT: I N L I N E '_' X M L T Y P E '_' N T; +INMEMORY: I N M E M O R Y; +IN_MEMORY_METADATA: I N '_' M E M O R Y '_' M E T A D A T A; +INMEMORY_PRUNING: I N M E M O R Y '_' P R U N I N G; +INNER: I N N E R; +INOUT: I N O U T; +INPLACE: I N P L A C E; +INSERTCHILDXMLAFTER: I N S E R T C H I L D X M L A F T E R; +INSERTCHILDXMLBEFORE: I N S E R T C H I L D X M L B E F O R E; +INSERTCHILDXML: I N S E R T C H I L D X M L; +INSERT: I N S E R T; +INSERTXMLAFTER: I N S E R T X M L A F T E R; +INSERTXMLBEFORE: I N S E R T X M L B E F O R E; +INSTANCE: I N S T A N C E; +INSTANCES: I N S T A N C E S; +INSTANTIABLE: I N S T A N T I A B L E; +INSTANTLY: I N S T A N T L Y; +INSTEAD: I N S T E A D; +INSTR2: I N S T R '2'; +INSTR4: I N S T R '4'; +INSTRB: I N S T R B; +INSTRC: I N S T R C; +INSTR: I N S T R; +INTEGER: I N T E G E R; +INTERLEAVED: I N T E R L E A V E D; +INTERMEDIATE: I N T E R M E D I A T E; +INTERNAL_CONVERT: I N T E R N A L '_' C O N V E R T; +INTERNAL_USE: I N T E R N A L '_' U S E; +INTERPRETED: I N T E R P R E T E D; +INTERSECT: I N T E R S E C T; +INTERVAL: I N T E R V A L; +INT: I N T; +INTO: I N T O; +INVALIDATE: I N V A L I D A T E; +INVISIBLE: I N V I S I B L E; +IN_XQUERY: I N '_' X Q U E R Y; +IS: I S; +ISOLATION: I S O L A T I O N; +ISOLATION_LEVEL: I S O L A T I O N '_' L E V E L; +ITERATE: I T E R A T E; +ITERATION_NUMBER: I T E R A T I O N '_' N U M B E R; +JAVA: J A V A; +JOB: J O B; +JOIN: J O I N; +JSON_ARRAYAGG: J S O N '_' A R R A Y A G G; +JSON_ARRAY: J S O N '_' A R R A Y; +JSON_EQUAL: J S O N '_' E Q U A L; +JSON_EXISTS2: J S O N '_' E X I S T S '2'; +JSON_EXISTS: J S O N '_' E X I S T S; +JSONGET: J S O N G E T; +JSON: J S O N; +JSON_OBJECTAGG: J S O N '_' O B J E C T A G G; +JSON_OBJECT: J S O N '_' O B J E C T; +JSONPARSE: J S O N P A R S E; +JSON_QUERY: J S O N '_' Q U E R Y; +JSON_SERIALIZE: J S O N '_' S E R I A L I Z E; +JSON_TABLE: J S O N '_' T A B L E; +JSON_TEXTCONTAINS2: J S O N '_' T E X T C O N T A I N S '2'; +JSON_TEXTCONTAINS: J S O N '_' T E X T C O N T A I N S; +JSON_VALUE: J S O N '_' V A L U E; +KEEP_DUPLICATES: K E E P '_' D U P L I C A T E S; +KEEP: K E E P; +KERBEROS: K E R B E R O S; +KEY: K E Y; +KEY_LENGTH: K E Y '_' L E N G T H; +KEYSIZE: K E Y S I Z E; +KEYS: K E Y S; +KEYSTORE: K E Y S T O R E; +KILL: K I L L; +LABEL: L A B E L; +LANGUAGE: L A N G U A G E; +LAST_DAY: L A S T '_' D A Y; +LAST: L A S T; +LAST_VALUE: L A S T '_' V A L U E; +LATERAL: L A T E R A L; +LAX: L A X; +LAYER: L A Y E R; +LDAP_REGISTRATION_ENABLED: L D A P '_' R E G I S T R A T I O N '_' E N A B L E D; +LDAP_REGISTRATION: L D A P '_' R E G I S T R A T I O N; +LDAP_REG_SYNC_INTERVAL: L D A P '_' R E G '_' S Y N C '_' I N T E R V A L; +LEADING: L E A D I N G; +LEFT: L E F T; +LENGTH2: L E N G T H '2'; +LENGTH4: L E N G T H '4'; +LENGTHB: L E N G T H B; +LENGTHC: L E N G T H C; +LENGTH: L E N G T H; +LESS: L E S S; +LEVEL: L E V E L; +LEVELS: L E V E L S; +LIBRARY: L I B R A R Y; +LIFECYCLE: L I F E C Y C L E; +LIFE: L I F E; +LIFETIME: L I F E T I M E; +LIKE2: L I K E '2'; +LIKE4: L I K E '4'; +LIKEC: L I K E C; +LIKE_EXPAND: L I K E '_' E X P A N D; +LIKE: L I K E; +LIMIT: L I M I T; +LINEAR: L I N E A R; +LINK: L I N K; +LIST: L I S T; +LN: L N; +LNNVL: L N N V L; +LOAD: L O A D; +LOB: L O B; +LOBNVL: L O B N V L; +LOBS: L O B S; +LOCAL_INDEXES: L O C A L '_' I N D E X E S; +LOCAL: L O C A L; +LOCALTIME: L O C A L T I M E; +LOCALTIMESTAMP: L O C A L T I M E S T A M P; +LOCATION: L O C A T I O N; +LOCATOR: L O C A T O R; +LOCKED: L O C K E D; +LOCKING: L O C K I N G; +LOCK: L O C K; +LOGFILE: L O G F I L E; +LOGFILES: L O G F I L E S; +LOGGING: L O G G I N G; +LOGICAL: L O G I C A L; +LOGICAL_READS_PER_CALL: L O G I C A L '_' R E A D S '_' P E R '_' C A L L; +LOGICAL_READS_PER_SESSION: L O G I C A L '_' R E A D S '_' P E R '_' S E S S I O N; +LOG: L O G; +LOGMINING: L O G M I N I N G; +LOGOFF: L O G O F F; +LOGON: L O G O N; +LOG_READ_ONLY_VIOLATIONS: L O G '_' R E A D '_' O N L Y '_' V I O L A T I O N S; +LONG: L O N G; +LOOP: L O O P; +LOWER: L O W E R; +LOW: L O W; +LPAD: L P A D; +LTRIM: L T R I M; +MAIN: M A I N; +MAKE_REF: M A K E '_' R E F; +MANAGED: M A N A G E D; +MANAGE: M A N A G E; +MANAGEMENT: M A N A G E M E N T; +MANAGER: M A N A G E R; +MANUAL: M A N U A L; +MAP: M A P; +MAPPING: M A P P I N G; +MASTER: M A S T E R; +MATCHED: M A T C H E D; +MATCHES: M A T C H E S; +MATCH: M A T C H; +MATCH_NUMBER: M A T C H '_' N U M B E R; +MATCH_RECOGNIZE: M A T C H '_' R E C O G N I Z E; +MATERIALIZED: M A T E R I A L I Z E D; +MATERIALIZE: M A T E R I A L I Z E; +MAXARCHLOGS: M A X A R C H L O G S; +MAXDATAFILES: M A X D A T A F I L E S; +MAXEXTENTS: M A X E X T E N T S; +MAXIMIZE: M A X I M I Z E; +MAXINSTANCES: M A X I N S T A N C E S; +MAXLOGFILES: M A X L O G F I L E S; +MAXLOGHISTORY: M A X L O G H I S T O R Y; +MAXLOGMEMBERS: M A X L O G M E M B E R S; +MAX_SHARED_TEMP_SIZE: M A X '_' S H A R E D '_' T E M P '_' S I Z E; +MAXSIZE: M A X S I Z E; +MAXTRANS: M A X T R A N S; +MAXVALUE: M A X V A L U E; +MEASURE: M E A S U R E; +MEASURES: M E A S U R E S; +MEDIUM: M E D I U M; +MEMBER: M E M B E R; +MEMCOMPRESS: M E M C O M P R E S S; +MEMORY: M E M O R Y; +MERGEACTIONS: M E R G E '$' A C T I O N S; +MERGE_AJ: M E R G E '_' A J; +MERGE_CONST_ON: M E R G E '_' C O N S T '_' O N; +MERGE: M E R G E; +MERGE_SJ: M E R G E '_' S J; +METADATA: M E T A D A T A; +METHOD: M E T H O D; +MIGRATE: M I G R A T E; +MIGRATION: M I G R A T I O N; +MINEXTENTS: M I N E X T E N T S; +MINIMIZE: M I N I M I Z E; +MINIMUM: M I N I M U M; +MINING: M I N I N G; +MINUS: M I N U S; +MINUS_HAMO: M I N U S '_' N U L L; +MINUTE: M I N U T E; +MINVALUE: M I N V A L U E; +MIRRORCOLD: M I R R O R C O L D; +MIRRORHOT: M I R R O R H O T; +MIRROR: M I R R O R; +MLSLABEL: M L S L A B E L; +MODEL_COMPILE_SUBQUERY: M O D E L '_' C O M P I L E '_' S U B Q U E R Y; +MODEL_DONTVERIFY_UNIQUENESS: M O D E L '_' D O N T V E R I F Y '_' U N I Q U E N E S S; +MODEL_DYNAMIC_SUBQUERY: M O D E L '_' D Y N A M I C '_' S U B Q U E R Y; +MODEL_MIN_ANALYSIS: M O D E L '_' M I N '_' A N A L Y S I S; +MODEL: M O D E L; +MODEL_NB: M O D E L '_' N B; +MODEL_NO_ANALYSIS: M O D E L '_' N O '_' A N A L Y S I S; +MODEL_PBY: M O D E L '_' P B Y; +MODEL_PUSH_REF: M O D E L '_' P U S H '_' R E F; +MODEL_SV: M O D E L '_' S V; +MODE: M O D E; +MODIFICATION: M O D I F I C A T I O N; +MODIFY_COLUMN_TYPE: M O D I F Y '_' C O L U M N '_' T Y P E; +MODIFY: M O D I F Y; +MOD: M O D; +MODULE: M O D U L E; +MONITORING: M O N I T O R I N G; +MONITOR: M O N I T O R; +MONTH: M O N T H; +MONTHS_BETWEEN: M O N T H S '_' B E T W E E N; +MONTHS: M O N T H S; +MOUNT: M O U N T; +MOUNTPATH: M O U N T P A T H; +MOVEMENT: M O V E M E N T; +MOVE: M O V E; +MULTIDIMENSIONAL: M U L T I D I M E N S I O N A L; +MULTISET: M U L T I S E T; +MV_MERGE: M V '_' M E R G E; +NAMED: N A M E D; +NAME: N A M E; +NAMESPACE: N A M E S P A C E; +MUJO: N A N; +NANVL: N A N V L; +NATIONAL: N A T I O N A L; +NATIVE_FULL_OUTER_JOIN: N A T I V E '_' F U L L '_' O U T E R '_' J O I N; +NATIVE: N A T I V E; +NATURAL: N A T U R A L; +NATURALN: N A T U R A L N; +NAV: N A V; +NCHAR_CS: N C H A R '_' C S; +NCHAR: N C H A R; +NCHR: N C H R; +NCLOB: N C L O B; +NEEDED: N E E D E D; +NEG: N E G; +NESTED: N E S T E D; +NESTED_TABLE_FAST_INSERT: N E S T E D '_' T A B L E '_' F A S T '_' I N S E R T; +NESTED_TABLE_GET_REFS: N E S T E D '_' T A B L E '_' G E T '_' R E F S; +NESTED_TABLE_ID: N E S T E D '_' T A B L E '_' I D; +NESTED_TABLE_SET_REFS: N E S T E D '_' T A B L E '_' S E T '_' R E F S; +NESTED_TABLE_SET_SETID: N E S T E D '_' T A B L E '_' S E T '_' S E T I D; +NETWORK: N E T W O R K; +NEVER: N E V E R; +NEW: N E W; +NEW_TIME: N E W '_' T I M E; +NEXT_DAY: N E X T '_' D A Y; +NEXT: N E X T; +NL_AJ: N L '_' A J; +NLJ_BATCHING: N L J '_' B A T C H I N G; +NLJ_INDEX_FILTER: N L J '_' I N D E X '_' F I L T E R; +NLJ_INDEX_SCAN: N L J '_' I N D E X '_' S C A N; +NLJ_PREFETCH: N L J '_' P R E F E T C H; +NLS_CALENDAR: N L S '_' C A L E N D A R; +NLS_CHARACTERSET: N L S '_' C H A R A C T E R S E T; +NLS_CHARSET_DECL_LEN: N L S '_' C H A R S E T '_' D E C L '_' L E N; +NLS_CHARSET_ID: N L S '_' C H A R S E T '_' I D; +NLS_CHARSET_NAME: N L S '_' C H A R S E T '_' N A M E; +NLS_COMP: N L S '_' C O M P; +NLS_CURRENCY: N L S '_' C U R R E N C Y; +NLS_DATE_FORMAT: N L S '_' D A T E '_' F O R M A T; +NLS_DATE_LANGUAGE: N L S '_' D A T E '_' L A N G U A G E; +NLS_INITCAP: N L S '_' I N I T C A P; +NLS_ISO_CURRENCY: N L S '_' I S O '_' C U R R E N C Y; +NL_SJ: N L '_' S J; +NLS_LANG: N L S '_' L A N G; +NLS_LANGUAGE: N L S '_' L A N G U A G E; +NLS_LENGTH_SEMANTICS: N L S '_' L E N G T H '_' S E M A N T I C S; +NLS_LOWER: N L S '_' L O W E R; +NLS_NCHAR_CONV_EXCP: N L S '_' N C H A R '_' C O N V '_' E X C P; +NLS_NUMERIC_CHARACTERS: N L S '_' N U M E R I C '_' C H A R A C T E R S; +NLS_SORT: N L S '_' S O R T; +NLSSORT: N L S S O R T; +NLS_SPECIAL_CHARS: N L S '_' S P E C I A L '_' C H A R S; +NLS_TERRITORY: N L S '_' T E R R I T O R Y; +NLS_UPPER: N L S '_' U P P E R; +NO_ACCESS: N O '_' A C C E S S; +NO_ADAPTIVE_PLAN: N O '_' A D A P T I V E '_' P L A N; +NO_ANSI_REARCH: N O '_' A N S I '_' R E A R C H; +NOAPPEND: N O A P P E N D; +NOARCHIVELOG: N O A R C H I V E L O G; +NOAUDIT: N O A U D I T; +NO_AUTO_REOPTIMIZE: N O '_' A U T O '_' R E O P T I M I Z E; +NO_BASETABLE_MULTIMV_REWRITE: N O '_' B A S E T A B L E '_' M U L T I M V '_' R E W R I T E; +NO_BATCH_TABLE_ACCESS_BY_ROWID: N O '_' B A T C H '_' T A B L E '_' A C C E S S '_' B Y '_' R O W I D; +NO_BIND_AWARE: N O '_' B I N D '_' A W A R E; +NO_BUFFER: N O '_' B U F F E R; +NOCACHE: N O C A C H E; +NO_CARTESIAN: N O '_' C A R T E S I A N; +NO_CHECK_ACL_REWRITE: N O '_' C H E C K '_' A C L '_' R E W R I T E; +NO_CLUSTER_BY_ROWID: N O '_' C L U S T E R '_' B Y '_' R O W I D; +NO_CLUSTERING: N O '_' C L U S T E R I N G; +NO_COALESCE_SQ: N O '_' C O A L E S C E '_' S Q; +NO_COMMON_DATA: N O '_' C O M M O N '_' D A T A; +NOCOMPRESS: N O C O M P R E S S; +NO_CONNECT_BY_CB_WHR_ONLY: N O '_' C O N N E C T '_' B Y '_' C B '_' W H R '_' O N L Y; +NO_CONNECT_BY_COMBINE_SW: N O '_' C O N N E C T '_' B Y '_' C O M B I N E '_' S W; +NO_CONNECT_BY_COST_BASED: N O '_' C O N N E C T '_' B Y '_' C O S T '_' B A S E D; +NO_CONNECT_BY_ELIM_DUPS: N O '_' C O N N E C T '_' B Y '_' E L I M '_' D U P S; +NO_CONNECT_BY_FILTERING: N O '_' C O N N E C T '_' B Y '_' F I L T E R I N G; +NOCOPY: N O C O P Y; +NO_COST_XML_QUERY_REWRITE: N O '_' C O S T '_' X M L '_' Q U E R Y '_' R E W R I T E; +NO_CPU_COSTING: N O '_' C P U '_' C O S T I N G; +NOCPU_COSTING: N O C P U '_' C O S T I N G; +NOCYCLE: N O C Y C L E; +NO_DATA_SECURITY_REWRITE: N O '_' D A T A '_' S E C U R I T Y '_' R E W R I T E; +NO_DECORRELATE: N O '_' D E C O R R E L A T E; +NODELAY: N O D E L A Y; +NO_DOMAIN_INDEX_FILTER: N O '_' D O M A I N '_' I N D E X '_' F I L T E R; +NO_DST_UPGRADE_INSERT_CONV: N O '_' D S T '_' U P G R A D E '_' I N S E R T '_' C O N V; +NO_ELIM_GROUPBY: N O '_' E L I M '_' G R O U P B Y; +NO_ELIMINATE_JOIN: N O '_' E L I M I N A T E '_' J O I N; +NO_ELIMINATE_OBY: N O '_' E L I M I N A T E '_' O B Y; +NO_ELIMINATE_OUTER_JOIN: N O '_' E L I M I N A T E '_' O U T E R '_' J O I N; +NOENTITYESCAPING: N O E N T I T Y E S C A P I N G; +NO_EXPAND_GSET_TO_UNION: N O '_' E X P A N D '_' G S E T '_' T O '_' U N I O N; +NO_EXPAND: N O '_' E X P A N D; +NO_EXPAND_TABLE: N O '_' E X P A N D '_' T A B L E; +NO_FACT: N O '_' F A C T; +NO_FACTORIZE_JOIN: N O '_' F A C T O R I Z E '_' J O I N; +NO_FILTERING: N O '_' F I L T E R I N G; +NOFORCE: N O F O R C E; +NO_FULL_OUTER_JOIN_TO_OUTER: N O '_' F U L L '_' O U T E R '_' J O I N '_' T O '_' O U T E R; +NO_GATHER_OPTIMIZER_STATISTICS: N O '_' G A T H E R '_' O P T I M I Z E R '_' S T A T I S T I C S; +NO_GBY_PUSHDOWN: N O '_' G B Y '_' P U S H D O W N; +NOGUARANTEE: N O G U A R A N T E E; +NO_INDEX_FFS: N O '_' I N D E X '_' F F S; +NO_INDEX: N O '_' I N D E X; +NO_INDEX_SS: N O '_' I N D E X '_' S S; +NO_INMEMORY: N O '_' I N M E M O R Y; +NO_INMEMORY_PRUNING: N O '_' I N M E M O R Y '_' P R U N I N G; +NOKEEP: N O K E E P; +NO_LOAD: N O '_' L O A D; +NOLOCAL: N O L O C A L; +NOLOGGING: N O L O G G I N G; +NOMAPPING: N O M A P P I N G; +NOMAXVALUE: N O M A X V A L U E; +NO_MERGE: N O '_' M E R G E; +NOMINIMIZE: N O M I N I M I Z E; +NOMINVALUE: N O M I N V A L U E; +NO_MODEL_PUSH_REF: N O '_' M O D E L '_' P U S H '_' R E F; +NO_MONITORING: N O '_' M O N I T O R I N G; +NOMONITORING: N O M O N I T O R I N G; +NO_MONITOR: N O '_' M O N I T O R; +NO_MULTIMV_REWRITE: N O '_' M U L T I M V '_' R E W R I T E; +NO_NATIVE_FULL_OUTER_JOIN: N O '_' N A T I V E '_' F U L L '_' O U T E R '_' J O I N; +NONBLOCKING: N O N B L O C K I N G; +NONEDITIONABLE: N O N E D I T I O N A B L E; +NONE: N O N E; +NO_NLJ_BATCHING: N O '_' N L J '_' B A T C H I N G; +NO_NLJ_PREFETCH: N O '_' N L J '_' P R E F E T C H; +NO: N O; +NONSCHEMA: N O N S C H E M A; +NO_OBJECT_LINK: N O '_' O B J E C T '_' L I N K; +NOORDER: N O O R D E R; +NO_ORDER_ROLLUPS: N O '_' O R D E R '_' R O L L U P S; +NO_OUTER_JOIN_TO_ANTI: N O '_' O U T E R '_' J O I N '_' T O '_' A N T I; +NO_OUTER_JOIN_TO_INNER: N O '_' O U T E R '_' J O I N '_' T O '_' I N N E R; +NOOVERRIDE: N O O V E R R I D E; +NO_PARALLEL_INDEX: N O '_' P A R A L L E L '_' I N D E X; +NOPARALLEL_INDEX: N O P A R A L L E L '_' I N D E X; +NO_PARALLEL: N O '_' P A R A L L E L; +NOPARALLEL: N O P A R A L L E L; +NO_PARTIAL_COMMIT: N O '_' P A R T I A L '_' C O M M I T; +NO_PARTIAL_JOIN: N O '_' P A R T I A L '_' J O I N; +NO_PARTIAL_ROLLUP_PUSHDOWN: N O '_' P A R T I A L '_' R O L L U P '_' P U S H D O W N; +NOPARTITION: N O P A R T I T I O N; +NO_PLACE_DISTINCT: N O '_' P L A C E '_' D I S T I N C T; +NO_PLACE_GROUP_BY: N O '_' P L A C E '_' G R O U P '_' B Y; +NO_PQ_CONCURRENT_UNION: N O '_' P Q '_' C O N C U R R E N T '_' U N I O N; +NO_PQ_MAP: N O '_' P Q '_' M A P; +NO_PQ_REPLICATE: N O '_' P Q '_' R E P L I C A T E; +NO_PQ_SKEW: N O '_' P Q '_' S K E W; +NO_PRUNE_GSETS: N O '_' P R U N E '_' G S E T S; +NO_PULL_PRED: N O '_' P U L L '_' P R E D; +NO_PUSH_PRED: N O '_' P U S H '_' P R E D; +NO_PUSH_SUBQ: N O '_' P U S H '_' S U B Q; +NO_PX_FAULT_TOLERANCE: N O '_' P X '_' F A U L T '_' T O L E R A N C E; +NO_PX_JOIN_FILTER: N O '_' P X '_' J O I N '_' F I L T E R; +NO_QKN_BUFF: N O '_' Q K N '_' B U F F; +NO_QUERY_TRANSFORMATION: N O '_' Q U E R Y '_' T R A N S F O R M A T I O N; +NO_REF_CASCADE: N O '_' R E F '_' C A S C A D E; +NORELOCATE: N O R E L O C A T E; +NORELY: N O R E L Y; +NOREPAIR: N O R E P A I R; +NOREPLAY: N O R E P L A Y; +NORESETLOGS: N O R E S E T L O G S; +NO_RESULT_CACHE: N O '_' R E S U L T '_' C A C H E; +NOREVERSE: N O R E V E R S E; +NO_REWRITE: N O '_' R E W R I T E; +NOREWRITE: N O R E W R I T E; +NORMAL: N O R M A L; +NO_ROOT_SW_FOR_LOCAL: N O '_' R O O T '_' S W '_' F O R '_' L O C A L; +NOROWDEPENDENCIES: N O R O W D E P E N D E N C I E S; +NOSCHEMACHECK: N O S C H E M A C H E C K; +NOSEGMENT: N O S E G M E N T; +NO_SEMIJOIN: N O '_' S E M I J O I N; +NO_SEMI_TO_INNER: N O '_' S E M I '_' T O '_' I N N E R; +NO_SET_TO_JOIN: N O '_' S E T '_' T O '_' J O I N; +NOSORT: N O S O R T; +NO_SQL_TRANSLATION: N O '_' S Q L '_' T R A N S L A T I O N; +NO_SQL_TUNE: N O '_' S Q L '_' T U N E; +NO_STAR_TRANSFORMATION: N O '_' S T A R '_' T R A N S F O R M A T I O N; +NO_STATEMENT_QUEUING: N O '_' S T A T E M E N T '_' Q U E U I N G; +NO_STATS_GSETS: N O '_' S T A T S '_' G S E T S; +NOSTRICT: N O S T R I C T; +NO_SUBQUERY_PRUNING: N O '_' S U B Q U E R Y '_' P R U N I N G; +NO_SUBSTRB_PAD: N O '_' S U B S T R B '_' P A D; +NO_SWAP_JOIN_INPUTS: N O '_' S W A P '_' J O I N '_' I N P U T S; +NOSWITCH: N O S W I T C H; +NO_TABLE_LOOKUP_BY_NL: N O '_' T A B L E '_' L O O K U P '_' B Y '_' N L; +NO_TEMP_TABLE: N O '_' T E M P '_' T A B L E; +NOTHING: N O T H I N G; +NOTIFICATION: N O T I F I C A T I O N; +NOT: N O T; +NO_TRANSFORM_DISTINCT_AGG: N O '_' T R A N S F O R M '_' D I S T I N C T '_' A G G; +NO_UNNEST: N O '_' U N N E S T; +NO_USE_CUBE: N O '_' U S E '_' C U B E; +NO_USE_HASH_AGGREGATION: N O '_' U S E '_' H A S H '_' A G G R E G A T I O N; +NO_USE_HASH_GBY_FOR_PUSHDOWN: N O '_' U S E '_' H A S H '_' G B Y '_' F O R '_' P U S H D O W N; +NO_USE_HASH: N O '_' U S E '_' H A S H; +NO_USE_INVISIBLE_INDEXES: N O '_' U S E '_' I N V I S I B L E '_' I N D E X E S; +NO_USE_MERGE: N O '_' U S E '_' M E R G E; +NO_USE_NL: N O '_' U S E '_' N L; +NO_USE_VECTOR_AGGREGATION: N O '_' U S E '_' V E C T O R '_' A G G R E G A T I O N; +NOVALIDATE: N O V A L I D A T E; +NO_VECTOR_TRANSFORM_DIMS: N O '_' V E C T O R '_' T R A N S F O R M '_' D I M S; +NO_VECTOR_TRANSFORM_FACT: N O '_' V E C T O R '_' T R A N S F O R M '_' F A C T; +NO_VECTOR_TRANSFORM: N O '_' V E C T O R '_' T R A N S F O R M; +NOWAIT: N O W A I T; +NO_XDB_FASTPATH_INSERT: N O '_' X D B '_' F A S T P A T H '_' I N S E R T; +NO_XML_DML_REWRITE: N O '_' X M L '_' D M L '_' R E W R I T E; +NO_XMLINDEX_REWRITE_IN_SELECT: N O '_' X M L I N D E X '_' R E W R I T E '_' I N '_' S E L E C T; +NO_XMLINDEX_REWRITE: N O '_' X M L I N D E X '_' R E W R I T E; +NO_XML_QUERY_REWRITE: N O '_' X M L '_' Q U E R Y '_' R E W R I T E; +NO_ZONEMAP: N O '_' Z O N E M A P; +NTH_VALUE: N T H '_' V A L U E; +NULLIF: N U L L I F; +HAMO: N U L L; +NULLS: N U L L S; +NUMBER: N U M B E R; +NUMERIC: N U M E R I C; +NUM_INDEX_KEYS: N U M '_' I N D E X '_' K E Y S; +NUMTODSINTERVAL: N U M T O D S I N T E R V A L; +NUMTOYMINTERVAL: N U M T O Y M I N T E R V A L; +NVARCHAR2: N V A R C H A R '2'; +NVL2: N V L '2'; +OBJECT2XML: O B J E C T '2' X M L; +OBJECT: O B J E C T; +OBJ_ID: O B J '_' I D; +OBJNO: O B J N O; +OBJNO_REUSE: O B J N O '_' R E U S E; +OCCURENCES: O C C U R E N C E S; +OFFLINE: O F F L I N E; +OFF: O F F; +OFFSET: O F F S E T; +OF: O F; +OIDINDEX: O I D I N D E X; +OID: O I D; +OLAP: O L A P; +OLD: O L D; +OLD_PUSH_PRED: O L D '_' P U S H '_' P R E D; +OLS: O L S; +OLTP: O L T P; +OMIT: O M I T; +ONE: O N E; +ONLINE: O N L I N E; +ONLY: O N L Y; +ON: O N; +OPAQUE: O P A Q U E; +OPAQUE_TRANSFORM: O P A Q U E '_' T R A N S F O R M; +OPAQUE_XCANONICAL: O P A Q U E '_' X C A N O N I C A L; +OPCODE: O P C O D E; +OPEN: O P E N; +OPERATIONS: O P E R A T I O N S; +OPERATOR: O P E R A T O R; +OPT_ESTIMATE: O P T '_' E S T I M A T E; +OPTIMAL: O P T I M A L; +OPTIMIZE: O P T I M I Z E; +OPTIMIZER_FEATURES_ENABLE: O P T I M I Z E R '_' F E A T U R E S '_' E N A B L E; +OPTIMIZER_GOAL: O P T I M I Z E R '_' G O A L; +OPTION: O P T I O N; +OPT_PARAM: O P T '_' P A R A M; +ORA_BRANCH: O R A '_' B R A N C H; +ORA_CHECK_ACL: O R A '_' C H E C K '_' A C L; +ORA_CHECK_PRIVILEGE: O R A '_' C H E C K '_' P R I V I L E G E; +ORA_CLUSTERING: O R A '_' C L U S T E R I N G; +ORADATA: O R A D A T A; +ORADEBUG: O R A D E B U G; +ORA_DST_AFFECTED: O R A '_' D S T '_' A F F E C T E D; +ORA_DST_CONVERT: O R A '_' D S T '_' C O N V E R T; +ORA_DST_ERROR: O R A '_' D S T '_' E R R O R; +ORA_GET_ACLIDS: O R A '_' G E T '_' A C L I D S; +ORA_GET_PRIVILEGES: O R A '_' G E T '_' P R I V I L E G E S; +ORA_HASH: O R A '_' H A S H; +ORA_INVOKING_USERID: O R A '_' I N V O K I N G '_' U S E R I D; +ORA_INVOKING_USER: O R A '_' I N V O K I N G '_' U S E R; +ORA_INVOKING_XS_USER_GUID: O R A '_' I N V O K I N G '_' X S '_' U S E R '_' G U I D; +ORA_INVOKING_XS_USER: O R A '_' I N V O K I N G '_' X S '_' U S E R; +ORA_RAWCOMPARE: O R A '_' R A W C O M P A R E; +ORA_RAWCONCAT: O R A '_' R A W C O N C A T; +ORA_ROWSCN: O R A '_' R O W S C N; +ORA_ROWSCN_RAW: O R A '_' R O W S C N '_' R A W; +ORA_ROWVERSION: O R A '_' R O W V E R S I O N; +ORA_TABVERSION: O R A '_' T A B V E R S I O N; +ORA_WRITE_TIME: O R A '_' W R I T E '_' T I M E; +ORDERED: O R D E R E D; +ORDERED_PREDICATES: O R D E R E D '_' P R E D I C A T E S; +ORDER: O R D E R; +ORDINALITY: O R D I N A L I T Y; +OR_EXPAND: O R '_' E X P A N D; +ORGANIZATION: O R G A N I Z A T I O N; +OR: O R; +OR_PREDICATES: O R '_' P R E D I C A T E S; +OSERROR: O S E R R O R; +OTHER: O T H E R; +OUTER_JOIN_TO_ANTI: O U T E R '_' J O I N '_' T O '_' A N T I; +OUTER_JOIN_TO_INNER: O U T E R '_' J O I N '_' T O '_' I N N E R; +OUTER: O U T E R; +OUTLINE_LEAF: O U T L I N E '_' L E A F; +OUTLINE: O U T L I N E; +OUT_OF_LINE: O U T '_' O F '_' L I N E; +OUT: O U T; +HASO_NOMOVE: O V E R F L O W '_' N O M O V E; +HASO: O V E R F L O W; +OVERLAPS: O V E R L A P S; +OVER: O V E R; +OVERRIDING: O V E R R I D I N G; +OWNER: O W N E R; +OWNERSHIP: O W N E R S H I P; +OWN: O W N; +PACKAGE: P A C K A G E; +PACKAGES: P A C K A G E S; +PARALLEL_ENABLE: P A R A L L E L '_' E N A B L E; +PARALLEL_INDEX: P A R A L L E L '_' I N D E X; +PARALLEL: P A R A L L E L; +PARAMETERS: P A R A M E T E R S; +PARAM: P A R A M; +PARENT: P A R E N T; +PARITY: P A R I T Y; +PARTIAL_JOIN: P A R T I A L '_' J O I N; +PARTIALLY: P A R T I A L L Y; +PARTIAL: P A R T I A L; +PARTIAL_ROLLUP_PUSHDOWN: P A R T I A L '_' R O L L U P '_' P U S H D O W N; +PARTITION_HASH: P A R T I T I O N '_' H A S H; +PARTITION_LIST: P A R T I T I O N '_' L I S T; +PARTITION: P A R T I T I O N; +PARTITION_RANGE: P A R T I T I O N '_' R A N G E; +PARTITIONS: P A R T I T I O N S; +PARTNUMINST: P A R T '$' N U M '$' I N S T; +PASSING: P A S S I N G; +PASSWORD_GRACE_TIME: P A S S W O R D '_' G R A C E '_' T I M E; +PASSWORD_LIFE_TIME: P A S S W O R D '_' L I F E '_' T I M E; +PASSWORD_LOCK_TIME: P A S S W O R D '_' L O C K '_' T I M E; +PASSWORD: P A S S W O R D; +PASSWORD_REUSE_MAX: P A S S W O R D '_' R E U S E '_' M A X; +PASSWORD_REUSE_TIME: P A S S W O R D '_' R E U S E '_' T I M E; +PASSWORD_VERIFY_FUNCTION: P A S S W O R D '_' V E R I F Y '_' F U N C T I O N; +PAST: P A S T; +PATCH: P A T C H; +PATH: P A T H; +PATH_PREFIX: P A T H '_' P R E F I X; +PATHS: P A T H S; +PATTERN: P A T T E R N; +PBL_HS_BEGIN: P B L '_' H S '_' B E G I N; +PBL_HS_END: P B L '_' H S '_' E N D; +PCTFREE: P C T F R E E; +PCTINCREASE: P C T I N C R E A S E; +PCTTHRESHOLD: P C T T H R E S H O L D; +PCTUSED: P C T U S E D; +PCTVERSION: P C T V E R S I O N; +PENDING: P E N D I N G; +PERCENT_FOUND: '%' F O U N D; +PERCENT_ISOPEN: '%' I S O P E N; +PERCENT_NOTFOUND: '%' N O T F O U N D; +PERCENT_KEYWORD: P E R C E N T; +PERCENT_RANKM: P E R C E N T '_' R A N K M; +PERCENT_ROWCOUNT: '%' R O W C O U N T; +PERCENT_ROWTYPE: '%' R O W T Y P E; +PERCENT_TYPE: '%' T Y P E; +PERFORMANCE: P E R F O R M A N C E; +PERIOD_KEYWORD: P E R I O D; +PERMANENT: P E R M A N E N T; +PERMISSION: P E R M I S S I O N; +PERMUTE: P E R M U T E; +PER: P E R; +PFILE: P F I L E; +PHYSICAL: P H Y S I C A L; +PIKEY: P I K E Y; +PIPELINED: P I P E L I N E D; +PIPE: P I P E; +PIV_GB: P I V '_' G B; +PIVOT: P I V O T; +PIV_SSF: P I V '_' S S F; +PLACE_DISTINCT: P L A C E '_' D I S T I N C T; +PLACE_GROUP_BY: P L A C E '_' G R O U P '_' B Y; +PLAN: P L A N; +PLSCOPE_SETTINGS: P L S C O P E '_' S E T T I N G S; +PLS_INTEGER: P L S '_' I N T E G E R; +PLSQL_CCFLAGS: P L S Q L '_' C C F L A G S; +PLSQL_CODE_TYPE: P L S Q L '_' C O D E '_' T Y P E; +PLSQL_DEBUG: P L S Q L '_' D E B U G; +PLSQL_OPTIMIZE_LEVEL: P L S Q L '_' O P T I M I Z E '_' L E V E L; +PLSQL_WARNINGS: P L S Q L '_' W A R N I N G S; +PLUGGABLE: P L U G G A B L E; +POINT: P O I N T; +POLICY: P O L I C Y; +POOL_16K: P O O L '_' '1' '6' K; +POOL_2K: P O O L '_' '2' K; +POOL_32K: P O O L '_' '3' '2' K; +POOL_4K: P O O L '_' '4' K; +POOL_8K: P O O L '_' '8' K; +POSITIVEN: P O S I T I V E N; +POSITIVE: P O S I T I V E; +POST_TRANSACTION: P O S T '_' T R A N S A C T I O N; +POWERMULTISET_BY_CARDINALITY: P O W E R M U L T I S E T '_' B Y '_' C A R D I N A L I T Y; +POWERMULTISET: P O W E R M U L T I S E T; +POWER: P O W E R; +PQ_CONCURRENT_UNION: P Q '_' C O N C U R R E N T '_' U N I O N; +PQ_DISTRIBUTE: P Q '_' D I S T R I B U T E; +PQ_DISTRIBUTE_WINDOW: P Q '_' D I S T R I B U T E '_' W I N D O W; +PQ_FILTER: P Q '_' F I L T E R; +PQ_MAP: P Q '_' M A P; +PQ_NOMAP: P Q '_' N O M A P; +PQ_REPLICATE: P Q '_' R E P L I C A T E; +PQ_SKEW: P Q '_' S K E W; +PRAGMA: P R A G M A; +PREBUILT: P R E B U I L T; +PRECEDES: P R E C E D E S; +PRECEDING: P R E C E D I N G; +PRECISION: P R E C I S I O N; +PRECOMPUTE_SUBQUERY: P R E C O M P U T E '_' S U B Q U E R Y; +PREDICATE_REORDERS: P R E D I C A T E '_' R E O R D E R S; +PRELOAD: P R E L O A D; +PREPARE: P R E P A R E; +PRESENTNNV: P R E S E N T N N V; +PRESENT: P R E S E N T; +PRESENTV: P R E S E N T V; +PRESERVE_OID: P R E S E R V E '_' O I D; +PRESERVE: P R E S E R V E; +PRETTY: P R E T T Y; +PREVIOUS: P R E V I O U S; +PREV: P R E V; +PRIMARY: P R I M A R Y; +PRINTBLOBTOCLOB: P R I N T B L O B T O C L O B; +PRIORITY: P R I O R I T Y; +PRIOR: P R I O R; +PRIVATE: P R I V A T E; +PRIVATE_SGA: P R I V A T E '_' S G A; +PRIVILEGED: P R I V I L E G E D; +PRIVILEGE: P R I V I L E G E; +PRIVILEGES: P R I V I L E G E S; +PROCEDURAL: P R O C E D U R A L; +PROCEDURE: P R O C E D U R E; +PROCESS: P R O C E S S; +PROFILE: P R O F I L E; +PROGRAM: P R O G R A M; +PROJECT: P R O J E C T; +PROPAGATE: P R O P A G A T E; +PROTECTED: P R O T E C T E D; +PROTECTION: P R O T E C T I O N; +PROXY: P R O X Y; +PRUNING: P R U N I N G; +PUBLIC: P U B L I C; +PULL_PRED: P U L L '_' P R E D; +PURGE: P U R G E; +PUSH_PRED: P U S H '_' P R E D; +PUSH_SUBQ: P U S H '_' S U B Q; +PX_FAULT_TOLERANCE: P X '_' F A U L T '_' T O L E R A N C E; +PX_GRANULE: P X '_' G R A N U L E; +PX_JOIN_FILTER: P X '_' J O I N '_' F I L T E R; +QB_NAME: Q B '_' N A M E; +QUERY_BLOCK: Q U E R Y '_' B L O C K; +QUERY: Q U E R Y; +QUEUE_CURR: Q U E U E '_' C U R R; +QUEUE: Q U E U E; +QUEUE_ROWP: Q U E U E '_' R O W P; +QUIESCE: Q U I E S C E; +QUORUM: Q U O R U M; +QUOTA: Q U O T A; +RAISE: R A I S E; +RANDOM_LOCAL: R A N D O M '_' L O C A L; +RANDOM: R A N D O M; +RANGE: R A N G E; +RANKM: R A N K M; +RAPIDLY: R A P I D L Y; +RAW: R A W; +RAWTOHEX: R A W T O H E X; +RAWTONHEX: R A W T O N H E X; +RBA: R B A; +RBO_OUTLINE: R B O '_' O U T L I N E; +RDBA: R D B A; +READ: R E A D; +READS: R E A D S; +REALM: R E A L M; +REAL: R E A L; +REBALANCE: R E B A L A N C E; +REBUILD: R E B U I L D; +RECORD: R E C O R D; +RECORDS_PER_BLOCK: R E C O R D S '_' P E R '_' B L O C K; +RECOVERABLE: R E C O V E R A B L E; +RECOVER: R E C O V E R; +RECOVERY: R E C O V E R Y; +RECYCLEBIN: R E C Y C L E B I N; +RECYCLE: R E C Y C L E; +REDACTION: R E D A C T I O N; +REDEFINE: R E D E F I N E; +REDO: R E D O; +REDUCED: R E D U C E D; +REDUNDANCY: R E D U N D A N C Y; +REF_CASCADE_CURSOR: R E F '_' C A S C A D E '_' C U R S O R; +REFERENCED: R E F E R E N C E D; +REFERENCE: R E F E R E N C E; +REFERENCES: R E F E R E N C E S; +REFERENCING: R E F E R E N C I N G; +REF: R E F; +REFRESH: R E F R E S H; +REFTOHEX: R E F T O H E X; +REGEXP_COUNT: R E G E X P '_' C O U N T; +REGEXP_INSTR: R E G E X P '_' I N S T R; +REGEXP_LIKE: R E G E X P '_' L I K E; +REGEXP_REPLACE: R E G E X P '_' R E P L A C E; +REGEXP_SUBSTR: R E G E X P '_' S U B S T R; +REGISTER: R E G I S T E R; +REGR_AVGX: R E G R '_' A V G X; +REGR_AVGY: R E G R '_' A V G Y; +REGR_COUNT: R E G R '_' C O U N T; +REGR_INTERCEPT: R E G R '_' I N T E R C E P T; +REGR_R2: R E G R '_' R '2'; +REGR_SLOPE: R E G R '_' S L O P E; +REGR_SXX: R E G R '_' S X X; +REGR_SXY: R E G R '_' S X Y; +REGR_SYY: R E G R '_' S Y Y; +REGULAR: R E G U L A R; +REJECT: R E J E C T; +REKEY: R E K E Y; +RELATIONAL: R E L A T I O N A L; +RELIES_ON: R E L I E S '_' O N; +RELOCATE: R E L O C A T E; +RELY: R E L Y; +REMAINDER: R E M A I N D E R; +REMOTE_MAPPED: R E M O T E '_' M A P P E D; +REMOVE: R E M O V E; +RENAME: R E N A M E; +REPAIR: R E P A I R; +REPEAT: R E P E A T; +REPLACE: R E P L A C E; +REPLICATION: R E P L I C A T I O N; +REQUIRED: R E Q U I R E D; +RESETLOGS: R E S E T L O G S; +RESET: R E S E T; +RESIZE: R E S I Z E; +RESOLVE: R E S O L V E; +RESOLVER: R E S O L V E R; +RESOURCE: R E S O U R C E; +RESPECT: R E S P E C T; +RESTART: R E S T A R T; +RESTORE_AS_INTERVALS: R E S T O R E '_' A S '_' I N T E R V A L S; +RESTORE: R E S T O R E; +RESTRICT_ALL_REF_CONS: R E S T R I C T '_' A L L '_' R E F '_' C O N S; +RESTRICTED: R E S T R I C T E D; +RESTRICT_REFERENCES: R E S T R I C T '_' R E F E R E N C E S; +RESTRICT: R E S T R I C T; +RESULT_CACHE: R E S U L T '_' C A C H E; +RESULT: R E S U L T; +RESUMABLE: R E S U M A B L E; +RESUME: R E S U M E; +RETENTION: R E T E N T I O N; +RETRY_ON_ROW_CHANGE: R E T R Y '_' O N '_' R O W '_' C H A N G E; +RETURNING: R E T U R N I N G; +RETURN: R E T U R N; +REUSE: R E U S E; +REVERSE: R E V E R S E; +REVOKE: R E V O K E; +REWRITE_OR_ERROR: R E W R I T E '_' O R '_' E R R O R; +REWRITE: R E W R I T E; +RIGHT: R I G H T; +ROLE: R O L E; +ROLESET: R O L E S E T; +ROLES: R O L E S; +ROLLBACK: R O L L B A C K; +ROLLING: R O L L I N G; +ROLLUP: R O L L U P; +ROWDEPENDENCIES: R O W D E P E N D E N C I E S; +ROWID_MAPPING_TABLE: R O W I D '_' M A P P I N G '_' T A B L E; +ROWID: R O W I D; +ROWIDTOCHAR: R O W I D T O C H A R; +ROWIDTONCHAR: R O W I D T O N C H A R; +ROW_LENGTH: R O W '_' L E N G T H; +ROWNUM: R O W N U M; +ROW: R O W; +ROWS: R O W S; +RPAD: R P A D; +RTRIM: R T R I M; +RULE: R U L E; +RULES: R U L E S; +RUNNING: R U N N I N G; +SALT: S A L T; +SAMPLE: S A M P L E; +SAVE_AS_INTERVALS: S A V E '_' A S '_' I N T E R V A L S; +SAVEPOINT: S A V E P O I N T; +SAVE: S A V E; +SB4: S B '4'; +SCALE_ROWS: S C A L E '_' R O W S; +SCALE: S C A L E; +SCAN_INSTANCES: S C A N '_' I N S T A N C E S; +SCAN: S C A N; +SCHEDULER: S C H E D U L E R; +SCHEMACHECK: S C H E M A C H E C K; +SCHEMA: S C H E M A; +SCN_ASCENDING: S C N '_' A S C E N D I N G; +SCN: S C N; +SCOPE: S C O P E; +SCRUB: S C R U B; +SD_ALL: S D '_' A L L; +SD_INHIBIT: S D '_' I N H I B I T; +SDO_GEOM_MBR: S D O '_' G E O M '_' M B R; +SD_SHOW: S D '_' S H O W; +SEARCH: S E A R C H; +SECOND: S E C O N D; +SECRET: S E C R E T; +SECUREFILE_DBA: S E C U R E F I L E '_' D B A; +SECUREFILE: S E C U R E F I L E; +SECURITY: S E C U R I T Y; +SEED: S E E D; +SEG_BLOCK: S E G '_' B L O C K; +SEG_FILE: S E G '_' F I L E; +SEGMENT: S E G M E N T; +SELECTIVITY: S E L E C T I V I T Y; +SELECT: S E L E C T; +SELF: S E L F; +SEMIJOIN_DRIVER: S E M I J O I N '_' D R I V E R; +SEMIJOIN: S E M I J O I N; +SEMI_TO_INNER: S E M I '_' T O '_' I N N E R; +SEQUENCED: S E Q U E N C E D; +SEQUENCE: S E Q U E N C E; +SEQUENTIAL: S E Q U E N T I A L; +SERIALIZABLE: S E R I A L I Z A B L E; +SERIALLY_REUSABLE: S E R I A L L Y '_' R E U S A B L E; +SERIAL: S E R I A L; +SERVERERROR: S E R V E R E R R O R; +SERVICE_NAME_CONVERT: S E R V I C E '_' N A M E '_' C O N V E R T; +SERVICES: S E R V I C E S; +SESSION_CACHED_CURSORS: S E S S I O N '_' C A C H E D '_' C U R S O R S; +SESSION: S E S S I O N; +SESSIONS_PER_USER: S E S S I O N S '_' P E R '_' U S E R; +SESSIONTIMEZONE: S E S S I O N T I M E Z O N E; +SESSIONTZNAME: S E S S I O N T Z N A M E; +SET: S E T; +SETS: S E T S; +SETTINGS: S E T T I N G S; +SET_TO_JOIN: S E T '_' T O '_' J O I N; +SEVERE: S E V E R E; +SHARED_POOL: S H A R E D '_' P O O L; +SHARED: S H A R E D; +SHARE: S H A R E; +SHARING: S H A R I N G; +SHELFLIFE: S H E L F L I F E; +SHOW: S H O W; +SHRINK: S H R I N K; +SHUTDOWN: S H U T D O W N; +SIBLINGS: S I B L I N G S; +SID: S I D; +SIGNAL_COMPONENT: S I G N A L '_' C O M P O N E N T; +SIGNAL_FUNCTION: S I G N A L '_' F U N C T I O N; +SIGN: S I G N; +SIGNTYPE: S I G N T Y P E; +SIMPLE_INTEGER: S I M P L E '_' I N T E G E R; +SIMPLE: S I M P L E; +SINGLE: S I N G L E; +SINGLETASK: S I N G L E T A S K; +SINH: S I N H; +SIN: S I N; +SIZE: S I Z E; +SKIP_EXT_OPTIMIZER: S K I P '_' E X T '_' O P T I M I Z E R; +SKIP_ : S K I P; +SKIP_UNQ_UNUSABLE_IDX: S K I P '_' U N Q '_' U N U S A B L E '_' I D X; +SKIP_UNUSABLE_INDEXES: S K I P '_' U N U S A B L E '_' I N D E X E S; +SMALLFILE: S M A L L F I L E; +SMALLINT: S M A L L I N T; +SNAPSHOT: S N A P S H O T; +SOME: S O M E; +SORT: S O R T; +SOUNDEX: S O U N D E X; +SOURCE_FILE_DIRECTORY: S O U R C E '_' F I L E '_' D I R E C T O R Y; +SOURCE_FILE_NAME_CONVERT: S O U R C E '_' F I L E '_' N A M E '_' C O N V E R T; +SOURCE: S O U R C E; +SPACE_KEYWORD: S P A C E; +SPECIFICATION: S P E C I F I C A T I O N; +SPFILE: S P F I L E; +SPLIT: S P L I T; +SPREADSHEET: S P R E A D S H E E T; +SQLDATA: S Q L D A T A; +SQLERROR: S Q L E R R O R; +SQLLDR: S Q L L D R; +SQL: S Q L; +SQL_TRACE: S Q L '_' T R A C E; +SQL_TRANSLATION_PROFILE: S Q L '_' T R A N S L A T I O N '_' P R O F I L E; +SQRT: S Q R T; +STALE: S T A L E; +STANDALONE: S T A N D A L O N E; +STANDARD_HASH: S T A N D A R D '_' H A S H; +STANDBY_MAX_DATA_DELAY: S T A N D B Y '_' M A X '_' D A T A '_' D E L A Y; +STANDBYS: S T A N D B Y S; +STANDBY: S T A N D B Y; +STAR: S T A R; +STAR_TRANSFORMATION: S T A R '_' T R A N S F O R M A T I O N; +START: S T A R T; +STARTUP: S T A R T U P; +STATEMENT_ID: S T A T E M E N T '_' I D; +STATEMENT_QUEUING: S T A T E M E N T '_' Q U E U I N G; +STATEMENTS: S T A T E M E N T S; +STATEMENT: S T A T E M E N T; +STATE: S T A T E; +STATIC: S T A T I C; +STATISTICS: S T A T I S T I C S; +STATS_BINOMIAL_TEST: S T A T S '_' B I N O M I A L '_' T E S T; +STATS_CROSSTAB: S T A T S '_' C R O S S T A B; +STATS_F_TEST: S T A T S '_' F '_' T E S T; +STATS_KS_TEST: S T A T S '_' K S '_' T E S T; +STATS_MODE: S T A T S '_' M O D E; +STATS_MW_TEST: S T A T S '_' M W '_' T E S T; +STATS_ONE_WAY_ANOVA: S T A T S '_' O N E '_' W A Y '_' A N O V A; +STATS_T_TEST_INDEP: S T A T S '_' T '_' T E S T '_' I N D E P; +STATS_T_TEST_INDEPU: S T A T S '_' T '_' T E S T '_' I N D E P U; +STATS_T_TEST_ONE: S T A T S '_' T '_' T E S T '_' O N E; +STATS_T_TEST_PAIRED: S T A T S '_' T '_' T E S T '_' P A I R E D; +STATS_WSR_TEST: S T A T S '_' W S R '_' T E S T; +STDDEV_POP: S T D D E V '_' P O P; +STDDEV_SAMP: S T D D E V '_' S A M P; +STOP: S T O P; +STORAGE: S T O R A G E; +STORE: S T O R E; +STREAMS: S T R E A M S; +STREAM: S T R E A M; +STRICT: S T R I C T; +STRING: S T R I N G; +STRIPE_COLUMNS: S T R I P E '_' C O L U M N S; +STRIPE_WIDTH: S T R I P E '_' W I D T H; +STRIP: S T R I P; +STRUCTURE: S T R U C T U R E; +SUBMULTISET: S U B M U L T I S E T; +SUBPARTITION_REL: S U B P A R T I T I O N '_' R E L; +SUBPARTITIONS: S U B P A R T I T I O N S; +SUBPARTITION: S U B P A R T I T I O N; +SUBQUERIES: S U B Q U E R I E S; +SUBQUERY_PRUNING: S U B Q U E R Y '_' P R U N I N G; +SUBSCRIBE: S U B S C R I B E; +SUBSET: S U B S E T; +SUBSTITUTABLE: S U B S T I T U T A B L E; +SUBSTR2: S U B S T R '2'; +SUBSTR4: S U B S T R '4'; +SUBSTRB: S U B S T R B; +SUBSTRC: S U B S T R C; +SUBTYPE: S U B T Y P E; +SUCCESSFUL: S U C C E S S F U L; +SUCCESS: S U C C E S S; +SUMMARY: S U M M A R Y; +SUPPLEMENTAL: S U P P L E M E N T A L; +SUSPEND: S U S P E N D; +SWAP_JOIN_INPUTS: S W A P '_' J O I N '_' I N P U T S; +SWITCHOVER: S W I T C H O V E R; +SWITCH: S W I T C H; +SYNCHRONOUS: S Y N C H R O N O U S; +SYNC: S Y N C; +SYNONYM: S Y N O N Y M; +SYSASM: S Y S A S M; +SYS_AUDIT: S Y S '_' A U D I T; +SYSAUX: S Y S A U X; +SYSBACKUP: S Y S B A C K U P; +SYS_CHECKACL: S Y S '_' C H E C K A C L; +SYS_CHECK_PRIVILEGE: S Y S '_' C H E C K '_' P R I V I L E G E; +SYS_CONNECT_BY_PATH: S Y S '_' C O N N E C T '_' B Y '_' P A T H; +SYS_CONTEXT: S Y S '_' C O N T E X T; +SYSDATE: S Y S D A T E; +SYSDBA: S Y S D B A; +SYS_DBURIGEN: S Y S '_' D B U R I G E N; +SYSDG: S Y S D G; +SYS_DL_CURSOR: S Y S '_' D L '_' C U R S O R; +SYS_DM_RXFORM_CHR: S Y S '_' D M '_' R X F O R M '_' C H R; +SYS_DM_RXFORM_NUM: S Y S '_' D M '_' R X F O R M '_' N U M; +SYS_DOM_COMPARE: S Y S '_' D O M '_' C O M P A R E; +SYS_DST_PRIM2SEC: S Y S '_' D S T '_' P R I M '2' S E C; +SYS_DST_SEC2PRIM: S Y S '_' D S T '_' S E C '2' P R I M; +SYS_ET_BFILE_TO_RAW: S Y S '_' E T '_' B F I L E '_' T O '_' R A W; +SYS_ET_BLOB_TO_IMAGE: S Y S '_' E T '_' B L O B '_' T O '_' I M A G E; +SYS_ET_IMAGE_TO_BLOB: S Y S '_' E T '_' I M A G E '_' T O '_' B L O B; +SYS_ET_RAW_TO_BFILE: S Y S '_' E T '_' R A W '_' T O '_' B F I L E; +SYS_EXTPDTXT: S Y S '_' E X T P D T X T; +SYS_EXTRACT_UTC: S Y S '_' E X T R A C T '_' U T C; +SYS_FBT_INSDEL: S Y S '_' F B T '_' I N S D E L; +SYS_FILTER_ACLS: S Y S '_' F I L T E R '_' A C L S; +SYS_FNMATCHES: S Y S '_' F N M A T C H E S; +SYS_FNREPLACE: S Y S '_' F N R E P L A C E; +SYS_GET_ACLIDS: S Y S '_' G E T '_' A C L I D S; +SYS_GET_COL_ACLIDS: S Y S '_' G E T '_' C O L '_' A C L I D S; +SYS_GET_PRIVILEGES: S Y S '_' G E T '_' P R I V I L E G E S; +SYS_GETTOKENID: S Y S '_' G E T T O K E N I D; +SYS_GETXTIVAL: S Y S '_' G E T X T I V A L; +SYS_GUID: S Y S '_' G U I D; +SYSGUID: S Y S G U I D; +SYSKM: S Y S K M; +SYS_MAKE_XMLNODEID: S Y S '_' M A K E '_' X M L N O D E I D; +SYS_MAKEXML: S Y S '_' M A K E X M L; +SYS_MKXMLATTR: S Y S '_' M K X M L A T T R; +SYS_MKXTI: S Y S '_' M K X T I; +SYSOBJ: S Y S O B J; +SYS_OP_ADT2BIN: S Y S '_' O P '_' A D T '2' B I N; +SYS_OP_ADTCONS: S Y S '_' O P '_' A D T C O N S; +SYS_OP_ALSCRVAL: S Y S '_' O P '_' A L S C R V A L; +SYS_OP_ATG: S Y S '_' O P '_' A T G; +SYS_OP_BIN2ADT: S Y S '_' O P '_' B I N '2' A D T; +SYS_OP_BITVEC: S Y S '_' O P '_' B I T V E C; +SYS_OP_BL2R: S Y S '_' O P '_' B L '2' R; +SYS_OP_BLOOM_FILTER_LIST: S Y S '_' O P '_' B L O O M '_' F I L T E R '_' L I S T; +SYS_OP_BLOOM_FILTER: S Y S '_' O P '_' B L O O M '_' F I L T E R; +SYS_OP_C2C: S Y S '_' O P '_' C '2' C; +SYS_OP_CAST: S Y S '_' O P '_' C A S T; +SYS_OP_CEG: S Y S '_' O P '_' C E G; +SYS_OP_CL2C: S Y S '_' O P '_' C L '2' C; +SYS_OP_COMBINED_HASH: S Y S '_' O P '_' C O M B I N E D '_' H A S H; +SYS_OP_COMP: S Y S '_' O P '_' C O M P; +SYS_OP_CONVERT: S Y S '_' O P '_' C O N V E R T; +SYS_OP_COUNTCHG: S Y S '_' O P '_' C O U N T C H G; +SYS_OP_CSCONV: S Y S '_' O P '_' C S C O N V; +SYS_OP_CSCONVTEST: S Y S '_' O P '_' C S C O N V T E S T; +SYS_OP_CSR: S Y S '_' O P '_' C S R; +SYS_OP_CSX_PATCH: S Y S '_' O P '_' C S X '_' P A T C H; +SYS_OP_CYCLED_SEQ: S Y S '_' O P '_' C Y C L E D '_' S E Q; +SYS_OP_DECOMP: S Y S '_' O P '_' D E C O M P; +SYS_OP_DESCEND: S Y S '_' O P '_' D E S C E N D; +SYS_OP_DISTINCT: S Y S '_' O P '_' D I S T I N C T; +SYS_OP_DRA: S Y S '_' O P '_' D R A; +SYS_OP_DUMP: S Y S '_' O P '_' D U M P; +SYS_OP_DV_CHECK: S Y S '_' O P '_' D V '_' C H E C K; +SYS_OP_ENFORCE_NOT_HAMO: S Y S '_' O P '_' E N F O R C E '_' N O T '_' N U L L '$'; +SYSOPER: S Y S O P E R; +SYS_OP_EXTRACT: S Y S '_' O P '_' E X T R A C T; +SYS_OP_GROUPING: S Y S '_' O P '_' G R O U P I N G; +SYS_OP_GUID: S Y S '_' O P '_' G U I D; +SYS_OP_HASH: S Y S '_' O P '_' H A S H; +SYS_OP_IIX: S Y S '_' O P '_' I I X; +SYS_OP_ITR: S Y S '_' O P '_' I T R; +SYS_OP_KEY_VECTOR_CREATE: S Y S '_' O P '_' K E Y '_' V E C T O R '_' C R E A T E; +SYS_OP_KEY_VECTOR_FILTER_LIST: S Y S '_' O P '_' K E Y '_' V E C T O R '_' F I L T E R '_' L I S T; +SYS_OP_KEY_VECTOR_FILTER: S Y S '_' O P '_' K E Y '_' V E C T O R '_' F I L T E R; +SYS_OP_KEY_VECTOR_SUCCEEDED: S Y S '_' O P '_' K E Y '_' V E C T O R '_' S U C C E E D E D; +SYS_OP_KEY_VECTOR_USE: S Y S '_' O P '_' K E Y '_' V E C T O R '_' U S E; +SYS_OP_LBID: S Y S '_' O P '_' L B I D; +SYS_OP_LOBLOC2BLOB: S Y S '_' O P '_' L O B L O C '2' B L O B; +SYS_OP_LOBLOC2CLOB: S Y S '_' O P '_' L O B L O C '2' C L O B; +SYS_OP_LOBLOC2ID: S Y S '_' O P '_' L O B L O C '2' I D; +SYS_OP_LOBLOC2NCLOB: S Y S '_' O P '_' L O B L O C '2' N C L O B; +SYS_OP_LOBLOC2TYP: S Y S '_' O P '_' L O B L O C '2' T Y P; +SYS_OP_LSVI: S Y S '_' O P '_' L S V I; +SYS_OP_LVL: S Y S '_' O P '_' L V L; +SYS_OP_MAKEOID: S Y S '_' O P '_' M A K E O I D; +SYS_OP_MAP_NONNULL: S Y S '_' O P '_' M A P '_' N O N N U L L; +SYS_OP_MSR: S Y S '_' O P '_' M S R; +SYS_OP_NICOMBINE: S Y S '_' O P '_' N I C O M B I N E; +SYS_OP_NIEXTRACT: S Y S '_' O P '_' N I E X T R A C T; +SYS_OP_NII: S Y S '_' O P '_' N I I; +SYS_OP_NIX: S Y S '_' O P '_' N I X; +SYS_OP_NOEXPAND: S Y S '_' O P '_' N O E X P A N D; +SYS_OP_NTCIMG: S Y S '_' O P '_' N T C I M G '$'; +SYS_OP_NUMTORAW: S Y S '_' O P '_' N U M T O R A W; +SYS_OP_OIDVALUE: S Y S '_' O P '_' O I D V A L U E; +SYS_OP_OPNSIZE: S Y S '_' O P '_' O P N S I Z E; +SYS_OP_PAR_1: S Y S '_' O P '_' P A R '_' '1'; +SYS_OP_PARGID_1: S Y S '_' O P '_' P A R G I D '_' '1'; +SYS_OP_PARGID: S Y S '_' O P '_' P A R G I D; +SYS_OP_PAR: S Y S '_' O P '_' P A R; +SYS_OP_PART_ID: S Y S '_' O P '_' P A R T '_' I D; +SYS_OP_PIVOT: S Y S '_' O P '_' P I V O T; +SYS_OP_R2O: S Y S '_' O P '_' R '2' O; +SYS_OP_RAWTONUM: S Y S '_' O P '_' R A W T O N U M; +SYS_OP_RDTM: S Y S '_' O P '_' R D T M; +SYS_OP_REF: S Y S '_' O P '_' R E F; +SYS_OP_RMTD: S Y S '_' O P '_' R M T D; +SYS_OP_ROWIDTOOBJ: S Y S '_' O P '_' R O W I D T O O B J; +SYS_OP_RPB: S Y S '_' O P '_' R P B; +SYS_OPTLOBPRBSC: S Y S '_' O P T L O B P R B S C; +SYS_OP_TOSETID: S Y S '_' O P '_' T O S E T I D; +SYS_OP_TPR: S Y S '_' O P '_' T P R; +SYS_OP_TRTB: S Y S '_' O P '_' T R T B; +SYS_OPTXICMP: S Y S '_' O P T X I C M P; +SYS_OPTXQCASTASNQ: S Y S '_' O P T X Q C A S T A S N Q; +SYS_OP_UNDESCEND: S Y S '_' O P '_' U N D E S C E N D; +SYS_OP_VECAND: S Y S '_' O P '_' V E C A N D; +SYS_OP_VECBIT: S Y S '_' O P '_' V E C B I T; +SYS_OP_VECOR: S Y S '_' O P '_' V E C O R; +SYS_OP_VECXOR: S Y S '_' O P '_' V E C X O R; +SYS_OP_VERSION: S Y S '_' O P '_' V E R S I O N; +SYS_OP_VREF: S Y S '_' O P '_' V R E F; +SYS_OP_VVD: S Y S '_' O P '_' V V D; +SYS_OP_XMLCONS_FOR_CSX: S Y S '_' O P '_' X M L C O N S '_' F O R '_' C S X; +SYS_OP_XPTHATG: S Y S '_' O P '_' X P T H A T G; +SYS_OP_XPTHIDX: S Y S '_' O P '_' X P T H I D X; +SYS_OP_XPTHOP: S Y S '_' O P '_' X P T H O P; +SYS_OP_XTXT2SQLT: S Y S '_' O P '_' X T X T '2' S Q L T; +SYS_OP_ZONE_ID: S Y S '_' O P '_' Z O N E '_' I D; +SYS_ORDERKEY_DEPTH: S Y S '_' O R D E R K E Y '_' D E P T H; +SYS_ORDERKEY_MAXCHILD: S Y S '_' O R D E R K E Y '_' M A X C H I L D; +SYS_ORDERKEY_PARENT: S Y S '_' O R D E R K E Y '_' P A R E N T; +SYS_PARALLEL_TXN: S Y S '_' P A R A L L E L '_' T X N; +SYS_PATHID_IS_ATTR: S Y S '_' P A T H I D '_' I S '_' A T T R; +SYS_PATHID_IS_NMSPC: S Y S '_' P A T H I D '_' I S '_' N M S P C; +SYS_PATHID_LASTNAME: S Y S '_' P A T H I D '_' L A S T N A M E; +SYS_PATHID_LASTNMSPC: S Y S '_' P A T H I D '_' L A S T N M S P C; +SYS_PATH_REVERSE: S Y S '_' P A T H '_' R E V E R S E; +SYS_PXQEXTRACT: S Y S '_' P X Q E X T R A C T; +SYS_RAW_TO_XSID: S Y S '_' R A W '_' T O '_' X S I D; +SYS_RID_ORDER: S Y S '_' R I D '_' O R D E R; +SYS_ROW_DELTA: S Y S '_' R O W '_' D E L T A; +SYS_SC_2_XMLT: S Y S '_' S C '_' '2' '_' X M L T; +SYS_SYNRCIREDO: S Y S '_' S Y N R C I R E D O; +SYSTEM_DEFINED: S Y S T E M '_' D E F I N E D; +SYSTEM: S Y S T E M; +SYSTIMESTAMP: S Y S T I M E S T A M P; +SYS_TYPEID: S Y S '_' T Y P E I D; +SYS_UMAKEXML: S Y S '_' U M A K E X M L; +SYS_XMLANALYZE: S Y S '_' X M L A N A L Y Z E; +SYS_XMLCONTAINS: S Y S '_' X M L C O N T A I N S; +SYS_XMLCONV: S Y S '_' X M L C O N V; +SYS_XMLEXNSURI: S Y S '_' X M L E X N S U R I; +SYS_XMLGEN: S Y S '_' X M L G E N; +SYS_XMLI_LOC_ISNODE: S Y S '_' X M L I '_' L O C '_' I S N O D E; +SYS_XMLI_LOC_ISTEXT: S Y S '_' X M L I '_' L O C '_' I S T E X T; +SYS_XMLINSTR: S Y S '_' X M L I N S T R; +SYS_XMLLOCATOR_GETSVAL: S Y S '_' X M L L O C A T O R '_' G E T S V A L; +SYS_XMLNODEID_GETCID: S Y S '_' X M L N O D E I D '_' G E T C I D; +SYS_XMLNODEID_GETLOCATOR: S Y S '_' X M L N O D E I D '_' G E T L O C A T O R; +SYS_XMLNODEID_GETOKEY: S Y S '_' X M L N O D E I D '_' G E T O K E Y; +SYS_XMLNODEID_GETPATHID: S Y S '_' X M L N O D E I D '_' G E T P A T H I D; +SYS_XMLNODEID_GETPTRID: S Y S '_' X M L N O D E I D '_' G E T P T R I D; +SYS_XMLNODEID_GETRID: S Y S '_' X M L N O D E I D '_' G E T R I D; +SYS_XMLNODEID_GETSVAL: S Y S '_' X M L N O D E I D '_' G E T S V A L; +SYS_XMLNODEID_GETTID: S Y S '_' X M L N O D E I D '_' G E T T I D; +SYS_XMLNODEID: S Y S '_' X M L N O D E I D; +SYS_XMLT_2_SC: S Y S '_' X M L T '_' '2' '_' S C; +SYS_XMLTRANSLATE: S Y S '_' X M L T R A N S L A T E; +SYS_XMLTYPE2SQL: S Y S '_' X M L T Y P E '2' S Q L; +SYS_XQ_ASQLCNV: S Y S '_' X Q '_' A S Q L C N V; +SYS_XQ_ATOMCNVCHK: S Y S '_' X Q '_' A T O M C N V C H K; +SYS_XQBASEURI: S Y S '_' X Q B A S E U R I; +SYS_XQCASTABLEERRH: S Y S '_' X Q C A S T A B L E E R R H; +SYS_XQCODEP2STR: S Y S '_' X Q C O D E P '2' S T R; +SYS_XQCODEPEQ: S Y S '_' X Q C O D E P E Q; +SYS_XQCON2SEQ: S Y S '_' X Q C O N '2' S E Q; +SYS_XQCONCAT: S Y S '_' X Q C O N C A T; +SYS_XQDELETE: S Y S '_' X Q D E L E T E; +SYS_XQDFLTCOLATION: S Y S '_' X Q D F L T C O L A T I O N; +SYS_XQDOC: S Y S '_' X Q D O C; +SYS_XQDOCURI: S Y S '_' X Q D O C U R I; +SYS_XQDURDIV: S Y S '_' X Q D U R D I V; +SYS_XQED4URI: S Y S '_' X Q E D '4' U R I; +SYS_XQENDSWITH: S Y S '_' X Q E N D S W I T H; +SYS_XQERRH: S Y S '_' X Q E R R H; +SYS_XQERR: S Y S '_' X Q E R R; +SYS_XQESHTMLURI: S Y S '_' X Q E S H T M L U R I; +SYS_XQEXLOBVAL: S Y S '_' X Q E X L O B V A L; +SYS_XQEXSTWRP: S Y S '_' X Q E X S T W R P; +SYS_XQEXTRACT: S Y S '_' X Q E X T R A C T; +SYS_XQEXTRREF: S Y S '_' X Q E X T R R E F; +SYS_XQEXVAL: S Y S '_' X Q E X V A L; +SYS_XQFB2STR: S Y S '_' X Q F B '2' S T R; +SYS_XQFNBOOL: S Y S '_' X Q F N B O O L; +SYS_XQFNCMP: S Y S '_' X Q F N C M P; +SYS_XQFNDATIM: S Y S '_' X Q F N D A T I M; +SYS_XQFNLNAME: S Y S '_' X Q F N L N A M E; +SYS_XQFNNM: S Y S '_' X Q F N N M; +SYS_XQFNNSURI: S Y S '_' X Q F N N S U R I; +SYS_XQFNPREDTRUTH: S Y S '_' X Q F N P R E D T R U T H; +SYS_XQFNQNM: S Y S '_' X Q F N Q N M; +SYS_XQFNROOT: S Y S '_' X Q F N R O O T; +SYS_XQFORMATNUM: S Y S '_' X Q F O R M A T N U M; +SYS_XQFTCONTAIN: S Y S '_' X Q F T C O N T A I N; +SYS_XQFUNCR: S Y S '_' X Q F U N C R; +SYS_XQGETCONTENT: S Y S '_' X Q G E T C O N T E N T; +SYS_XQINDXOF: S Y S '_' X Q I N D X O F; +SYS_XQINSERT: S Y S '_' X Q I N S E R T; +SYS_XQINSPFX: S Y S '_' X Q I N S P F X; +SYS_XQIRI2URI: S Y S '_' X Q I R I '2' U R I; +SYS_XQLANG: S Y S '_' X Q L A N G; +SYS_XQLLNMFRMQNM: S Y S '_' X Q L L N M F R M Q N M; +SYS_XQMKNODEREF: S Y S '_' X Q M K N O D E R E F; +SYS_XQNILLED: S Y S '_' X Q N I L L E D; +SYS_XQNODENAME: S Y S '_' X Q N O D E N A M E; +SYS_XQNORMSPACE: S Y S '_' X Q N O R M S P A C E; +SYS_XQNORMUCODE: S Y S '_' X Q N O R M U C O D E; +SYS_XQ_NRNG: S Y S '_' X Q '_' N R N G; +SYS_XQNSP4PFX: S Y S '_' X Q N S P '4' P F X; +SYS_XQNSPFRMQNM: S Y S '_' X Q N S P F R M Q N M; +SYS_XQPFXFRMQNM: S Y S '_' X Q P F X F R M Q N M; +SYS_XQ_PKSQL2XML: S Y S '_' X Q '_' P K S Q L '2' X M L; +SYS_XQPOLYABS: S Y S '_' X Q P O L Y A B S; +SYS_XQPOLYADD: S Y S '_' X Q P O L Y A D D; +SYS_XQPOLYCEL: S Y S '_' X Q P O L Y C E L; +SYS_XQPOLYCSTBL: S Y S '_' X Q P O L Y C S T B L; +SYS_XQPOLYCST: S Y S '_' X Q P O L Y C S T; +SYS_XQPOLYDIV: S Y S '_' X Q P O L Y D I V; +SYS_XQPOLYFLR: S Y S '_' X Q P O L Y F L R; +SYS_XQPOLYMOD: S Y S '_' X Q P O L Y M O D; +SYS_XQPOLYMUL: S Y S '_' X Q P O L Y M U L; +SYS_XQPOLYRND: S Y S '_' X Q P O L Y R N D; +SYS_XQPOLYSQRT: S Y S '_' X Q P O L Y S Q R T; +SYS_XQPOLYSUB: S Y S '_' X Q P O L Y S U B; +SYS_XQPOLYUMUS: S Y S '_' X Q P O L Y U M U S; +SYS_XQPOLYUPLS: S Y S '_' X Q P O L Y U P L S; +SYS_XQPOLYVEQ: S Y S '_' X Q P O L Y V E Q; +SYS_XQPOLYVGE: S Y S '_' X Q P O L Y V G E; +SYS_XQPOLYVGT: S Y S '_' X Q P O L Y V G T; +SYS_XQPOLYVLE: S Y S '_' X Q P O L Y V L E; +SYS_XQPOLYVLT: S Y S '_' X Q P O L Y V L T; +SYS_XQPOLYVNE: S Y S '_' X Q P O L Y V N E; +SYS_XQREF2VAL: S Y S '_' X Q R E F '2' V A L; +SYS_XQRENAME: S Y S '_' X Q R E N A M E; +SYS_XQREPLACE: S Y S '_' X Q R E P L A C E; +SYS_XQRESVURI: S Y S '_' X Q R E S V U R I; +SYS_XQRNDHALF2EVN: S Y S '_' X Q R N D H A L F '2' E V N; +SYS_XQRSLVQNM: S Y S '_' X Q R S L V Q N M; +SYS_XQRYENVPGET: S Y S '_' X Q R Y E N V P G E T; +SYS_XQRYVARGET: S Y S '_' X Q R Y V A R G E T; +SYS_XQRYWRP: S Y S '_' X Q R Y W R P; +SYS_XQSEQ2CON4XC: S Y S '_' X Q S E Q '2' C O N '4' X C; +SYS_XQSEQ2CON: S Y S '_' X Q S E Q '2' C O N; +SYS_XQSEQDEEPEQ: S Y S '_' X Q S E Q D E E P E Q; +SYS_XQSEQINSB: S Y S '_' X Q S E Q I N S B; +SYS_XQSEQRM: S Y S '_' X Q S E Q R M; +SYS_XQSEQRVS: S Y S '_' X Q S E Q R V S; +SYS_XQSEQSUB: S Y S '_' X Q S E Q S U B; +SYS_XQSEQTYPMATCH: S Y S '_' X Q S E Q T Y P M A T C H; +SYS_XQSTARTSWITH: S Y S '_' X Q S T A R T S W I T H; +SYS_XQSTATBURI: S Y S '_' X Q S T A T B U R I; +SYS_XQSTR2CODEP: S Y S '_' X Q S T R '2' C O D E P; +SYS_XQSTRJOIN: S Y S '_' X Q S T R J O I N; +SYS_XQSUBSTRAFT: S Y S '_' X Q S U B S T R A F T; +SYS_XQSUBSTRBEF: S Y S '_' X Q S U B S T R B E F; +SYS_XQTOKENIZE: S Y S '_' X Q T O K E N I Z E; +SYS_XQTREATAS: S Y S '_' X Q T R E A T A S; +SYS_XQ_UPKXML2SQL: S Y S '_' X Q '_' U P K X M L '2' S Q L; +SYS_XQXFORM: S Y S '_' X Q X F O R M; +SYS_XSID_TO_RAW: S Y S '_' X S I D '_' T O '_' R A W; +SYS_ZMAP_FILTER: S Y S '_' Z M A P '_' F I L T E R; +SYS_ZMAP_REFRESH: S Y S '_' Z M A P '_' R E F R E S H; +TABLE_LOOKUP_BY_NL: T A B L E '_' L O O K U P '_' B Y '_' N L; +TABLESPACE_NO: T A B L E S P A C E '_' N O; +TABLESPACE: T A B L E S P A C E; +TABLES: T A B L E S; +TABLE_STATS: T A B L E '_' S T A T S; +TABLE: T A B L E; +TABNO: T A B N O; +TAG: T A G; +TANH: T A N H; +TAN: T A N; +TBLORIDXPARTNUM: T B L '$' O R '$' I D X '$' P A R T '$' N U M; +TEMPFILE: T E M P F I L E; +TEMPLATE: T E M P L A T E; +TEMPORARY: T E M P O R A R Y; +TEMP_TABLE: T E M P '_' T A B L E; +TEST: T E S T; +TEXT: T E X T; +THAN: T H A N; +THEN: T H E N; +THE: T H E; +THREAD: T H R E A D; +THROUGH: T H R O U G H; +TIER: T I E R; +TIES: T I E S; +TIMEOUT: T I M E O U T; +TIMESTAMP_LTZ_UNCONSTRAINED: T I M E S T A M P '_' L T Z '_' U N C O N S T R A I N E D; +TIMESTAMP: T I M E S T A M P; +TIMESTAMP_TZ_UNCONSTRAINED: T I M E S T A M P '_' T Z '_' U N C O N S T R A I N E D; +TIMESTAMP_UNCONSTRAINED: T I M E S T A M P '_' U N C O N S T R A I N E D; +TIMES: T I M E S; +TIME: T I M E; +TIMEZONE: T I M E Z O N E; +TIMEZONE_ABBR: T I M E Z O N E '_' A B B R; +TIMEZONE_HOUR: T I M E Z O N E '_' H O U R; +TIMEZONE_MINUTE: T I M E Z O N E '_' M I N U T E; +TIMEZONE_OFFSET: T I M E Z O N E '_' O F F S E T; +TIMEZONE_REGION: T I M E Z O N E '_' R E G I O N; +TIME_ZONE: T I M E '_' Z O N E; +TIV_GB: T I V '_' G B; +TIV_SSF: T I V '_' S S F; +TO_ACLID: T O '_' A C L I D; +TO_BINARY_DOUBLE: T O '_' B I N A R Y '_' D O U B L E; +TO_BINARY_FLOAT: T O '_' B I N A R Y '_' F L O A T; +TO_BLOB: T O '_' B L O B; +TO_CLOB: T O '_' C L O B; +TO_DSINTERVAL: T O '_' D S I N T E R V A L; +TO_LOB: T O '_' L O B; +TO_MULTI_BYTE: T O '_' M U L T I '_' B Y T E; +TO_NCHAR: T O '_' N C H A R; +TO_NCLOB: T O '_' N C L O B; +TO_NUMBER: T O '_' N U M B E R; +TOPLEVEL: T O P L E V E L; +TO_SINGLE_BYTE: T O '_' S I N G L E '_' B Y T E; +TO_TIMESTAMP: T O '_' T I M E S T A M P; +TO_TIMESTAMP_TZ: T O '_' T I M E S T A M P '_' T Z; +TO_TIME: T O '_' T I M E; +TO_TIME_TZ: T O '_' T I M E '_' T Z; +TO: T O; +TO_YMINTERVAL: T O '_' Y M I N T E R V A L; +TRACE: T R A C E; +TRACING: T R A C I N G; +TRACKING: T R A C K I N G; +TRAILING: T R A I L I N G; +TRANSACTION: T R A N S A C T I O N; +TRANSFORM_DISTINCT_AGG: T R A N S F O R M '_' D I S T I N C T '_' A G G; +TRANSITIONAL: T R A N S I T I O N A L; +TRANSITION: T R A N S I T I O N; +TRANSLATE: T R A N S L A T E; +TRANSLATION: T R A N S L A T I O N; +TREAT: T R E A T; +TRIGGERS: T R I G G E R S; +TRIGGER: T R I G G E R; +TRUE: T R U E; +TRUNCATE: T R U N C A T E; +TRUNC: T R U N C; +TRUSTED: T R U S T E D; +TRUST: T R U S T; +TUNING: T U N I N G; +TX: T X; +TYPES: T Y P E S; +TYPE: T Y P E; +TZ_OFFSET: T Z '_' O F F S E T; +UB2: U B '2'; +UBA: U B A; +UCS2: U C S '2'; +UID: U I D; +UNARCHIVED: U N A R C H I V E D; +UNBOUNDED: U N B O U N D E D; +UNBOUND: U N B O U N D; +UNCONDITIONAL: U N C O N D I T I O N A L; +UNDER: U N D E R; +UNDO: U N D O; +UNDROP: U N D R O P; +UNIFORM: U N I F O R M; +UNION: U N I O N; +UNIQUE: U N I Q U E; +UNISTR: U N I S T R; +UNLIMITED: U N L I M I T E D; +UNLOAD: U N L O A D; +UNLOCK: U N L O C K; +UNMATCHED: U N M A T C H E D; +UNNEST_INNERJ_DISTINCT_VIEW: U N N E S T '_' I N N E R J '_' D I S T I N C T '_' V I E W; +UNNEST_NOSEMIJ_NODISTINCTVIEW: U N N E S T '_' N O S E M I J '_' N O D I S T I N C T V I E W; +UNNEST_SEMIJ_VIEW: U N N E S T '_' S E M I J '_' V I E W; +UNNEST: U N N E S T; +UNPACKED: U N P A C K E D; +UNPIVOT: U N P I V O T; +UNPLUG: U N P L U G; +UNPROTECTED: U N P R O T E C T E D; +UNQUIESCE: U N Q U I E S C E; +UNRECOVERABLE: U N R E C O V E R A B L E; +UNRESTRICTED: U N R E S T R I C T E D; +UNSUBSCRIBE: U N S U B S C R I B E; +UNTIL: U N T I L; +UNUSABLE: U N U S A B L E; +UNUSED: U N U S E D; +UPDATABLE: U P D A T A B L E; +UPDATED: U P D A T E D; +UPDATE: U P D A T E; +UPDATEXML: U P D A T E X M L; +UPD_INDEXES: U P D '_' I N D E X E S; +UPD_JOININDEX: U P D '_' J O I N I N D E X; +UPGRADE: U P G R A D E; +UPPER: U P P E R; +UPSERT: U P S E R T; +UROWID: U R O W I D; +USABLE: U S A B L E; +USAGE: U S A G E; +USE_ANTI: U S E '_' A N T I; +USE_CONCAT: U S E '_' C O N C A T; +USE_CUBE: U S E '_' C U B E; +USE_HASH_AGGREGATION: U S E '_' H A S H '_' A G G R E G A T I O N; +USE_HASH_GBY_FOR_PUSHDOWN: U S E '_' H A S H '_' G B Y '_' F O R '_' P U S H D O W N; +USE_HASH: U S E '_' H A S H; +USE_HIDDEN_PARTITIONS: U S E '_' H I D D E N '_' P A R T I T I O N S; +USE_INVISIBLE_INDEXES: U S E '_' I N V I S I B L E '_' I N D E X E S; +USE_MERGE_CARTESIAN: U S E '_' M E R G E '_' C A R T E S I A N; +USE_MERGE: U S E '_' M E R G E; +USE_NL: U S E '_' N L; +USE_NL_WITH_INDEX: U S E '_' N L '_' W I T H '_' I N D E X; +USE_PRIVATE_OUTLINES: U S E '_' P R I V A T E '_' O U T L I N E S; +USER_DATA: U S E R '_' D A T A; +USER_DEFINED: U S E R '_' D E F I N E D; +USERENV: U S E R E N V; +USERGROUP: U S E R G R O U P; +USER_RECYCLEBIN: U S E R '_' R E C Y C L E B I N; +USERS: U S E R S; +USER_TABLESPACES: U S E R '_' T A B L E S P A C E S; +USER: U S E R; +USE_SEMI: U S E '_' S E M I; +USE_STORED_OUTLINES: U S E '_' S T O R E D '_' O U T L I N E S; +USE_TTT_FOR_GSETS: U S E '_' T T T '_' F O R '_' G S E T S; +USE: U S E; +USE_VECTOR_AGGREGATION: U S E '_' V E C T O R '_' A G G R E G A T I O N; +USE_WEAK_NAME_RESL: U S E '_' W E A K '_' N A M E '_' R E S L; +USING_NO_EXPAND: U S I N G '_' N O '_' E X P A N D; +USING: U S I N G; +UTF16BE: U T F '1' '6' B E; +UTF16LE: U T F '1' '6' L E; +UTF32: U T F '3' '2'; +UTF8: U T F '8'; +V1: V '1'; +V2: V '2'; +VALIDATE: V A L I D A T E; +VALIDATION: V A L I D A T I O N; +VALID_TIME_END: V A L I D '_' T I M E '_' E N D; +VALUES: V A L U E S; +VALUE: V A L U E; +VARCHAR2: V A R C H A R '2'; +VARCHAR: V A R C H A R; +VARIABLE: V A R I A B L E; +VAR_POP: V A R '_' P O P; +VARRAYS: V A R R A Y S; +VARRAY: V A R R A Y; +VAR_SAMP: V A R '_' S A M P; +VARYING: V A R Y I N G; +VECTOR_READ_TRACE: V E C T O R '_' R E A D '_' T R A C E; +VECTOR_READ: V E C T O R '_' R E A D; +VECTOR_TRANSFORM_DIMS: V E C T O R '_' T R A N S F O R M '_' D I M S; +VECTOR_TRANSFORM_FACT: V E C T O R '_' T R A N S F O R M '_' F A C T; +VECTOR_TRANSFORM: V E C T O R '_' T R A N S F O R M; +VERIFIER: V E R I F I E R; +VERIFY: V E R I F Y; +VERSIONING: V E R S I O N I N G; +VERSIONS_ENDSCN: V E R S I O N S '_' E N D S C N; +VERSIONS_ENDTIME: V E R S I O N S '_' E N D T I M E; +VERSIONS_OPERATION: V E R S I O N S '_' O P E R A T I O N; +VERSIONS_STARTSCN: V E R S I O N S '_' S T A R T S C N; +VERSIONS_STARTTIME: V E R S I O N S '_' S T A R T T I M E; +VERSIONS: V E R S I O N S; +VERSIONS_XID: V E R S I O N S '_' X I D; +VERSION: V E R S I O N; +VIEW: V I E W; +VIOLATION: V I O L A T I O N; +VIRTUAL: V I R T U A L; +VISIBILITY: V I S I B I L I T Y; +VISIBLE: V I S I B L E; +VOLUME: V O L U M E; +VSIZE: V S I Z E; +WAIT: W A I T; +WALLET: W A L L E T; +WARNING: W A R N I N G; +WEEKS: W E E K S; +WEEK: W E E K; +WELLFORMED: W E L L F O R M E D; +WHENEVER: W H E N E V E R; +WHEN: W H E N; +WHERE: W H E R E; +WHILE: W H I L E; +WHITESPACE: W H I T E S P A C E; +WIDTH_BUCKET: W I D T H '_' B U C K E T; +WITHIN: W I T H I N; +WITHOUT: W I T H O U T; +WITH_PLSQL: W I T H '_' P L S Q L; +WITH: W I T H; +WORK: W O R K; +WRAPPED: W R A P P E D; +WRAPPER: W R A P P E R; +WRITE: W R I T E; +XDB_FASTPATH_INSERT: X D B '_' F A S T P A T H '_' I N S E R T; +XDB: X D B; +X_DYN_PRUNE: X '_' D Y N '_' P R U N E; +XID: X I D; +XML2OBJECT: X M L '2' O B J E C T; +XMLAGG: X M L A G G; +XMLATTRIBUTES: X M L A T T R I B U T E S; +XMLCAST: X M L C A S T; +XMLCDATA: X M L C D A T A; +XMLCOLATTVAL: X M L C O L A T T V A L; +XMLCOMMENT: X M L C O M M E N T; +XMLCONCAT: X M L C O N C A T; +XMLDIFF: X M L D I F F; +XML_DML_RWT_STMT: X M L '_' D M L '_' R W T '_' S T M T; +XMLELEMENT: X M L E L E M E N T; +XMLEXISTS2: X M L E X I S T S '2'; +XMLEXISTS: X M L E X I S T S; +XMLFOREST: X M L F O R E S T; +XMLINDEX: X M L I N D E X; +XMLINDEX_REWRITE_IN_SELECT: X M L I N D E X '_' R E W R I T E '_' I N '_' S E L E C T; +XMLINDEX_REWRITE: X M L I N D E X '_' R E W R I T E; +XMLINDEX_SEL_IDX_TBL: X M L I N D E X '_' S E L '_' I D X '_' T B L; +XMLISNODE: X M L I S N O D E; +XMLISVALID: X M L I S V A L I D; +XMLNAMESPACES: X M L N A M E S P A C E S; +XMLPARSE: X M L P A R S E; +XMLPATCH: X M L P A T C H; +XMLPI: X M L P I; +XMLQUERYVAL: X M L Q U E R Y V A L; +XMLQUERY: X M L Q U E R Y; +XMLROOT: X M L R O O T; +XMLSCHEMA: X M L S C H E M A; +XMLSERIALIZE: X M L S E R I A L I Z E; +XMLTABLE: X M L T A B L E; +XMLTRANSFORMBLOB: X M L T R A N S F O R M B L O B; +XMLTRANSFORM: X M L T R A N S F O R M; +XMLTYPE: X M L T Y P E; +XML: X M L; +XPATHTABLE: X P A T H T A B L E; +XS_SYS_CONTEXT: X S '_' S Y S '_' C O N T E X T; +XS: X S; +YEARS: Y E A R S; +YEAR: Y E A R; +YES: Y E S; +YMINTERVAL_UNCONSTRAINED: Y M I N T E R V A L '_' U N C O N S T R A I N E D; +ZONEMAP: Z O N E M A P; +ZONE: Z O N E; +PREDICTION: P R E D I C T I O N; +PREDICTION_BOUNDS: P R E D I C T I O N '_' B O U N D S; +PREDICTION_COST: P R E D I C T I O N '_' C O S T; +PREDICTION_DETAILS: P R E D I C T I O N '_' D E T A I L S; +PREDICTION_PROBABILITY: P R E D I C T I O N '_' P R O B A B I L I T Y; +PREDICTION_SET: P R E D I C T I O N '_' S E T; + +CUME_DIST: C U M E '_' D I S T; +DENSE_RANK: D E N S E '_' R A N K; +LISTAGG: L I S T A G G; +PERCENT_RANK: P E R C E N T '_' R A N K; +PERCENTILE_CONT: P E R C E N T I L E '_' C O N T; +PERCENTILE_DISC: P E R C E N T I L E '_' D I S C; +RANK: R A N K; + +AVG: A V G; +CORR: C O R R; +COVAR_: C O V A R '_'; +DECODE: D E C O D E; +LAG: L A G; +LEAD: L E A D; +MAX: M A X; +MEDIAN: M E D I A N; +MIN: M I N; +NTILE: N T I L E; +NVL: N V L; +RATIO_TO_REPORT: R A T I O '_' T O '_' R E P O R T; +REGR_: R E G R '_'; +ROUND: R O U N D; +ROW_NUMBER: R O W '_' N U M B E R; +SUBSTR: S U B S T R; +TO_CHAR: T O '_' C H A R; +TRIM: T R I M; +SUM: S U M; +STDDEV: S T D D E V; +VAR_: V A R '_'; +VARIANCE: V A R I A N C E; +LEAST: L E A S T; +GREATEST: G R E A T E S T; +TO_DATE: T O '_' D A T E; + +fragment A: [aA]; +fragment B: [bB]; +fragment C: [cC]; +fragment D: [dD]; +fragment E: [eE]; +fragment F: [fF]; +fragment G: [gG]; +fragment H: [hH]; +fragment I: [iI]; +fragment J: [jJ]; +fragment K: [kK]; +fragment L: [lL]; +fragment M: [mM]; +fragment N: [nN]; +fragment O: [oO]; +fragment P: [pP]; +fragment Q: [qQ]; +fragment R: [rR]; +fragment S: [sS]; +fragment T: [tT]; +fragment U: [uU]; +fragment V: [vV]; +fragment W: [wW]; +fragment X: [xX]; +fragment Y: [yY]; +fragment Z: [zZ]; + +// Rule #358 - subtoken typecast in , it also incorporates +// Lowercase 'n' is a usual addition to the standard + +NATIONAL_CHAR_STRING_LIT: 'N' '\'' (~('\'' | '\r' | '\n' ) | '\'' '\'' | NEWLINE)* '\''; + +// Rule #040 - subtoken typecast in +// Lowercase 'b' is a usual addition to the standard + +BIT_STRING_LIT: 'B' ('\'' [01]* '\'')+; + +// Rule #284 - subtoken typecast in +// Lowercase 'x' is a usual addition to the standard + +HEX_STRING_LIT: 'X' ('\'' [A-F0-9]* '\'')+; +DOUBLE_PERIOD: '..'; +PERIOD: '.'; + +//{ Rule #238 +// This rule is a bit tricky - it resolves the ambiguity with +// It also incorporates and for the +// Rule #501 was incorporated directly in the token +// See also the rule #617 +/* + : ( + UNSIGNED_INTEGER + ( '.' UNSIGNED_INTEGER + | {$type = UNSIGNED_INTEGER;} + ) ( E ('+' | '-')? UNSIGNED_INTEGER {$type = APPROXIMATE_NUM_LIT;} )? + | '.' UNSIGNED_INTEGER ( E ('+' | '-')? UNSIGNED_INTEGER {$type = APPROXIMATE_NUM_LIT;} )? + ) + (D | F)? + ;*/ + +UNSIGNED_INTEGER: [0-9]+; +APPROXIMATE_NUM_LIT: FLOAT_FRAGMENT ('E' ('+'|'-')? (FLOAT_FRAGMENT | [0-9]+))? ('D' | 'F')?; + +// Rule #--- is a base for Rule #065 , it incorporates +// and a superfluous subtoken typecasting of the "QUOTE" +CHAR_STRING: '\'' (~('\'' | '\r' | '\n') | '\'' '\'' | NEWLINE)* '\''; + +// Perl-style quoted string, see Oracle SQL reference, chapter String Literals +CHAR_STRING_PERL : 'Q' ( QS_ANGLE | QS_BRACE | QS_BRACK | QS_PAREN) -> type(CHAR_STRING); +fragment QUOTE : '\'' ; +fragment QS_ANGLE : QUOTE '<' .*? '>' QUOTE ; +fragment QS_BRACE : QUOTE '{' .*? '}' QUOTE ; +fragment QS_BRACK : QUOTE '[' .*? ']' QUOTE ; +fragment QS_PAREN : QUOTE '(' .*? ')' QUOTE ; +fragment QS_OTHER_CH: ~('<' | '{' | '[' | '(' | ' ' | '\t' | '\n' | '\r'); + +DELIMITED_ID: '"' (~('"' | '\r' | '\n') | '"' '"')+ '"' ; + +// SQL_SPECIAL_CHAR was split into single rules + +PERCENT: '%'; +AMPERSAND: '&'; +LEFT_PAREN: '('; +RIGHT_PAREN: ')'; +DOUBLE_ASTERISK: '**'; +ASTERISK: '*'; +PLUS_SIGN: '+'; +MINUS_SIGN: '-'; +COMMA: ','; +SOLIDUS: '/'; +AT_SIGN: '@'; +ASSIGN_OP: ':='; + +// See OCI reference for more information about this + +BINDVAR + : ':' SIMPLE_LETTER (SIMPLE_LETTER | [0-9] | '_')* + | ':' DELIMITED_ID // not used in SQL but spotted in v$sqltext when using cursor_sharing + | ':' UNSIGNED_INTEGER + | QUESTION_MARK // not in SQL, not in Oracle, not in OCI, use this for JDBC + ; + +NOT_EQUAL_OP: '!=' + | '<>' + | '^=' + | '~=' + ; +CARRET_OPERATOR_PART: '^'; +TILDE_OPERATOR_PART: '~'; +EXCLAMATION_OPERATOR_PART: '!'; +GREATER_THAN_OP: '>'; +LESS_THAN_OP: '<'; +COLON: ':'; +SEMICOLON: ';'; + +fragment +QUESTION_MARK: '?'; + +// protected UNDERSCORE : '_' SEPARATOR ; // subtoken typecast within +BAR: '|'; +EQUALS_OP: '='; + +// Rule #532 was split into single rules: +LEFT_BRACKET: '['; +RIGHT_BRACKET: ']'; + +//{ Rule #319 +INTRODUCER + : '_' //(SEPARATOR {$type = UNDERSCORE;})? + ; + +//{ Rule #479 +// It was originally a protected rule set to be filtered out but the and <'-'> clashed. +/*SEPARATOR + : '-' -> type('-') + | COMMENT -> channel(HIDDEN) + | (SPACE | NEWLINE)+ -> channel(HIDDEN) + ;*/ +//} + +SPACES: [ \t\r\n]+ -> skip; + + +// Rule #504 - simple_latin _letter was generalised into SIMPLE_LETTER +// Unicode is yet to be implemented - see NSF0 +fragment +SIMPLE_LETTER + : 'a'..'z' + | 'A'..'Z' + ; + +fragment +FLOAT_FRAGMENT + : UNSIGNED_INTEGER* '.'? UNSIGNED_INTEGER+ + ; + +// Rule #097 + +SINGLE_LINE_COMMENT: '--' ~('\r' | '\n')* (NEWLINE | EOF) -> channel(HIDDEN); +MULTI_LINE_COMMENT: '/*' .*? '*/' -> channel(HIDDEN); + +// SQL*Plus prompt +// TODO should be grammar rule, but tricky to implement + +PROMPT + : 'prompt' SPACE ( ~('\r' | '\n') )* (NEWLINE|EOF) + ; + +START_CMD + // TODO When using full word START there is a conflict with START WITH in sequences and CONNECT BY queries + // 'start' SPACE ( ~( '\r' | '\n') )* (NEWLINE|EOF) + : 'sta' SPACE ( ~('\r' | '\n') )* (NEWLINE|EOF) + // TODO Single @ conflicts with a database link name, like employees@remote + // | '@' ( ~('\r' | '\n') )* (NEWLINE|EOF) + | '@@' ( ~('\r' | '\n') )* (NEWLINE|EOF) + ; + +fragment +NEWLINE: '\r'? '\n'; + +fragment +SPACE: [ \t]; + +//{ Rule #442 additionally encapsulates a few STRING_LITs. +// Within testLiterals all reserved and non-reserved words are being resolved + +REGULAR_ID: SIMPLE_LETTER (SIMPLE_LETTER | '$' | '_' | '#' | [0-9])*; + +ZV: '@!' -> channel(HIDDEN); diff --git a/PlSqlParser.g4 b/PlSqlParser.g4 new file mode 100644 index 0000000..cbc6ccc --- /dev/null +++ b/PlSqlParser.g4 @@ -0,0 +1,6661 @@ + /** + * Oracle(c) PL/SQL 11g Parser + * + * Copyright (c) 2009-2011 Alexandre Porcelli + * Copyright (c) 2015-2017 Ivan Kochurkin (KvanTTT, kvanttt@gmail.com, Positive Technologies). + * Copyright (c) 2017 Mark Adams + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +parser grammar PlSqlParser; + +options { tokenVocab=PlSqlLexer; } + +@members {bool version12=true;} + +sql_script + : ((unit_statement | sql_plus_command) SEMICOLON?)* EOF + ; + +unit_statement + : transaction_control_statements + | alter_cluster + | alter_function + | alter_package + | alter_procedure + | alter_sequence + | alter_trigger + | alter_type + | alter_table + | alter_tablespace + | alter_index + | alter_library + | alter_materialized_view + | alter_materialized_view_log + | alter_user + | alter_view + + | analyze + | associate_statistics + | audit_traditional + | unified_auditing + + | create_function_body + | create_procedure_body + | create_package + | create_package_body + + | create_index + | create_table + | create_tablespace + | create_cluster + | create_context + | create_view //TODO + | create_directory + | create_materialized_view + | create_materialized_view_log + | create_user + + | create_sequence + | create_trigger + | create_type + | create_synonym + + | drop_function + | drop_package + | drop_procedure + | drop_sequence + | drop_trigger + | drop_type + | data_manipulation_language_statements + | drop_table + | drop_index + + | comment_on_column + | comment_on_table + + | anonymous_block + + | grant_statement + ; + +// DDL -> SQL Statements for Stored PL/SQL Units + +// Function DDLs + +drop_function + : DROP FUNCTION function_name ';' + ; + +alter_function + : ALTER FUNCTION function_name COMPILE DEBUG? compiler_parameters_clause* (REUSE SETTINGS)? ';' + ; + +create_function_body + : CREATE (OR REPLACE)? FUNCTION function_name ('(' (','? parameter)+ ')')? + RETURN type_spec (invoker_rights_clause | parallel_enable_clause | result_cache_clause | DETERMINISTIC)* + ((PIPELINED? (IS | AS) (DECLARE? seq_of_declare_specs? body | call_spec)) | (PIPELINED | AGGREGATE) USING implementation_type_name) ';' + ; + +// Creation Function - Specific Clauses + +parallel_enable_clause + : PARALLEL_ENABLE partition_by_clause? + ; + +partition_by_clause + : '(' PARTITION expression BY (ANY | (HASH | RANGE | LIST) paren_column_list) streaming_clause? ')' + ; + +result_cache_clause + : RESULT_CACHE relies_on_part? + ; + +relies_on_part + : RELIES_ON '(' tableview_name (',' tableview_name)* ')' + ; + +streaming_clause + : (ORDER | CLUSTER) expression BY paren_column_list + ; + +// Package DDLs + +drop_package + : DROP PACKAGE BODY? (schema_object_name '.')? package_name ';' + ; + +alter_package + : ALTER PACKAGE package_name COMPILE DEBUG? (PACKAGE | BODY | SPECIFICATION)? compiler_parameters_clause* (REUSE SETTINGS)? ';' + ; + +create_package + : CREATE (OR REPLACE)? PACKAGE (schema_object_name '.')? package_name invoker_rights_clause? (IS | AS) package_obj_spec* END package_name? ';' + ; + +create_package_body + : CREATE (OR REPLACE)? PACKAGE BODY (schema_object_name '.')? package_name (IS | AS) package_obj_body* (BEGIN seq_of_statements)? END package_name? ';' + ; + +// Create Package Specific Clauses + +package_obj_spec + : pragma_declaration + | variable_declaration + | subtype_declaration + | cursor_declaration + | exception_declaration + | type_declaration + | procedure_spec + | function_spec + ; + +procedure_spec + : PROCEDURE identifier ('(' parameter ( ',' parameter )* ')')? ';' + ; + +function_spec + : FUNCTION identifier ('(' parameter ( ',' parameter)* ')')? + RETURN type_spec (DETERMINISTIC)? (RESULT_CACHE)? ';' + ; + +package_obj_body + : variable_declaration + | subtype_declaration + | cursor_declaration + | exception_declaration + | type_declaration + | procedure_body + | function_body + | procedure_spec + | function_spec + ; + +// Procedure DDLs + +drop_procedure + : DROP PROCEDURE procedure_name ';' + ; + +alter_procedure + : ALTER PROCEDURE procedure_name COMPILE DEBUG? compiler_parameters_clause* (REUSE SETTINGS)? ';' + ; + +function_body + : FUNCTION identifier ('(' parameter (',' parameter)* ')')? + RETURN type_spec (invoker_rights_clause | parallel_enable_clause | result_cache_clause | DETERMINISTIC)* + ((PIPELINED? (IS | AS) (DECLARE? seq_of_declare_specs? body | call_spec)) | (PIPELINED | AGGREGATE) USING implementation_type_name) ';' + ; + +procedure_body + : PROCEDURE identifier ('(' parameter (',' parameter)* ')')? (IS | AS) + (DECLARE? seq_of_declare_specs? body | call_spec | EXTERNAL) ';' + ; + +create_procedure_body + : CREATE (OR REPLACE)? PROCEDURE procedure_name ('(' parameter (',' parameter)* ')')? + invoker_rights_clause? (IS | AS) + (DECLARE? seq_of_declare_specs? body | call_spec | EXTERNAL) ';' + ; + +// Trigger DDLs + +drop_trigger + : DROP TRIGGER trigger_name ';' + ; + +alter_trigger + : ALTER TRIGGER alter_trigger_name=trigger_name + ((ENABLE | DISABLE) | RENAME TO rename_trigger_name=trigger_name | COMPILE DEBUG? compiler_parameters_clause* (REUSE SETTINGS)?) ';' + ; + +create_trigger + : CREATE ( OR REPLACE )? TRIGGER trigger_name + (simple_dml_trigger | compound_dml_trigger | non_dml_trigger) + trigger_follows_clause? (ENABLE | DISABLE)? trigger_when_clause? trigger_body ';' + ; + +trigger_follows_clause + : FOLLOWS trigger_name (',' trigger_name)* + ; + +trigger_when_clause + : WHEN '(' condition ')' + ; + +// Create Trigger Specific Clauses + +simple_dml_trigger + : (BEFORE | AFTER | INSTEAD OF) dml_event_clause referencing_clause? for_each_row? + ; + +for_each_row + : FOR EACH ROW + ; + +compound_dml_trigger + : FOR dml_event_clause referencing_clause? + ; + +non_dml_trigger + : (BEFORE | AFTER) non_dml_event (OR non_dml_event)* ON (DATABASE | (schema_name '.')? SCHEMA) + ; + +trigger_body + : COMPOUND TRIGGER + | CALL identifier + | trigger_block + ; + +routine_clause + : routine_name function_argument? + ; + +compound_trigger_block + : COMPOUND TRIGGER seq_of_declare_specs? timing_point_section+ END trigger_name + ; + +timing_point_section + : bk=BEFORE STATEMENT IS trigger_block BEFORE STATEMENT ';' + | bk=BEFORE EACH ROW IS trigger_block BEFORE EACH ROW ';' + | ak=AFTER STATEMENT IS trigger_block AFTER STATEMENT ';' + | ak=AFTER EACH ROW IS trigger_block AFTER EACH ROW ';' + ; + +non_dml_event + : ALTER + | ANALYZE + | ASSOCIATE STATISTICS + | AUDIT + | COMMENT + | CREATE + | DISASSOCIATE STATISTICS + | DROP + | GRANT + | NOAUDIT + | RENAME + | REVOKE + | TRUNCATE + | DDL + | STARTUP + | SHUTDOWN + | DB_ROLE_CHANGE + | LOGON + | LOGOFF + | SERVERERROR + | SUSPEND + | DATABASE + | SCHEMA + | FOLLOWS + ; + +dml_event_clause + : dml_event_element (OR dml_event_element)* ON dml_event_nested_clause? tableview_name + ; + +dml_event_element + : (DELETE | INSERT | UPDATE) (OF column_list)? + ; + +dml_event_nested_clause + : NESTED TABLE tableview_name OF + ; + +referencing_clause + : REFERENCING referencing_element+ + ; + +referencing_element + : (NEW | OLD | PARENT) column_alias + ; + +// DDLs + +drop_type + : DROP TYPE BODY? type_name (FORCE | VALIDATE)? ';' + ; + +alter_type + : ALTER TYPE type_name + (compile_type_clause + | replace_type_clause + //TODO | {input.LT(2).getText().equalsIgnoreCase("attribute")}? alter_attribute_definition + | alter_method_spec + | alter_collection_clauses + | modifier_clause + ) dependent_handling_clause? ';' + ; + +// Alter Type Specific Clauses + +compile_type_clause + : COMPILE DEBUG? (SPECIFICATION | BODY)? compiler_parameters_clause* (REUSE SETTINGS)? + ; + +replace_type_clause + : REPLACE invoker_rights_clause? AS OBJECT '(' object_member_spec (',' object_member_spec)* ')' + ; + +alter_method_spec + : alter_method_element (',' alter_method_element)* + ; + +alter_method_element + : (ADD | DROP) (map_order_function_spec | subprogram_spec) + ; + +alter_attribute_definition + : (ADD | MODIFY | DROP) ATTRIBUTE (attribute_definition | '(' attribute_definition (',' attribute_definition)* ')') + ; + +attribute_definition + : attribute_name type_spec? + ; + +alter_collection_clauses + : MODIFY (LIMIT expression | ELEMENT TYPE type_spec) + ; + +dependent_handling_clause + : INVALIDATE + | CASCADE (CONVERT TO SUBSTITUTABLE | NOT? INCLUDING TABLE DATA)? dependent_exceptions_part? + ; + +dependent_exceptions_part + : FORCE? EXCEPTIONS INTO tableview_name + ; + +create_type + : CREATE (OR REPLACE)? TYPE (type_definition | type_body) ';' + ; + +// Create Type Specific Clauses + +type_definition + : type_name (OID CHAR_STRING)? object_type_def? + ; + +object_type_def + : invoker_rights_clause? (object_as_part | object_under_part) sqlj_object_type? + ('(' object_member_spec (',' object_member_spec)* ')')? modifier_clause* + ; + +object_as_part + : (IS | AS) (OBJECT | varray_type_def | nested_table_type_def) + ; + +object_under_part + : UNDER type_spec + ; + +nested_table_type_def + : TABLE OF type_spec (NOT HAMO)? + ; + +sqlj_object_type + : EXTERNAL NAME expression LANGUAGE JAVA USING (SQLDATA | CUSTOMDATUM | ORADATA) + ; + +type_body + : BODY type_name (IS | AS) (type_body_elements)+ END + ; + +type_body_elements + : map_order_func_declaration + | subprog_decl_in_type + ; + +map_order_func_declaration + : (MAP | ORDER) MEMBER func_decl_in_type + ; + +subprog_decl_in_type + : (MEMBER | STATIC) (proc_decl_in_type | func_decl_in_type | constructor_declaration) + ; + +proc_decl_in_type + : PROCEDURE procedure_name '(' type_elements_parameter (',' type_elements_parameter)* ')' + (IS | AS) (call_spec | DECLARE? seq_of_declare_specs? body ';') + ; + +func_decl_in_type + : FUNCTION function_name ('(' type_elements_parameter (',' type_elements_parameter)* ')')? + RETURN type_spec (IS | AS) (call_spec | DECLARE? seq_of_declare_specs? body ';') + ; + +constructor_declaration + : FINAL? INSTANTIABLE? CONSTRUCTOR FUNCTION type_spec + ('(' (SELF IN OUT type_spec ',') type_elements_parameter (',' type_elements_parameter)* ')')? + RETURN SELF AS RESULT (IS | AS) (call_spec | DECLARE? seq_of_declare_specs? body ';') + ; + +// Common Type Clauses + +modifier_clause + : NOT? (INSTANTIABLE | FINAL | OVERRIDING) + ; + +object_member_spec + : identifier type_spec sqlj_object_type_attr? + | element_spec + ; + +sqlj_object_type_attr + : EXTERNAL NAME expression + ; + +element_spec + : modifier_clause? element_spec_options+ (',' pragma_clause)? + ; + +element_spec_options + : subprogram_spec + | constructor_spec + | map_order_function_spec + ; + +subprogram_spec + : (MEMBER | STATIC) (type_procedure_spec | type_function_spec) + ; + +type_procedure_spec + : PROCEDURE procedure_name '(' type_elements_parameter (',' type_elements_parameter)* ')' ((IS | AS) call_spec)? + ; + +type_function_spec + : FUNCTION function_name ('(' type_elements_parameter (',' type_elements_parameter)* ')')? + RETURN (type_spec | SELF AS RESULT) ((IS | AS) call_spec | EXTERNAL VARIABLE? NAME expression)? + ; + +constructor_spec + : FINAL? INSTANTIABLE? CONSTRUCTOR FUNCTION + type_spec ('(' (SELF IN OUT type_spec ',') type_elements_parameter (',' type_elements_parameter)* ')')? + RETURN SELF AS RESULT ((IS | AS) call_spec)? + ; + +map_order_function_spec + : (MAP | ORDER) MEMBER type_function_spec + ; + +pragma_clause + : PRAGMA RESTRICT_REFERENCES '(' pragma_elements (',' pragma_elements)* ')' + ; + +pragma_elements + : identifier + | DEFAULT + ; + +type_elements_parameter + : parameter_name type_spec + ; + +// Sequence DDLs + +drop_sequence + : DROP SEQUENCE sequence_name ';' + ; + +alter_sequence + : ALTER SEQUENCE sequence_name sequence_spec+ ';' + ; + +create_sequence + : CREATE SEQUENCE sequence_name (sequence_start_clause | sequence_spec)* ';' + ; + +// Common Sequence + +sequence_spec + : INCREMENT BY UNSIGNED_INTEGER + | MAXVALUE UNSIGNED_INTEGER + | NOMAXVALUE + | MINVALUE UNSIGNED_INTEGER + | NOMINVALUE + | CYCLE + | NOCYCLE + | CACHE UNSIGNED_INTEGER + | NOCACHE + | ORDER + | NOORDER + ; + +sequence_start_clause + : START WITH UNSIGNED_INTEGER + ; + +create_index + : CREATE (UNIQUE | BITMAP)? INDEX index_name + ON (cluster_index_clause | table_index_clause | bitmap_join_index_clause) + UNUSABLE? + ';' + ; + +cluster_index_clause + : CLUSTER cluster_name index_attributes? + ; + +cluster_name + : (id_expression '.')? id_expression + ; + +table_index_clause + : tableview_name table_alias? '(' (','? index_expr (ASC | DESC)? )+ ')' + index_properties? + ; +bitmap_join_index_clause + : tableview_name '(' (','? (tableview_name | table_alias)? column_name (ASC | DESC)? )+ ')' + FROM (','? tableview_name table_alias)+ + where_clause local_partitioned_index? index_attributes? + ; + +index_expr + : column_name + | expression + ; + +index_properties + : (global_partitioned_index | local_partitioned_index | index_attributes)+ + | INDEXTYPE IS (domain_index_clause | xmlindex_clause) + ; + +domain_index_clause + : indextype local_domain_index_clause? parallel_clause? (PARAMETERS '(' odci_parameters ')' )? + ; + +local_domain_index_clause + : LOCAL ('(' (','? PARTITION partition_name (PARAMETERS '(' odci_parameters ')' )? )+ ')' )? + ; + +xmlindex_clause + : (XDB '.')? XMLINDEX local_xmlindex_clause? + parallel_clause? //TODO xmlindex_parameters_clause? + ; + +local_xmlindex_clause + : LOCAL ('(' (','? PARTITION partition_name //TODO xmlindex_parameters_clause? + )+ ')')? + ; + +global_partitioned_index + : GLOBAL PARTITION BY (RANGE '(' (','? column_name)+ ')' '(' index_partitioning_clause ')' + | HASH '(' (','? column_name)+ ')' + (individual_hash_partitions + | hash_partitions_by_quantity + ) + ) + ; + +index_partitioning_clause + : PARTITION partition_name? VALUES LESS THAN '(' (','? literal)+ ')' + segment_attributes_clause? + ; + +local_partitioned_index + : LOCAL (on_range_partitioned_table + | on_list_partitioned_table + | on_hash_partitioned_table + | on_comp_partitioned_table + )? + ; + +on_range_partitioned_table + : '(' (','? PARTITION partition_name? + ((segment_attributes_clause | key_compression)+ )? + UNUSABLE? )+ + ')' + ; + +on_list_partitioned_table + : '(' (','? PARTITION partition_name? + ((segment_attributes_clause | key_compression)+ )? + UNUSABLE? )+ + ')' + ; + +on_hash_partitioned_table + : STORE IN '(' (','? tablespace)+ ')' + | '(' (','? PARTITION partition_name? (TABLESPACE tablespace)? + key_compression? UNUSABLE?)+ + ')' + ; + +on_comp_partitioned_table + : (STORE IN '(' (','? tablespace)+ ')' )? + '(' (','? PARTITION partition_name? + ((segment_attributes_clause | key_compression)+)? + UNUSABLE index_subpartition_clause? )+ + ')' + ; + +index_subpartition_clause + : STORE IN '(' (','? tablespace)+ ')' + | '(' (','? SUBPARTITION subpartition_name? (TABLESPACE tablespace)? + key_compression? UNUSABLE?)+ + ')' + ; + + +odci_parameters + : CHAR_STRING + ; + +indextype + : (id_expression '.')? id_expression + ; + +//https://docs.oracle.com/cd/E11882_01/server.112/e41084/statements_1010.htm#SQLRF00805 +alter_index + : ALTER INDEX index_name (alter_index_ops_set1 | alter_index_ops_set2) ';' + ; + +alter_index_ops_set1 + : ( deallocate_unused_clause + | allocate_extent_clause + | shrink_clause + | parallel_clause + | physical_attributes_clause + | logging_clause + )+ + ; + +alter_index_ops_set2 + : rebuild_clause + | PARAMETERS '(' odci_parameters ')' + | COMPILE + | enable_or_disable + | UNUSABLE + | visible_or_invisible + | RENAME TO new_index_name + | COALESCE + | monitoring_nomonitoring USAGE + | UPDATE BLOCK REFERENCES + | alter_index_partitioning + ; + +visible_or_invisible + : VISIBLE + | INVISIBLE + ; + +monitoring_nomonitoring + : MONITORING + | NOMONITORING + ; + +rebuild_clause + : REBUILD ( PARTITION partition_name + | SUBPARTITION subpartition_name + | REVERSE + | NOREVERSE + )? + ( parallel_clause + | TABLESPACE tablespace + | PARAMETERS '(' odci_parameters ')' +//TODO | xmlindex_parameters_clause + | ONLINE + | physical_attributes_clause + | key_compression + | logging_clause + )* + ; + +alter_index_partitioning + : modify_index_default_attrs + | add_hash_index_partition + | modify_index_partition + | rename_index_partition + | drop_index_partition + | split_index_partition + | coalesce_index_partition + | modify_index_subpartition + ; + +modify_index_default_attrs + : MODIFY DEFAULT ATTRIBUTES (FOR PARTITION partition_name)? + ( physical_attributes_clause + | TABLESPACE (tablespace | DEFAULT) + | logging_clause + ) + ; + +add_hash_index_partition + : ADD PARTITION partition_name? (TABLESPACE tablespace)? + key_compression? parallel_clause? + ; + +coalesce_index_partition + : COALESCE PARTITION parallel_clause? + ; + +modify_index_partition + : MODIFY PARTITION partition_name + ( modify_index_partitions_ops+ + | PARAMETERS '(' odci_parameters ')' + | COALESCE + | UPDATE BLOCK REFERENCES + | UNUSABLE + ) + ; + +modify_index_partitions_ops + : deallocate_unused_clause + | allocate_extent_clause + | physical_attributes_clause + | logging_clause + | key_compression + ; + +rename_index_partition + : RENAME (PARTITION partition_name | SUBPARTITION subpartition_name) + TO new_partition_name + ; + +drop_index_partition + : DROP PARTITION partition_name + ; + +split_index_partition + : SPLIT PARTITION partition_name_old AT '(' (','? literal)+ ')' + (INTO '(' index_partition_description ',' index_partition_description ')' ) ? parallel_clause? + ; + +index_partition_description + : PARTITION (partition_name ( (segment_attributes_clause | key_compression)+ + | PARAMETERS '(' odci_parameters ')' + ) + UNUSABLE? + )? + ; + +modify_index_subpartition + : MODIFY SUBPARTITION subpartition_name (UNUSABLE + | allocate_extent_clause + | deallocate_unused_clause + ) + ; + +partition_name_old + : partition_name + ; + +new_partition_name + : partition_name + ; + +new_index_name + : index_name + ; + +create_user + : CREATE USER + user_object_name + ( identified_by + | identified_other_clause + | user_tablespace_clause + | quota_clause + | profile_clause + | password_expire_clause + | user_lock_clause + | user_editions_clause + | container_clause + )+ ';' + ; + +// The standard clauses only permit one user per statement. +// The proxy clause allows multiple users for a proxy designation. +alter_user + : ALTER USER + user_object_name + ( alter_identified_by + | identified_other_clause + | user_tablespace_clause + | quota_clause + | profile_clause + | user_default_role_clause + | password_expire_clause + | user_lock_clause + | alter_user_editions_clause + | container_clause + | container_data_clause + )+ + ';' + | (','? user_object_name)+ proxy_clause ';' + ; + +alter_identified_by + : identified_by (REPLACE id_expression)? + ; + +identified_by + : IDENTIFIED BY id_expression + ; + +identified_other_clause + : IDENTIFIED (EXTERNALLY | GLOBALLY) (AS quoted_string)? + ; + +user_tablespace_clause + : (DEFAULT | TEMPORARY) TABLESPACE id_expression + ; + +quota_clause + : QUOTA (size_clause | UNLIMITED) ON id_expression + ; + +profile_clause + : PROFILE id_expression + ; + +role_clause + : (','? role_name)+ + | ALL (EXCEPT (','? role_name)+)* + ; + +user_default_role_clause + : DEFAULT ROLE (NONE | role_clause) + ; + +password_expire_clause + : PASSWORD EXPIRE + ; + +user_lock_clause + : ACCOUNT (LOCK | UNLOCK) + ; + +user_editions_clause + : ENABLE EDITIONS + ; + +alter_user_editions_clause + : user_editions_clause (FOR (','? regular_id)+)? FORCE? + ; + +proxy_clause + : REVOKE CONNECT THROUGH (ENTERPRISE USERS | user_object_name) + | GRANT CONNECT THROUGH + ( ENTERPRISE USERS + | user_object_name + (WITH (NO ROLES | ROLE role_clause))? + (AUTHENTICATION REQUIRED)? + (AUTHENTICATED USING (PASSWORD | CERTIFICATE | DISTINGUISHED NAME))? + ) + ; + +container_names + : LEFT_PAREN (','? id_expression)+ RIGHT_PAREN + ; + +set_container_data + : SET CONTAINER_DATA EQUALS_OP (ALL | DEFAULT | container_names) + ; + +add_rem_container_data + : (ADD | REMOVE) CONTAINER_DATA EQUALS_OP container_names + ; + +container_data_clause + : set_container_data + | add_rem_container_data (FOR container_tableview_name)? + ; + +// https://docs.oracle.com/cd/E11882_01/server.112/e41084/statements_4005.htm#SQLRF01105 +analyze + : ( ANALYZE (TABLE tableview_name | INDEX index_name) partition_extention_clause? + | ANALYZE CLUSTER cluster_name + ) + + ( validation_clauses + | LIST CHAINED ROWS into_clause1? + | DELETE SYSTEM? STATISTICS + ) + ';' + ; + +partition_extention_clause + : PARTITION ( '(' partition_name ')' + | FOR '(' (','? partition_key_value)+ ')' + ) + | SUBPARTITION ( '(' subpartition_name ')' + | FOR '(' (','? subpartition_key_value)+ ')' + ) + ; + +validation_clauses + : VALIDATE REF UPDATE (SET DANGLING TO HAMO)? + | VALIDATE STRUCTURE + ( CASCADE FAST + | CASCADE online_or_offline? into_clause? + | CASCADE + )? + online_or_offline? into_clause? + ; + +online_or_offline + : OFFLINE + | ONLINE + ; + +into_clause1 + : INTO tableview_name? + ; + +//Making assumption on partition ad subpartition key value clauses +partition_key_value + : literal + ; + +subpartition_key_value + : literal + ; + +//https://docs.oracle.com/cd/E11882_01/server.112/e41084/statements_4006.htm#SQLRF01106 +associate_statistics + : ASSOCIATE STATISTICS + WITH (column_association | function_association) + storage_table_clause? + ';' + ; + +column_association + : COLUMNS (','? tableview_name '.' column_name)+ using_statistics_type + ; + +function_association + : ( FUNCTIONS (','? function_name)+ + | PACKAGES (','? package_name)+ + | TYPES (','? type_name)+ + | INDEXES (','? index_name)+ + | INDEXTYPES (','? indextype_name)+ + ) + + ( using_statistics_type + | default_cost_clause (',' default_selectivity_clause)? + | default_selectivity_clause (',' default_cost_clause)? + ) + ; + +indextype_name + : id_expression + ; + + +using_statistics_type + : USING (statistics_type_name | HAMO) + ; + +statistics_type_name + : regular_id + ; + +default_cost_clause + : DEFAULT COST '(' cpu_cost ',' io_cost ',' network_cost ')' + ; + +cpu_cost + : UNSIGNED_INTEGER + ; + +io_cost + : UNSIGNED_INTEGER + ; + +network_cost + : UNSIGNED_INTEGER + ; + +default_selectivity_clause + : DEFAULT SELECTIVITY default_selectivity + ; + +default_selectivity + : UNSIGNED_INTEGER + ; + +storage_table_clause + : WITH (SYSTEM | USER) MANAGED STORAGE TABLES + ; + +// https://docs.oracle.com/database/121/SQLRF/statements_4008.htm#SQLRF56110 +unified_auditing + : {version12}? + AUDIT (POLICY policy_name ((BY | EXCEPT) (','? audit_user)+ )? + (WHENEVER NOT? SUCCESSFUL)? + | CONTEXT NAMESPACE oracle_namespace + ATTRIBUTES (','? attribute_name)+ (BY (','? audit_user)+)? + ) + ';' + ; + +policy_name + : identifier + ; + +// https://docs.oracle.com/cd/E11882_01/server.112/e41084/statements_4007.htm#SQLRF01107 +// https://docs.oracle.com/database/121/SQLRF/statements_4007.htm#SQLRF01107 + +audit_traditional + : AUDIT ( audit_operation_clause (auditing_by_clause | IN SESSION CURRENT)? + | audit_schema_object_clause + | NETWORK + | audit_direct_path + ) + (BY (SESSION | ACCESS) )? (WHENEVER NOT? SUCCESSFUL)? + audit_container_clause? + ';' + ; + +audit_direct_path + : {version12}? DIRECT_PATH auditing_by_clause + ; + +audit_container_clause + : {version12}? (CONTAINER EQUALS_OP (CURRENT | ALL)) + ; + +audit_operation_clause + : ( (','? (sql_statement_shortcut | ALL STATEMENTS?) )+ + | (','? (system_privilege | ALL PRIVILEGES) )+ + ) + ; + +auditing_by_clause + : BY (','? audit_user)+ + ; + +audit_user + : regular_id + ; + +audit_schema_object_clause + : ( (','? sql_operation)+ | ALL) auditing_on_clause + ; + +sql_operation + : ALTER + | AUDIT + | COMMENT + | DELETE + | EXECUTE + | FLASHBACK + | GRANT + | INDEX + | INSERT + | LOCK + | READ + | RENAME + | SELECT + | UPDATE + ; + +auditing_on_clause + : ON ( object_name + | DIRECTORY regular_id + | MINING MODEL model_name + | {version12}? SQL TRANSLATION PROFILE profile_name + | DEFAULT + ) + ; + +model_name + : (id_expression '.')? id_expression + ; + +object_name + : (id_expression '.')? id_expression + ; + +profile_name + : (id_expression '.')? id_expression + ; + +sql_statement_shortcut + : ALTER SYSTEM + | CLUSTER + | CONTEXT + | DATABASE LINK + | DIMENSION + | DIRECTORY + | INDEX + | MATERIALIZED VIEW + | NOT EXISTS + | OUTLINE + | {version12}? PLUGGABLE DATABASE + | PROCEDURE + | PROFILE + | PUBLIC DATABASE LINK + | PUBLIC SYNONYM + | ROLE + | ROLLBACK SEGMENT + | SEQUENCE + | SESSION + | SYNONYM + | SYSTEM AUDIT + | SYSTEM GRANT + | TABLE + | TABLESPACE + | TRIGGER + | TYPE + | USER + | VIEW + | ALTER SEQUENCE + | ALTER TABLE + | COMMENT TABLE + | DELETE TABLE + | EXECUTE PROCEDURE + | GRANT DIRECTORY + | GRANT PROCEDURE + | GRANT SEQUENCE + | GRANT TABLE + | GRANT TYPE + | INSERT TABLE + | LOCK TABLE + | SELECT SEQUENCE + | SELECT TABLE + | UPDATE TABLE + ; + +drop_index + : DROP INDEX index_name ';' + ; + +grant_statement + : GRANT + ( ','? + (role_name + | system_privilege + | object_privilege paren_column_list? + ) + )+ + (ON grant_object_name)? + TO (','? grantee_name | PUBLIC)+ + (WITH (ADMIN | DELEGATE) OPTION)? + (WITH HIERARCHY OPTION)? + (WITH GRANT OPTION)? + container_clause? ';' + ; + +container_clause + : CONTAINER EQUALS_OP (CURRENT | ALL) + ; + +create_directory + : CREATE (OR REPLACE)? DIRECTORY directory_name AS directory_path + ';' + ; + +directory_name + : regular_id + ; + +directory_path + : CHAR_STRING + ; + +// https://docs.oracle.com/cd/E11882_01/appdev.112/e25519/alter_library.htm#LNPLS99946 +// https://docs.oracle.com/database/121/LNPLS/alter_library.htm#LNPLS99946 +alter_library + : ALTER LIBRARY library_name + ( COMPILE library_debug? compiler_parameters_clause* (REUSE SETTINGS)? + | library_editionable + ) + ';' + ; + +library_editionable + : {version12}? (EDITIONABLE | NONEDITIONABLE) + ; + +library_debug + : {version12}? DEBUG + ; + + +compiler_parameters_clause + : parameter_name EQUALS_OP parameter_value + ; + +parameter_value + : regular_id + ; + +library_name + : (regular_id '.')? regular_id + ; + +// https://docs.oracle.com/cd/E11882_01/server.112/e41084/statements_4004.htm#SQLRF01104 +// https://docs.oracle.com/database/121/SQLRF/statements_4004.htm#SQLRF01104 +alter_view + : ALTER VIEW tableview_name + ( ADD out_of_line_constraint + | MODIFY CONSTRAINT constraint_name (RELY | NORELY) + | DROP ( CONSTRAINT constraint_name + | PRIMARY KEY + | UNIQUE '(' (','? column_name)+ ')' + ) + | COMPILE + | READ (ONLY | WRITE) + | alter_view_editionable? + ) + ';' + ; + +alter_view_editionable + : {version12}? (EDITIONABLE | NONEDITIONABLE) + ; + +create_view + : CREATE (OR REPLACE)? (OR? FORCE)? EDITIONING? VIEW + tableview_name view_options? + AS subquery subquery_restriction_clause? + ; + +view_options + : view_alias_constraint + | object_view_clause +// | xmltype_view_clause //TODO + ; + +view_alias_constraint + : '(' ( ','? (table_alias inline_constraint* | out_of_line_constraint) )+ ')' + ; + +object_view_clause + : OF type_name + ( WITH OBJECT (IDENTIFIER|ID|OID) ( DEFAULT | '(' (','? REGULAR_ID)+ ')' ) + | UNDER tableview_name + ) + ( '(' ( ','? (out_of_line_constraint | REGULAR_ID inline_constraint ) )+ ')' )* + ; + +inline_constraint + : (CONSTRAINT constraint_name)? + ( NOT? HAMO + | UNIQUE + | PRIMARY KEY + | references_clause + | check_constraint + ) + constraint_state? + ; + +inline_ref_constraint + : SCOPE IS tableview_name + | WITH ROWID + | (CONSTRAINT constraint_name)? references_clause constraint_state? + ; + +out_of_line_ref_constraint + : SCOPE FOR '(' ref_col_or_attr=regular_id ')' IS tableview_name + | REF '(' ref_col_or_attr=regular_id ')' WITH ROWID + | (CONSTRAINT constraint_name)? FOREIGN KEY '(' ( ','? ref_col_or_attr=regular_id)+ ')' references_clause constraint_state? + ; + +out_of_line_constraint + : ( (CONSTRAINT constraint_name)? + ( UNIQUE '(' (','? column_name)+ ')' + | PRIMARY KEY '(' (','? column_name)+ ')' + | foreign_key_clause + | CHECK '(' expression ')' + ) + ) + constraint_state? + ; + +constraint_state + : ( NOT? DEFERRABLE + | INITIALLY (IMMEDIATE|DEFERRED) + | (RELY|NORELY) + | (ENABLE|DISABLE) + | (VALIDATE|NOVALIDATE) + | using_index_clause + )+ + ; + +alter_tablespace + : ALTER TABLESPACE tablespace + ( DEFAULT table_compression? storage_clause? + | MINIMUM EXTENT size_clause + | RESIZE size_clause + | COALESCE + | SHRINK SPACE_KEYWORD (KEEP size_clause)? + | RENAME TO new_tablespace_name + | begin_or_end BACKUP + | datafile_tempfile_clauses + | tablespace_logging_clauses + | tablespace_group_clause + | tablespace_state_clauses + | autoextend_clause + | flashback_mode_clause + | tablespace_retention_clause + ) + ';' + ; + +datafile_tempfile_clauses + : ADD (datafile_specification | tempfile_specification) + | DROP (DATAFILE | TEMPFILE) (filename | UNSIGNED_INTEGER) (KEEP size_clause)? + | SHRINK TEMPFILE (filename | UNSIGNED_INTEGER) (KEEP size_clause)? + | RENAME DATAFILE (','? filename)+ TO (','? filename)+ + | (DATAFILE | TEMPFILE) (online_or_offline) + ; + +tablespace_logging_clauses + : logging_clause + | NO? FORCE LOGGING + ; + +tablespace_group_clause + : TABLESPACE GROUP (tablespace_group_name | CHAR_STRING) + ; + +tablespace_group_name + : regular_id + ; + +tablespace_state_clauses + : ONLINE + | OFFLINE (NORMAL | TEMPORARY | IMMEDIATE)? + | READ (ONLY | WRITE) + | PERMANENT + | TEMPORARY + ; + +flashback_mode_clause + : FLASHBACK (ON | OFF) + ; + +new_tablespace_name + : tablespace + ; + +create_tablespace + : CREATE (BIGFILE | SMALLFILE)? + ( permanent_tablespace_clause + | temporary_tablespace_clause + | undo_tablespace_clause + ) + ';' + ; + +permanent_tablespace_clause + : TABLESPACE id_expression datafile_specification? + ( MINIMUM EXTENT size_clause + | BLOCKSIZE size_clause + | logging_clause + | FORCE LOGGING + | (ONLINE | OFFLINE) + | ENCRYPTION tablespace_encryption_spec + | DEFAULT //TODO table_compression? storage_clause? + | extent_management_clause + | segment_management_clause + | flashback_mode_clause + )* + ; + +tablespace_encryption_spec + : USING encrypt_algorithm=CHAR_STRING + ; + +logging_clause + : LOGGING + | NOLOGGING + | FILESYSTEM_LIKE_LOGGING + ; + +extent_management_clause + : EXTENT MANAGEMENT LOCAL + ( AUTOALLOCATE + | UNIFORM (SIZE size_clause)? + )? + ; + +segment_management_clause + : SEGMENT SPACE_KEYWORD MANAGEMENT (AUTO | MANUAL) + ; + +temporary_tablespace_clause + : TEMPORARY TABLESPACE tablespace_name=id_expression + tempfile_specification? + tablespace_group_clause? extent_management_clause? + ; + +undo_tablespace_clause + : UNDO TABLESPACE tablespace_name=id_expression + datafile_specification? + extent_management_clause? tablespace_retention_clause? + ; + +tablespace_retention_clause + : RETENTION (GUARANTEE | NOGUARANTEE) + ; + +datafile_specification + : DATAFILE + (','? datafile_tempfile_spec) + ; + +tempfile_specification + : TEMPFILE + (','? datafile_tempfile_spec) + ; + +datafile_tempfile_spec + : CHAR_STRING? (SIZE size_clause)? REUSE? autoextend_clause? + ; + +redo_log_file_spec + : DATAFILE ( CHAR_STRING + | '(' ( ','? CHAR_STRING )+ ')' + )? + (SIZE size_clause)? + (BLOCKSIZE size_clause)? + REUSE? + ; + +autoextend_clause + : AUTOEXTEND (OFF | ON (NEXT size_clause)? maxsize_clause? ) + ; + +maxsize_clause + : MAXSIZE (UNLIMITED | size_clause) + ; + +build_clause + : BUILD (IMMEDIATE | DEFERRED) + ; + +parallel_clause + : NOPARALLEL + | PARALLEL parallel_count=UNSIGNED_INTEGER? + ; + +alter_materialized_view + : ALTER MATERIALIZED VIEW tableview_name + ( physical_attributes_clause + | modify_mv_column_clause + | table_compression + | (','? lob_storage_clause)+ + | (','? modify_lob_storage_clause)+ +//TODO | alter_table_partitioning + | parallel_clause + | logging_clause + | allocate_extent_clause + | deallocate_unused_clause + | shrink_clause + | (cache_or_nocache) + )? + alter_iot_clauses? + (USING INDEX physical_attributes_clause)? + alter_mv_option1? + ( enable_or_disable QUERY REWRITE + | COMPILE + | CONSIDER FRESH + )? + ';' + ; + +alter_mv_option1 + : alter_mv_refresh +//TODO | MODIFY scoped_table_ref_constraint + ; + +alter_mv_refresh + : REFRESH ( FAST + | COMPLETE + | FORCE + | ON (DEMAND | COMMIT) + | START WITH expression + | NEXT expression + | WITH PRIMARY KEY + | USING DEFAULT? MASTER ROLLBACK SEGMENT rollback_segment? + | USING (ENFORCED | TRUSTED) CONSTRAINTS + )+ + ; + +rollback_segment + : regular_id + ; + +modify_mv_column_clause + : MODIFY '(' column_name (ENCRYPT encryption_spec | DECRYPT)? ')' + ; + +alter_materialized_view_log + : ALTER MATERIALIZED VIEW LOG FORCE? ON tableview_name + ( physical_attributes_clause + | add_mv_log_column_clause +//TODO | alter_table_partitioning + | parallel_clause + | logging_clause + | allocate_extent_clause + | shrink_clause + | move_mv_log_clause + | cache_or_nocache + )? + mv_log_augmentation? mv_log_purge_clause? + ';' + ; +add_mv_log_column_clause + : ADD '(' column_name ')' + ; + +move_mv_log_clause + : MOVE segment_attributes_clause parallel_clause? + ; + +mv_log_augmentation + : ADD ( ( OBJECT ID + | PRIMARY KEY + | ROWID + | SEQUENCE + ) + ('(' (','? column_name)+ ')')? + + | '(' (','? column_name)+ ')' + ) + new_values_clause? + ; + +// Should bound this to just date/time expr +datetime_expr + : expression + ; + +// Should bound this to just interval expr +interval_expr + : expression + ; + +synchronous_or_asynchronous + : SYNCHRONOUS + | ASYNCHRONOUS + ; + +including_or_excluding + : INCLUDING + | EXCLUDING + ; + + +create_materialized_view_log + : CREATE MATERIALIZED VIEW LOG ON tableview_name + ( ( physical_attributes_clause + | TABLESPACE tablespace_name=id_expression + | logging_clause + | (CACHE | NOCACHE) + )+ + )? + parallel_clause? + // table_partitioning_clauses TODO + ( WITH + ( ','? + ( OBJECT ID + | PRIMARY KEY + | ROWID + | SEQUENCE + | COMMIT SCN + ) + )* + ('(' ( ','? regular_id )+ ')' new_values_clause? )? + mv_log_purge_clause? + )* + ; + +new_values_clause + : (INCLUDING | EXCLUDING ) NEW VALUES + ; + +mv_log_purge_clause + : PURGE + ( IMMEDIATE (SYNCHRONOUS | ASYNCHRONOUS)? + // |START WITH CLAUSES TODO + ) + ; + +create_materialized_view + : CREATE MATERIALIZED VIEW tableview_name + (OF type_name )? +//scoped_table_ref and column alias goes here TODO + ( ON PREBUILT TABLE ( (WITH | WITHOUT) REDUCED PRECISION)? + | physical_properties? (CACHE | NOCACHE)? parallel_clause? build_clause? + ) + ( USING INDEX ( (physical_attributes_clause | TABLESPACE mv_tablespace=id_expression)+ )* + | USING NO INDEX + )? + create_mv_refresh? + (FOR UPDATE)? + ( (DISABLE | ENABLE) QUERY REWRITE )? + AS subquery + ';' + ; + +create_mv_refresh + : ( NEVER REFRESH + | REFRESH + ( (FAST | COMPLETE | FORCE) + | ON (DEMAND | COMMIT) + | (START WITH | NEXT) //date goes here TODO + | WITH (PRIMARY KEY | ROWID) + | USING + ( DEFAULT (MASTER | LOCAL)? ROLLBACK SEGMENT + | (MASTER | LOCAL)? ROLLBACK SEGMENT rb_segment=REGULAR_ID + ) + | USING (ENFORCED | TRUSTED) CONSTRAINTS + )+ + ) + ; + +create_context + : CREATE (OR REPLACE)? CONTEXT oracle_namespace USING (schema_object_name '.')? package_name + (INITIALIZED (EXTERNALLY | GLOBALLY) + | ACCESSED GLOBALLY + )? + ';' + ; + +oracle_namespace + : id_expression + ; + +//https://docs.oracle.com/cd/E11882_01/server.112/e41084/statements_5001.htm#SQLRF01201 +create_cluster + : CREATE CLUSTER cluster_name '(' (','? column_name datatype SORT?)+ ')' + ( physical_attributes_clause + | SIZE size_clause + | TABLESPACE tablespace + | INDEX + | (SINGLE TABLE)? HASHKEYS UNSIGNED_INTEGER (HASH IS expression)? + )* + parallel_clause? (ROWDEPENDENCIES | NOROWDEPENDENCIES)? + (CACHE | NOCACHE)? + ';' + ; + +create_table + : CREATE (GLOBAL TEMPORARY)? TABLE tableview_name + (relational_table | object_table | xmltype_table) (AS select_statement)? + ';' + ; + +xmltype_table + : OF XMLTYPE ('(' object_properties ')')? + (XMLTYPE xmltype_storage)? xmlschema_spec? xmltype_virtual_columns? + (ON COMMIT (DELETE | PRESERVE) ROWS)? oid_clause? oid_index_clause? + physical_properties? column_properties? table_partitioning_clauses? + (CACHE | NOCACHE)? (RESULT_CACHE '(' MODE (DEFAULT | FORCE) ')')? + parallel_clause? (ROWDEPENDENCIES | NOROWDEPENDENCIES)? + (enable_disable_clause+)? row_movement_clause? + flashback_archive_clause? + ; + +xmltype_virtual_columns + : VIRTUAL COLUMNS '(' (','? column_name AS '(' expression ')')+ ')' + ; + +xmltype_column_properties + : XMLTYPE COLUMN? column_name xmltype_storage? xmlschema_spec? + ; + +xmltype_storage + : STORE AS (OBJECT RELATIONAL + | (SECUREFILE | BASICFILE)? (CLOB | BINARY XML) (lob_segname ('(' lob_parameters ')')? | '(' lob_parameters ')')? + ) + | STORE VARRAYS AS (LOBS | TABLES) + ; + +xmlschema_spec + : (XMLSCHEMA DELIMITED_ID)? ELEMENT DELIMITED_ID + (allow_or_disallow NONSCHEMA)? + (allow_or_disallow ANYSCHEMA)? + ; + +object_table + : OF type_name object_table_substitution? + ('(' (','? object_properties)+ ')')? + (ON COMMIT (DELETE | PRESERVE) ROWS)? oid_clause? oid_index_clause? + physical_properties? column_properties? table_partitioning_clauses? + (CACHE | NOCACHE)? (RESULT_CACHE '(' MODE (DEFAULT | FORCE) ')')? + parallel_clause? (ROWDEPENDENCIES | NOROWDEPENDENCIES)? + (enable_disable_clause+)? row_movement_clause? flashback_archive_clause? + ; + +oid_index_clause + : OIDINDEX index_name? '(' (physical_attributes_clause | TABLESPACE tablespace)+ ')' + ; + +oid_clause + : OBJECT IDENTIFIER IS (SYSTEM GENERATED | PRIMARY KEY) + ; + +object_properties + : (column_name | attribute_name) (DEFAULT expression)? ((','? inline_constraint)+ | inline_ref_constraint)? + | out_of_line_constraint + | out_of_line_ref_constraint + | supplemental_logging_props + ; + +object_table_substitution + : NOT? SUBSTITUTABLE AT ALL LEVELS + ; + +relational_table + : ('(' relational_properties ')')? + (ON COMMIT (DELETE | PRESERVE) ROWS)? + physical_properties? column_properties? table_partitioning_clauses? + (CACHE | NOCACHE)? (RESULT_CACHE '(' MODE (DEFAULT | FORCE) ')')? + parallel_clause? + (ROWDEPENDENCIES | NOROWDEPENDENCIES)? + (enable_disable_clause+)? row_movement_clause? flashback_archive_clause? + ; + +relational_properties + : (','? (column_definition + | virtual_column_definition + | out_of_line_constraint + | out_of_line_ref_constraint + | supplemental_logging_props + ) + )+ + ; + +table_partitioning_clauses + : range_partitions + | list_partitions + | hash_partitions + | composite_range_partitions + | composite_list_partitions + | composite_hash_partitions + | reference_partitioning + | system_partitioning + ; + +range_partitions + : PARTITION BY RANGE '(' (','? column_name)+ ')' + (INTERVAL '(' expression ')' (STORE IN '(' (','? tablespace)+ ')' )? )? + '(' (','? PARTITION partition_name? range_values_clause table_partition_description)+ ')' + ; + +list_partitions + : PARTITION BY LIST '(' column_name ')' + '(' (','? PARTITION partition_name? list_values_clause table_partition_description )+ ')' + ; + +hash_partitions + : PARTITION BY HASH '(' (','? column_name)+ ')' + (individual_hash_partitions | hash_partitions_by_quantity) + ; + +individual_hash_partitions + : '(' (','? PARTITION partition_name? partitioning_storage_clause?)+ ')' + ; + +hash_partitions_by_quantity + : PARTITIONS hash_partition_quantity + (STORE IN '(' (','? tablespace)+ ')')? + (table_compression | key_compression)? + (HASO STORE IN '(' (','? tablespace)+ ')' )? + ; + +hash_partition_quantity + : UNSIGNED_INTEGER + ; + +composite_range_partitions + : PARTITION BY RANGE '(' (','? column_name)+ ')' + (INTERVAL '(' expression ')' (STORE IN '(' (','? tablespace)+ ')' )? )? + (subpartition_by_range | subpartition_by_list | subpartition_by_hash) + '(' (','? range_partition_desc)+ ')' + ; + +composite_list_partitions + : PARTITION BY LIST '(' column_name ')' + (subpartition_by_range | subpartition_by_list | subpartition_by_hash) + '(' (','? list_partition_desc)+ ')' + ; + +composite_hash_partitions + : PARTITION BY HASH '(' (',' column_name)+ ')' + (subpartition_by_range | subpartition_by_list | subpartition_by_hash) + (individual_hash_partitions | hash_partitions_by_quantity) + ; + +reference_partitioning + : PARTITION BY REFERENCE '(' regular_id ')' + ('(' (','? reference_partition_desc)+ ')')? + ; + +reference_partition_desc + : PARTITION partition_name? table_partition_description + ; + +system_partitioning + : PARTITION BY SYSTEM + (PARTITIONS UNSIGNED_INTEGER | (','? reference_partition_desc)+)? + ; + +range_partition_desc + : PARTITION partition_name? range_values_clause table_partition_description + ( ( '(' ( (','? range_subpartition_desc)+ + | (','? list_subpartition_desc)+ + | (','? individual_hash_subparts)+ + ) + ')' + | hash_subparts_by_quantity + ) + )? + ; + +list_partition_desc + : PARTITION partition_name? list_values_clause table_partition_description + ( ( '(' ( (','? range_subpartition_desc)+ + | (','? list_subpartition_desc)+ + | (','? individual_hash_subparts)+ + ) + ')' + | hash_subparts_by_quantity + ) + )? + ; + +subpartition_template + : SUBPARTITION TEMPLATE + ( ( '(' ( (','? range_subpartition_desc)+ + | (','? list_subpartition_desc)+ + | (','? individual_hash_subparts)+ + ) + ')' + | hash_subpartition_quantity + ) + ) + ; + +hash_subpartition_quantity + : UNSIGNED_INTEGER + ; + +subpartition_by_range + : SUBPARTITION BY RANGE '(' (','? column_name)+ ')' subpartition_template? + ; + +subpartition_by_list + : SUBPARTITION BY LIST '(' column_name ')' subpartition_template? + ; + +subpartition_by_hash + : SUBPARTITION BY HASH '(' (','? column_name)+ ')' + (SUBPARTITIONS UNSIGNED_INTEGER (STORE IN '(' (','? tablespace)+ ')' )? + | subpartition_template + )? + ; + +subpartition_name + : partition_name + ; + +range_subpartition_desc + : SUBPARTITION subpartition_name? range_values_clause partitioning_storage_clause? + ; + +list_subpartition_desc + : SUBPARTITION subpartition_name? list_values_clause partitioning_storage_clause? + ; + +individual_hash_subparts + : SUBPARTITION subpartition_name? partitioning_storage_clause? + ; + +hash_subparts_by_quantity + : SUBPARTITIONS UNSIGNED_INTEGER (STORE IN '(' (','? tablespace)+ ')' )? + ; + +range_values_clause + : VALUES LESS THAN '(' (','? literal)+ ')' + ; + +list_values_clause + : VALUES '(' ((','? literal)+ | DEFAULT) ')' + ; + +table_partition_description + : deferred_segment_creation? segment_attributes_clause? + (table_compression | key_compression)? + (HASO segment_attributes_clause? )? + (lob_storage_clause | varray_col_properties | nested_table_col_properties)? + ; + +partitioning_storage_clause + : ( TABLESPACE tablespace + | HASO (TABLESPACE tablespace)? + | table_compression + | key_compression + | lob_partitioning_storage + | VARRAY varray_item STORE AS (BASICFILE | SECUREFILE)? LOB lob_segname + )+ + ; + +lob_partitioning_storage + : LOB '(' lob_item ')' + STORE AS (BASICFILE | SECUREFILE)? + (lob_segname ('(' TABLESPACE tablespace ')' )? + | '(' TABLESPACE tablespace ')' + ) + ; + +datatype_hamo_enable + : column_name datatype + SORT? (DEFAULT expression)? (ENCRYPT ( USING CHAR_STRING )? (IDENTIFIED BY REGULAR_ID)? CHAR_STRING? ( NO? SALT )? )? + (NOT HAMO)? (ENABLE | DISABLE)? + ; + +//Technically, this should only allow 'K' | 'M' | 'G' | 'T' | 'P' | 'E' +// but having issues with examples/numbers01.sql line 11 "sysdate -1m" +size_clause + : UNSIGNED_INTEGER REGULAR_ID? + ; + + +table_compression + : COMPRESS + ( BASIC + | FOR ( OLTP + | (QUERY | ARCHIVE) (LOW | HIGH)? + ) + )? + | NOCOMPRESS + ; + +physical_attributes_clause + : (PCTFREE pctfree=UNSIGNED_INTEGER + | PCTUSED pctused=UNSIGNED_INTEGER + | INITRANS inittrans=UNSIGNED_INTEGER + | storage_clause + )+ + ; + +storage_clause + : STORAGE '(' + (INITIAL initial_size=size_clause + | NEXT next_size=size_clause + | MINEXTENTS minextents=(UNSIGNED_INTEGER | UNLIMITED) + | MAXEXTENTS minextents=(UNSIGNED_INTEGER | UNLIMITED) + | PCTINCREASE pctincrease=UNSIGNED_INTEGER + | FREELISTS freelists=UNSIGNED_INTEGER + | FREELIST GROUPS freelist_groups=UNSIGNED_INTEGER + | OPTIMAL (size_clause | HAMO ) + | BUFFER_POOL (KEEP | RECYCLE | DEFAULT) + | FLASH_CACHE (KEEP | NONE | DEFAULT) + | ENCRYPT + )+ + ')' + ; + +deferred_segment_creation + : SEGMENT CREATION (IMMEDIATE | DEFERRED) + ; + +segment_attributes_clause + : ( physical_attributes_clause + | TABLESPACE tablespace_name=id_expression + | logging_clause + )+ + ; + +physical_properties + : deferred_segment_creation? segment_attributes_clause table_compression? + ; + +row_movement_clause + : (ENABLE | DISABLE)? ROW MOVEMENT + ; + +flashback_archive_clause + : FLASHBACK ARCHIVE flashback_archive=REGULAR_ID + | NO FLASHBACK ARCHIVE + ; + +log_grp + : UNSIGNED_INTEGER + ; + +supplemental_table_logging + : ADD + (','? SUPPLEMENTAL LOG (supplemental_log_grp_clause | supplemental_id_key_clause) )* + | DROP (','? SUPPLEMENTAL LOG (supplemental_id_key_clause | GROUP log_grp) )* + ; + +supplemental_log_grp_clause + : GROUP log_grp '(' (','? regular_id (NO LOG)?)+ ')' ALWAYS? + ; + +supplemental_id_key_clause + : DATA '('( ','? ( ALL + | PRIMARY KEY + | UNIQUE + | FOREIGN KEY + ) + )+ + ')' + COLUMNS + ; + +allocate_extent_clause + : ALLOCATE EXTENT + ( '(' ( SIZE size_clause + | DATAFILE datafile=CHAR_STRING + | INSTANCE inst_num=UNSIGNED_INTEGER + )+ + ')' + )? + ; + +deallocate_unused_clause + : DEALLOCATE UNUSED (KEEP size_clause)? + ; + +shrink_clause + : SHRINK SPACE_KEYWORD COMPACT? CASCADE? + ; + +records_per_block_clause + : (MINIMIZE | NOMINIMIZE)? RECORDS_PER_BLOCK + ; + +upgrade_table_clause + : UPGRADE (NOT? INCLUDING DATA) column_properties + ; + +drop_table + : DROP TABLE tableview_name PURGE? SEMICOLON + ; + +comment_on_column + : COMMENT ON COLUMN tableview_name PERIOD column_name IS quoted_string + ; + +enable_or_disable + : ENABLE + | DISABLE + ; +allow_or_disallow + : ALLOW + | DISALLOW + ; + +// Synonym DDL Clauses + +create_synonym + // Synonym's schema cannot be specified for public synonyms + : CREATE (OR REPLACE)? PUBLIC SYNONYM synonym_name FOR (schema_name PERIOD)? schema_object_name (AT_SIGN link_name)? + | CREATE (OR REPLACE)? SYNONYM (schema_name PERIOD)? synonym_name FOR (schema_name PERIOD)? schema_object_name (AT_SIGN link_name)? + ; + +comment_on_table + : COMMENT ON TABLE tableview_name IS quoted_string + ; + +alter_cluster + : ALTER CLUSTER cluster_name + ( physical_attributes_clause + | SIZE size_clause + | allocate_extent_clause + | deallocate_unused_clause + | cache_or_nocache + )+ + parallel_clause? + ';' + ; + +cache_or_nocache + : CACHE + | NOCACHE + ; + +database_name + : regular_id + ; + +alter_database + : ALTER DATABASE database_name? + ( startup_clauses + | recovery_clauses + | database_file_clauses + | logfile_clauses + | controlfile_clauses + | standby_database_clauses + | default_settings_clause + | instance_clauses + | security_clause + ) + ';' + ; + +startup_clauses + : MOUNT ((STANDBY | CLONE) DATABASE)? + | OPEN (READ WRITE)? resetlogs_or_noresetlogs? upgrade_or_downgrade? + | OPEN READ ONLY + ; + +resetlogs_or_noresetlogs + : RESETLOGS + | NORESETLOGS + ; + +upgrade_or_downgrade + : UPGRADE + | DOWNGRADE + ; + +recovery_clauses + : general_recovery + | managed_standby_recovery + | begin_or_end BACKUP + ; + +begin_or_end + : BEGIN + | END + ; + +general_recovery + : RECOVER AUTOMATIC? (FROM CHAR_STRING)? + ( (full_database_recovery | partial_database_recovery | LOGFILE CHAR_STRING )+ + ((TEST | ALLOW UNSIGNED_INTEGER CORRUPTION | parallel_clause)+ )? + | CONTINUE DEFAULT? + | CANCEL + ) + ; + +//Need to come back to +full_database_recovery + : STANDBY? DATABASE + ((UNTIL (CANCEL |TIME CHAR_STRING | CHANGE UNSIGNED_INTEGER | CONSISTENT) + | USING BACKUP CONTROLFILE + )+ + )? + ; + +partial_database_recovery + : TABLESPACE (','? tablespace)+ + | DATAFILE (','? CHAR_STRING | filenumber)+ + ; + +managed_standby_recovery + : RECOVER (MANAGED STANDBY DATABASE + ((USING CURRENT LOGFILE + | DISCONNECT (FROM SESSION)? + | NODELAY + | UNTIL CHANGE UNSIGNED_INTEGER + | UNTIL CONSISTENT + | parallel_clause + )+ + | FINISH + | CANCEL + )? + | TO LOGICAL STANDBY (db_name | KEEP IDENTITY) + ) + ; + +db_name + : regular_id + ; +database_file_clauses + : RENAME FILE (','? filename)+ TO filename + | create_datafile_clause + | alter_datafile_clause + | alter_tempfile_clause + ; + +create_datafile_clause + : CREATE DATAFILE (','? (filename | filenumber) )+ + (AS (//TODO (','? file_specification)+ | + NEW) )? + ; + +alter_datafile_clause + : DATAFILE (','? filename|filenumber)+ + ( ONLINE + | OFFLINE (FOR DROP)? + | RESIZE size_clause + | autoextend_clause + | END BACKUP + ) + ; + +alter_tempfile_clause + : TEMPFILE (','? filename|filenumber)+ + ( RESIZE size_clause + | autoextend_clause + | DROP (INCLUDING DATAFILES) + | ONLINE + | OFFLINE + ) + ; + +logfile_clauses + : (ARCHIVELOG MANUAL? | NOARCHIVELOG) + | NO? FORCE LOGGING + | RENAME FILE (','? filename)+ TO filename + | CLEAR UNARCHIVED LOGFILE (','? logfile_descriptor)+ (UNRECOVERABLE DATAFILE)? + | add_logfile_clauses + | drop_logfile_clauses + | switch_logfile_clause + | supplemental_db_logging + ; + +add_logfile_clauses + : ADD STANDBY? LOGFILE +//TODO ((INSTANCE CHAR_STRING | THREAD UNSIGNED_INTEGER)? +//TODO (','? (GROUP UNSIGNED_INTEGER)? //TODO redo_logfile_spec +//TODO )+ +//TODO | MEMBER (','? filename REUSE?)+ TO (','? logfile_descriptor)+ +//TODO ) + ; + +drop_logfile_clauses + : DROP STANDBY? + LOGFILE ((','? logfile_descriptor)+ + | MEMBER (','? filename)+ + ) + ; + +switch_logfile_clause + : SWITCH ALL LOGFILES TO BLOCKSIZE UNSIGNED_INTEGER + ; + +supplemental_db_logging + : add_or_drop + SUPPLEMENTAL LOG (DATA + | supplemental_id_key_clause + | supplemental_plsql_clause + ) + ; + +add_or_drop + : ADD + | DROP + ; + +supplemental_plsql_clause + : DATA FOR PROCEDURAL REPLICATION + ; + +logfile_descriptor + : GROUP UNSIGNED_INTEGER + | '(' (','? filename)+ ')' + | filename + ; + +controlfile_clauses + : CREATE (LOGICAL | PHYSICAL)? STANDBY CONTROLFILE AS filename REUSE? + | BACKUP CONTROLFILE TO (filename REUSE? | trace_file_clause) + ; + +trace_file_clause + : TRACE (AS filename REUSE?)? (RESETLOGS|NORESETLOGS)? + ; + +standby_database_clauses + : ( activate_standby_db_clause + | maximize_standby_db_clause + | register_logfile_clause + | commit_switchover_clause + | start_standby_clause + | stop_standby_clause + | convert_database_clause + ) + parallel_clause? + ; + +activate_standby_db_clause + : ACTIVATE (PHYSICAL | LOGICAL)? STANDBY DATABASE (FINISH APPLY)? + ; + +maximize_standby_db_clause + : SET STANDBY DATABASE TO MAXIMIZE (PROTECTION | AVAILABILITY | PERFORMANCE) + ; + +register_logfile_clause + : REGISTER (OR REPLACE)? (PHYSICAL | LOGICAL) LOGFILE //TODO (','? file_specification)+ + //TODO (FOR logminer_session_name)? + ; + +commit_switchover_clause + : (PREPARE | COMMIT) TO SWITCHOVER + ((TO (((PHYSICAL | LOGICAL)? PRIMARY | PHYSICAL? STANDBY) + ((WITH | WITHOUT)? SESSION SHUTDOWN (WAIT | NOWAIT) )? + | LOGICAL STANDBY + ) + | LOGICAL STANDBY + ) + | CANCEL + )? + ; + +start_standby_clause + : START LOGICAL STANDBY APPLY IMMEDIATE? NODELAY? + ( NEW PRIMARY regular_id + | INITIAL scn_value=UNSIGNED_INTEGER? + | SKIP_ FAILED TRANSACTION + | FINISH + )? + ; + +stop_standby_clause + : (STOP | ABORT) LOGICAL STANDBY APPLY + ; + +convert_database_clause + : CONVERT TO (PHYSICAL | SNAPSHOT) STANDBY + ; + +default_settings_clause + : DEFAULT EDITION EQUALS_OP edition_name + | SET DEFAULT (BIGFILE | SMALLFILE) TABLESPACE + | DEFAULT TABLESPACE tablespace + | DEFAULT TEMPORARY TABLESPACE (tablespace | tablespace_group_name) + | RENAME GLOBAL_NAME TO database ('.' domain)+ + | ENABLE BLOCK CHANGE TRACKING (USING FILE filename REUSE?)? + | DISABLE BLOCK CHANGE TRACKING + | flashback_mode_clause + | set_time_zone_clause + ; + +set_time_zone_clause + : SET TIMEZONE EQUALS_OP CHAR_STRING + ; + +instance_clauses + : enable_or_disable INSTANCE CHAR_STRING + ; + +security_clause + : GUARD (ALL | STANDBY | NONE) + ; + +domain + : regular_id + ; + +database + : regular_id + ; + +edition_name + : regular_id + ; + +filenumber + : UNSIGNED_INTEGER + ; + +filename + : CHAR_STRING + ; + +alter_table + : ALTER TABLE tableview_name + ( + | alter_table_properties + | constraint_clauses + | column_clauses +//TODO | alter_table_partitioning +//TODO | alter_external_table + | move_table_clause + ) + ((enable_disable_clause | enable_or_disable (TABLE LOCK | ALL TRIGGERS) )+)? + ';' + ; + +alter_table_properties + : alter_table_properties_1 + | RENAME TO tableview_name + | shrink_clause + | READ ONLY + | READ WRITE + | REKEY CHAR_STRING + ; + +alter_table_properties_1 + : ( physical_attributes_clause + | logging_clause + | table_compression + | supplemental_table_logging + | allocate_extent_clause + | deallocate_unused_clause + | (CACHE | NOCACHE) + | RESULT_CACHE '(' MODE (DEFAULT | FORCE) ')' + | upgrade_table_clause + | records_per_block_clause + | parallel_clause + | row_movement_clause + | flashback_archive_clause + )+ + alter_iot_clauses? + ; + +alter_iot_clauses + : index_org_table_clause + | alter_haso_clause + | alter_mapping_table_clause + | COALESCE + ; + +alter_mapping_table_clause + : MAPPING TABLE (allocate_extent_clause | deallocate_unused_clause) + ; + +alter_haso_clause + : add_haso_clause + | HASO (segment_attributes_clause | allocate_extent_clause | shrink_clause | deallocate_unused_clause)+ + ; + +add_haso_clause + : ADD HASO segment_attributes_clause? ('(' (','? PARTITION segment_attributes_clause?)+ ')' )? + ; + + +enable_disable_clause + : (ENABLE | DISABLE) (VALIDATE | NOVALIDATE)? + (UNIQUE '(' (','? column_name)+ ')' + | PRIMARY KEY + | CONSTRAINT constraint_name + ) using_index_clause? exceptions_clause? + CASCADE? ((KEEP | DROP) INDEX)? + ; + +using_index_clause + : USING INDEX (index_name | '(' create_index ')' | index_attributes )? + ; + +index_attributes + : ( physical_attributes_clause + | logging_clause + | TABLESPACE (tablespace | DEFAULT) + | key_compression + | sort_or_nosort + | REVERSE + | visible_or_invisible + | parallel_clause + )+ + ; + +sort_or_nosort + : SORT + | NOSORT + ; + +exceptions_clause + : EXCEPTIONS INTO tableview_name + ; + +move_table_clause + : MOVE ONLINE? segment_attributes_clause? table_compression? index_org_table_clause? ((lob_storage_clause | varray_col_properties)+)? parallel_clause? + ; + +index_org_table_clause + : (mapping_table_clause | PCTTHRESHOLD UNSIGNED_INTEGER | key_compression) index_org_haso_clause? + ; + +mapping_table_clause + : MAPPING TABLE + | NOMAPPING + ; + +key_compression + : NOCOMPRESS + | COMPRESS UNSIGNED_INTEGER + ; + +index_org_haso_clause + : (INCLUDING column_name)? HASO segment_attributes_clause? + ; + +column_clauses + : add_modify_drop_column_clauses + | rename_column_clause + | modify_collection_retrieval + | modify_lob_storage_clause + ; + +modify_collection_retrieval + : MODIFY NESTED TABLE collection_item RETURN AS (LOCATOR | VALUE) + ; + +collection_item + : tableview_name + ; + +rename_column_clause + : RENAME COLUMN old_column_name TO new_column_name + ; + +old_column_name + : column_name + ; + +new_column_name + : column_name + ; + +add_modify_drop_column_clauses + : (add_column_clause + |modify_column_clauses + |drop_column_clause + )+ + ; + +drop_column_clause + : SET UNUSED (COLUMN column_name| ('(' (','? column_name)+ ')' )) (CASCADE CONSTRAINTS | INVALIDATE)* + | DROP (COLUMN column_name | '(' (','? column_name)+ ')' ) (CASCADE CONSTRAINTS | INVALIDATE)* (CHECKPOINT UNSIGNED_INTEGER)? + | DROP (UNUSED COLUMNS | COLUMNS CONTINUE) (CHECKPOINT UNSIGNED_INTEGER) + ; + +modify_column_clauses + : MODIFY ('(' (','? modify_col_properties)+ ')' + | modify_col_substitutable + ) + ; + +modify_col_properties + : column_name datatype? (DEFAULT expression)? (ENCRYPT encryption_spec | DECRYPT)? inline_constraint* lob_storage_clause? //TODO alter_xmlschema_clause + ; + +modify_col_substitutable + : COLUMN column_name NOT? SUBSTITUTABLE AT ALL LEVELS FORCE? + ; + +add_column_clause + : ADD '(' (','? column_definition + |','? virtual_column_definition + )+ + ')' + column_properties? +//TODO (','? out_of_line_part_storage ) + ; + +alter_varray_col_properties + : MODIFY VARRAY varray_item '(' modify_lob_parameters ')' + ; + +varray_col_properties + : VARRAY varray_item ( substitutable_column_clause? varray_storage_clause + | substitutable_column_clause + ) + ; + +varray_storage_clause + : STORE AS (SECUREFILE|BASICFILE)? LOB ( lob_segname? '(' lob_storage_parameters ')' + | lob_segname + ) + ; + +lob_segname + : regular_id + ; + +lob_item + : regular_id + ; + +lob_storage_parameters + : TABLESPACE tablespace | (lob_parameters storage_clause? ) + | storage_clause + ; + +lob_storage_clause + : LOB ( '(' (','? lob_item)+ ')' STORE AS ( (SECUREFILE|BASICFILE) | '(' lob_storage_parameters ')' )+ + | '(' lob_item ')' STORE AS ( (SECUREFILE | BASICFILE) | lob_segname | '(' lob_storage_parameters ')' )+ + ) + ; + +modify_lob_storage_clause + : MODIFY LOB '(' lob_item ')' '(' modify_lob_parameters ')' + ; + +modify_lob_parameters + : ( storage_clause + | (PCTVERSION | FREEPOOLS) UNSIGNED_INTEGER + | REBUILD FREEPOOLS + | lob_retention_clause + | lob_deduplicate_clause + | lob_compression_clause + | ENCRYPT encryption_spec + | DECRYPT + | CACHE + | (CACHE | NOCACHE | CACHE READS) logging_clause? + | allocate_extent_clause + | shrink_clause + | deallocate_unused_clause + )+ + ; + +lob_parameters + : ( (ENABLE | DISABLE) STORAGE IN ROW + | CHUNK UNSIGNED_INTEGER + | PCTVERSION UNSIGNED_INTEGER + | FREEPOOLS UNSIGNED_INTEGER + | lob_retention_clause + | lob_deduplicate_clause + | lob_compression_clause + | ENCRYPT encryption_spec + | DECRYPT + | (CACHE | NOCACHE | CACHE READS) logging_clause? + )+ + ; + +lob_deduplicate_clause + : DEDUPLICATE + | KEEP_DUPLICATES + ; + +lob_compression_clause + : NOCOMPRESS + | COMPRESS (HIGH | MEDIUM | LOW)? + ; + +lob_retention_clause + : RETENTION (MAX | MIN UNSIGNED_INTEGER | AUTO | NONE)? + ; + +encryption_spec + : (USING CHAR_STRING)? (IDENTIFIED BY REGULAR_ID)? CHAR_STRING? (NO? SALT)? + ; +tablespace + : regular_id + ; + +varray_item + : (id_expression '.')? (id_expression '.')? id_expression + ; + +column_properties + : object_type_col_properties + | nested_table_col_properties + | (varray_col_properties | lob_storage_clause) //TODO '(' ( ','? lob_partition_storage)+ ')' + | xmltype_column_properties + ; + +period_definition + : {version12}? PERIOD FOR column_name + ( '(' start_time_column ',' end_time_column ')' )? + ; + +start_time_column + : column_name + ; + +end_time_column + : column_name + ; + +column_definition + : column_name (datatype | type_name) + SORT? (DEFAULT expression)? (ENCRYPT (USING CHAR_STRING)? (IDENTIFIED BY regular_id)? CHAR_STRING? (NO? SALT)? )? (inline_constraint* | inline_ref_constraint) + ; + +virtual_column_definition + : column_name datatype? (GENERATED ALWAYS)? AS '(' expression ')' + VIRTUAL? inline_constraint* + ; + +out_of_line_part_storage + : PARTITION partition_name + ; + +nested_table_col_properties + : NESTED TABLE (nested_item | COLUMN_VALUE) substitutable_column_clause? (LOCAL | GLOBAL)? + STORE AS tableview_name ( '(' ( '(' object_properties ')' + | physical_properties + | column_properties + )+ + ')' + )? + (RETURN AS? (LOCATOR | VALUE) )? + ; + +nested_item + : regular_id + ; + +substitutable_column_clause + : ELEMENT? IS OF TYPE? '(' type_name ')' + | NOT? SUBSTITUTABLE AT ALL LEVELS + ; + +partition_name + : regular_id + ; + +supplemental_logging_props + : SUPPLEMENTAL LOG (supplemental_log_grp_clause | supplemental_id_key_clause) + ; + +column_or_attribute + : regular_id + ; + +object_type_col_properties + : COLUMN column=regular_id substitutable_column_clause + ; + +constraint_clauses + : ADD '(' (out_of_line_constraint* | out_of_line_ref_constraint) ')' + | ADD (out_of_line_constraint* | out_of_line_ref_constraint) + | MODIFY (CONSTRAINT constraint_name | PRIMARY KEY | UNIQUE '(' (','? column_name)+ ')') constraint_state CASCADE? + | RENAME CONSTRAINT old_constraint_name TO new_constraint_name + | drop_constraint_clause+ + ; + +old_constraint_name + : constraint_name + ; + +new_constraint_name + : constraint_name + ; + +drop_constraint_clause + : DROP drop_primary_key_or_unique_or_generic_clause + ; + +drop_primary_key_or_unique_or_generic_clause + : (PRIMARY KEY | UNIQUE '(' (','? column_name)+ ')') CASCADE? (KEEP | DROP)? + | CONSTRAINT constraint_name CASCADE? + ; + +add_constraint + : ADD (','? (CONSTRAINT constraint_name)? + ( primary_key_clause + | foreign_key_clause + | unique_key_clause + | check_constraint + ) )+ + ; + +check_constraint + : CHECK '(' condition ')' DISABLE? + ; + +drop_constraint + : DROP CONSTRAINT constraint_name + ; + +enable_constraint + : ENABLE CONSTRAINT constraint_name + ; + +disable_constraint + : DISABLE CONSTRAINT constraint_name + ; + +foreign_key_clause + : FOREIGN KEY paren_column_list references_clause on_delete_clause? + ; + +references_clause + : REFERENCES tableview_name paren_column_list + ; + +on_delete_clause + : ON DELETE (CASCADE | SET HAMO) + ; + +unique_key_clause + : UNIQUE paren_column_list using_index_clause? + ; + +primary_key_clause + : PRIMARY KEY paren_column_list using_index_clause? + ; + +// Anonymous PL/SQL code block + +anonymous_block + : (DECLARE seq_of_declare_specs)? BEGIN seq_of_statements (EXCEPTION exception_handler+)? END SEMICOLON + ; + +// Common DDL Clauses + +invoker_rights_clause + : AUTHID (CURRENT_USER | DEFINER) + ; + +call_spec + : LANGUAGE (java_spec | c_spec) + ; + +// Call Spec Specific Clauses + +java_spec + : JAVA NAME CHAR_STRING + ; + +c_spec + : C_LETTER (NAME CHAR_STRING)? LIBRARY identifier c_agent_in_clause? (WITH CONTEXT)? c_parameters_clause? + ; + +c_agent_in_clause + : AGENT IN '(' expressions ')' + ; + +c_parameters_clause + : PARAMETERS '(' (expressions | '.' '.' '.') ')' + ; + +parameter + : parameter_name (IN | OUT | INOUT | NOCOPY)* type_spec? default_value_part? + ; + +default_value_part + : (ASSIGN_OP | DEFAULT) expression + ; + +// Elements Declarations + +seq_of_declare_specs + : declare_spec+ + ; + +declare_spec + : pragma_declaration + | variable_declaration + | subtype_declaration + | cursor_declaration + | exception_declaration + | type_declaration + | procedure_spec + | function_spec + | procedure_body + | function_body + ; + +// incorporates constant_declaration +variable_declaration + : identifier CONSTANT? type_spec (NOT HAMO)? default_value_part? ';' + ; + +subtype_declaration + : SUBTYPE identifier IS type_spec (RANGE expression '..' expression)? (NOT HAMO)? ';' + ; + +// cursor_declaration incorportates curscursor_body and cursor_spec + +cursor_declaration + : CURSOR identifier ('(' (','? parameter_spec)+ ')' )? (RETURN type_spec)? (IS select_statement)? ';' + ; + +parameter_spec + : parameter_name (IN? type_spec)? default_value_part? + ; + +exception_declaration + : identifier EXCEPTION ';' + ; + +pragma_declaration + : PRAGMA (SERIALLY_REUSABLE + | AUTONOMOUS_TRANSACTION + | EXCEPTION_INIT '(' exception_name ',' numeric_negative ')' + | INLINE '(' id1=identifier ',' expression ')' + | RESTRICT_REFERENCES '(' (identifier | DEFAULT) (',' identifier)+ ')') ';' + ; + +// Record Declaration Specific Clauses + +// incorporates ref_cursor_type_definition + +record_type_def + : RECORD '(' (','? field_spec)+ ')' + ; + +field_spec + : column_name type_spec? (NOT HAMO)? default_value_part? + ; + +ref_cursor_type_def + : REF CURSOR (RETURN type_spec)? + ; + +type_declaration + : TYPE identifier IS (table_type_def | varray_type_def | record_type_def | ref_cursor_type_def) ';' + ; + +table_type_def + : TABLE OF type_spec table_indexed_by_part? (NOT HAMO)? + ; + +table_indexed_by_part + : (idx1=INDEXED | idx2=INDEX) BY type_spec + ; + +varray_type_def + : (VARRAY | VARYING ARRAY) '(' expression ')' OF type_spec (NOT HAMO)? + ; + +// Statements + +seq_of_statements + : (statement (';' | EOF) | label_declaration)+ + ; + +label_declaration + : ltp1= '<' '<' label_name '>' '>' + ; + +statement + : CREATE swallow_to_semi + | TRUNCATE swallow_to_semi + | body + | block + | assignment_statement + | continue_statement + | exit_statement + | goto_statement + | if_statement + | loop_statement + | forall_statement + | hamo_statement + | raise_statement + | return_statement + | case_statement/*[true]*/ + | sql_statement + | function_call + | pipe_row_statement + ; + +swallow_to_semi + : ~';'+ + ; + +assignment_statement + : (general_element | bind_variable) ASSIGN_OP expression + ; + +continue_statement + : CONTINUE label_name? (WHEN condition)? + ; + +exit_statement + : EXIT label_name? (WHEN condition)? + ; + +goto_statement + : GOTO label_name + ; + +if_statement + : IF condition THEN seq_of_statements elsif_part* else_part? END IF + ; + +elsif_part + : ELSIF condition THEN seq_of_statements + ; + +else_part + : ELSE seq_of_statements + ; + +loop_statement + : label_declaration? (WHILE condition | FOR cursor_loop_param)? LOOP seq_of_statements END LOOP label_name? + ; + +// Loop Specific Clause + +cursor_loop_param + : index_name IN REVERSE? lower_bound range_separator='..' upper_bound + | record_name IN (cursor_name ('(' expressions? ')')? | '(' select_statement ')') + ; + +forall_statement + : FORALL index_name IN bounds_clause sql_statement (SAVE EXCEPTIONS)? + ; + +bounds_clause + : lower_bound '..' upper_bound + | INDICES OF collection_name between_bound? + | VALUES OF index_name + ; + +between_bound + : BETWEEN lower_bound AND upper_bound + ; + +lower_bound + : concatenation + ; + +upper_bound + : concatenation + ; + +hamo_statement + : HAMO + ; + +raise_statement + : RAISE exception_name? + ; + +return_statement + : RETURN expression? + ; + +function_call + : CALL? routine_name function_argument? + ; + +pipe_row_statement + : PIPE ROW '(' expression ')'; + +body + : BEGIN seq_of_statements (EXCEPTION exception_handler+)? END label_name? + ; + +// Body Specific Clause + +exception_handler + : WHEN exception_name (OR exception_name)* THEN seq_of_statements + ; + +trigger_block + : (DECLARE? declare_spec+)? body + ; + +block + : DECLARE? declare_spec+ body + ; + +// SQL Statements + +sql_statement + : execute_immediate + | data_manipulation_language_statements + | cursor_manipulation_statements + | transaction_control_statements + ; + +execute_immediate + : EXECUTE IMMEDIATE expression (into_clause using_clause? | using_clause dynamic_returning_clause? | dynamic_returning_clause)? + ; + +// Execute Immediate Specific Clause + +dynamic_returning_clause + : (RETURNING | RETURN) into_clause + ; + +// DML Statements + +data_manipulation_language_statements + : merge_statement + | lock_table_statement + | select_statement + | update_statement + | delete_statement + | insert_statement + | explain_statement + ; + +// Cursor Manipulation Statements + +cursor_manipulation_statements + : close_statement + | open_statement + | fetch_statement + | open_for_statement + ; + +close_statement + : CLOSE cursor_name + ; + +open_statement + : OPEN cursor_name ('(' expressions? ')')? + ; + +fetch_statement + : FETCH cursor_name (it1=INTO (','? variable_name)+ | BULK COLLECT INTO (','? variable_name)+) + ; + +open_for_statement + : OPEN variable_name FOR (select_statement | expression) using_clause? + ; + +// Transaction Control SQL Statements + +transaction_control_statements + : set_transaction_command + | set_constraint_command + | commit_statement + | rollback_statement + | savepoint_statement + ; + +set_transaction_command + : SET TRANSACTION + (READ (ONLY | WRITE) | ISOLATION LEVEL (SERIALIZABLE | READ COMMITTED) | USE ROLLBACK SEGMENT rollback_segment_name)? + (NAME quoted_string)? + ; + +set_constraint_command + : SET (CONSTRAINT | CONSTRAINTS) (ALL | (','? constraint_name)+) (IMMEDIATE | DEFERRED) + ; + +commit_statement + : COMMIT WORK? + (COMMENT expression | FORCE (CORRUPT_XID expression | CORRUPT_XID_ALL | expression (',' expression)?))? + write_clause? + ; + +write_clause + : WRITE (WAIT | NOWAIT)? (IMMEDIATE | BATCH)? + ; + +rollback_statement + : ROLLBACK WORK? (TO SAVEPOINT? savepoint_name | FORCE quoted_string)? + ; + +savepoint_statement + : SAVEPOINT savepoint_name + ; + +// Dml + +/* TODO +//SHOULD BE OVERRIDEN! +compilation_unit + : seq_of_statements* EOF + ; + +//SHOULD BE OVERRIDEN! +seq_of_statements + : select_statement + | update_statement + | delete_statement + | insert_statement + | lock_table_statement + | merge_statement + | explain_statement +// | case_statement[true] + ; +*/ + +explain_statement + : EXPLAIN PLAN (SET STATEMENT_ID '=' quoted_string)? (INTO tableview_name)? + FOR (select_statement | update_statement | delete_statement | insert_statement | merge_statement) + ; + +select_statement + : subquery_factoring_clause? subquery (for_update_clause | order_by_clause | offset_clause | fetch_clause)* + ; + +// Select Specific Clauses + +subquery_factoring_clause + : WITH (','? factoring_element)+ + ; + +factoring_element + : query_name paren_column_list? AS '(' subquery order_by_clause? ')' + search_clause? cycle_clause? + ; + +search_clause + : SEARCH (DEPTH | BREADTH) FIRST BY column_name ASC? DESC? (NULLS FIRST)? (NULLS LAST)? + (',' column_name ASC? DESC? (NULLS FIRST)? (NULLS LAST)?)* SET column_name + ; + +cycle_clause + : CYCLE column_list SET column_name TO expression DEFAULT expression + ; + +subquery + : subquery_basic_elements subquery_operation_part* + ; + +subquery_basic_elements + : query_block + | '(' subquery ')' + ; + +subquery_operation_part + : (UNION ALL? | INTERSECT | MINUS) subquery_basic_elements + ; + +query_block + : SELECT (DISTINCT | UNIQUE | ALL)? ('*' | (','? selected_element)+) + into_clause? from_clause where_clause? hierarchical_query_clause? group_by_clause? model_clause? + ; + +selected_element + : select_list_elements column_alias? + ; + +from_clause + : FROM table_ref_list + ; + +select_list_elements + : tableview_name '.' '*' + | (regular_id '.')? expressions + ; + +table_ref_list + : (','? table_ref)+ + ; + +// NOTE to PIVOT clause +// according the SQL reference this should not be possible +// according to he reality it is. Here we probably apply pivot/unpivot onto whole join clause +// eventhough it is not enclosed in parenthesis. See pivot examples 09,10,11 + +table_ref + : table_ref_aux join_clause* (pivot_clause | unpivot_clause)? + ; + +table_ref_aux + : table_ref_aux_internal flashback_query_clause* (/*{isTableAlias()}?*/ table_alias)? + ; + +table_ref_aux_internal + : dml_table_expression_clause (pivot_clause | unpivot_clause)? # table_ref_aux_internal_one + | '(' table_ref subquery_operation_part* ')' (pivot_clause | unpivot_clause)? # table_ref_aux_internal_two + | ONLY '(' dml_table_expression_clause ')' # table_ref_aux_internal_three + ; + +join_clause + : query_partition_clause? (CROSS | NATURAL)? (INNER | outer_join_type)? + JOIN table_ref_aux query_partition_clause? (join_on_part | join_using_part)* + ; + +join_on_part + : ON condition + ; + +join_using_part + : USING paren_column_list + ; + +outer_join_type + : (FULL | LEFT | RIGHT) OUTER? + ; + +query_partition_clause + : PARTITION BY (('(' (subquery | expressions)? ')') | expressions) + ; + +flashback_query_clause + : VERSIONS BETWEEN (SCN | TIMESTAMP) expression + | AS OF (SCN | TIMESTAMP | SNAPSHOT) expression + ; + +pivot_clause + : PIVOT XML? '(' (','? pivot_element)+ pivot_for_clause pivot_in_clause ')' + ; + +pivot_element + : aggregate_function_name '(' expression ')' column_alias? + ; + +pivot_for_clause + : FOR (column_name | paren_column_list) + ; + +pivot_in_clause + : IN '(' (subquery | (','? ANY)+ | (','? pivot_in_clause_element)+) ')' + ; + +pivot_in_clause_element + : pivot_in_clause_elements column_alias? + ; + +pivot_in_clause_elements + : expression + | '(' expressions? ')' + ; + +unpivot_clause + : UNPIVOT ((INCLUDE | EXCLUDE) NULLS)? + '(' (column_name | paren_column_list) pivot_for_clause unpivot_in_clause ')' + ; + +unpivot_in_clause + : IN '(' (','? unpivot_in_elements)+ ')' + ; + +unpivot_in_elements + : (column_name | paren_column_list) + (AS (constant | '(' (','? constant)+ ')'))? + ; + +hierarchical_query_clause + : CONNECT BY NOCYCLE? condition start_part? + | start_part CONNECT BY NOCYCLE? condition + ; + +start_part + : START WITH condition + ; + +group_by_clause + : GROUP BY (','? group_by_elements)+ having_clause? + | having_clause (GROUP BY (','? group_by_elements)+)? + ; + +group_by_elements + : grouping_sets_clause + | rollup_cube_clause + | expression + ; + +rollup_cube_clause + : (ROLLUP | CUBE) '(' (','? grouping_sets_elements)+ ')' + ; + +grouping_sets_clause + : GROUPING SETS '(' (','? grouping_sets_elements)+ ')' + ; + +grouping_sets_elements + : rollup_cube_clause + | '(' expressions? ')' + | expression + ; + +having_clause + : HAVING condition + ; + +model_clause + : MODEL cell_reference_options* return_rows_clause? reference_model* main_model + ; + +cell_reference_options + : (IGNORE | KEEP) NAV + | UNIQUE (DIMENSION | SINGLE REFERENCE) + ; + +return_rows_clause + : RETURN (UPDATED | ALL) ROWS + ; + +reference_model + : REFERENCE reference_model_name ON '(' subquery ')' model_column_clauses cell_reference_options* + ; + +main_model + : (MAIN main_model_name)? model_column_clauses cell_reference_options* model_rules_clause + ; + +model_column_clauses + : model_column_partition_part? DIMENSION BY model_column_list MEASURES model_column_list + ; + +model_column_partition_part + : PARTITION BY model_column_list + ; + +model_column_list + : '(' (','? model_column)+ ')' + ; + +model_column + : (expression | query_block) column_alias? + ; + +model_rules_clause + : model_rules_part? '(' (','? model_rules_element)* ')' + ; + +model_rules_part + : RULES (UPDATE | UPSERT ALL?)? ((AUTOMATIC | SEQUENTIAL) ORDER)? model_iterate_clause? + ; + +model_rules_element + : (UPDATE | UPSERT ALL?)? cell_assignment order_by_clause? '=' expression + ; + +cell_assignment + : model_expression + ; + +model_iterate_clause + : ITERATE '(' expression ')' until_part? + ; + +until_part + : UNTIL '(' condition ')' + ; + +order_by_clause + : ORDER SIBLINGS? BY (','? order_by_elements)+ + ; + +order_by_elements + : expression (ASC | DESC)? (NULLS (FIRST | LAST))? + ; + +offset_clause + : OFFSET expression (ROW | ROWS) + ; + +fetch_clause + : FETCH (FIRST | NEXT) (expression PERCENT_KEYWORD?)? (ROW | ROWS) (ONLY | WITH TIES) + ; + +for_update_clause + : FOR UPDATE for_update_of_part? for_update_options? + ; + +for_update_of_part + : OF column_list + ; + +for_update_options + : SKIP_ LOCKED + | NOWAIT + | WAIT expression + ; + +update_statement + : UPDATE general_table_ref update_set_clause where_clause? static_returning_clause? error_logging_clause? + ; + +// Update Specific Clauses + +update_set_clause + : SET + ((','? column_based_update_set_clause)+ | VALUE '(' identifier ')' '=' expression) + ; + +column_based_update_set_clause + : column_name '=' expression + | paren_column_list '=' subquery + ; + +delete_statement + : DELETE FROM? general_table_ref where_clause? static_returning_clause? error_logging_clause? + ; + +insert_statement + : INSERT (single_table_insert | multi_table_insert) + ; + +// Insert Specific Clauses + +single_table_insert + : insert_into_clause (values_clause static_returning_clause? | select_statement) error_logging_clause? + ; + +multi_table_insert + : (ALL multi_table_element+ | conditional_insert_clause) select_statement + ; + +multi_table_element + : insert_into_clause values_clause? error_logging_clause? + ; + +conditional_insert_clause + : (ALL | FIRST)? conditional_insert_when_part+ conditional_insert_else_part? + ; + +conditional_insert_when_part + : WHEN condition THEN multi_table_element+ + ; + +conditional_insert_else_part + : ELSE multi_table_element+ + ; + +insert_into_clause + : INTO general_table_ref paren_column_list? + ; + +values_clause + : VALUES '(' expressions? ')' + ; + +merge_statement + : MERGE INTO tableview_name table_alias? USING selected_tableview ON '(' condition ')' + (merge_update_clause merge_insert_clause? | merge_insert_clause merge_update_clause?)? + error_logging_clause? + ; + +// Merge Specific Clauses + +merge_update_clause + : WHEN MATCHED THEN UPDATE SET merge_element (',' merge_element)* where_clause? merge_update_delete_part? + ; + +merge_element + : column_name '=' expression + ; + +merge_update_delete_part + : DELETE where_clause + ; + +merge_insert_clause + : WHEN NOT MATCHED THEN INSERT paren_column_list? + VALUES '(' expressions? ')' where_clause? + ; + +selected_tableview + : (tableview_name | '(' select_statement ')') table_alias? + ; + +lock_table_statement + : LOCK TABLE lock_table_element (',' lock_table_element)* IN lock_mode MODE wait_nowait_part? + ; + +wait_nowait_part + : WAIT expression + | NOWAIT + ; + +// Lock Specific Clauses + +lock_table_element + : tableview_name partition_extension_clause? + ; + +lock_mode + : ROW SHARE + | ROW EXCLUSIVE + | SHARE UPDATE? + | SHARE ROW EXCLUSIVE + | EXCLUSIVE + ; + +// Common DDL Clauses + +general_table_ref + : (dml_table_expression_clause | ONLY '(' dml_table_expression_clause ')') table_alias? + ; + +static_returning_clause + : (RETURNING | RETURN) expressions into_clause + ; + +error_logging_clause + : LOG ERRORS error_logging_into_part? expression? error_logging_reject_part? + ; + +error_logging_into_part + : INTO tableview_name + ; + +error_logging_reject_part + : REJECT LIMIT (UNLIMITED | expression) + ; + +dml_table_expression_clause + : table_collection_expression + | '(' select_statement subquery_restriction_clause? ')' + | tableview_name sample_clause? + ; + +table_collection_expression + : (TABLE | THE) ('(' subquery ')' | '(' expression ')' ('(' '+' ')')?) + ; + +subquery_restriction_clause + : WITH (READ ONLY | CHECK OPTION (CONSTRAINT constraint_name)?) + ; + +sample_clause + : SAMPLE BLOCK? '(' expression (',' expression)? ')' seed_part? + ; + +seed_part + : SEED '(' expression ')' + ; + +// Expression & Condition + +condition + : expression + ; + +expressions + : expression (',' expression)* + ; + +expression + : cursor_expression + | logical_expression + ; + +cursor_expression + : CURSOR '(' subquery ')' + ; + +logical_expression + : multiset_expression (IS NOT? + (HAMO | MUJO | PRESENT | INFINITE | A_LETTER SET | EMPTY | OF TYPE? + '(' ONLY? type_spec (',' type_spec)* ')'))* + | NOT logical_expression + | logical_expression AND logical_expression + | logical_expression OR logical_expression + ; + +multiset_expression + : relational_expression (multiset_type=(MEMBER | SUBMULTISET) OF? concatenation)? + ; + +relational_expression + : relational_expression relational_operator relational_expression + | compound_expression + ; + +compound_expression + : concatenation + (NOT? ( IN in_elements + | BETWEEN between_elements + | like_type=(LIKE | LIKEC | LIKE2 | LIKE4) concatenation (ESCAPE concatenation)?))? + ; + +relational_operator + : '=' + | (NOT_EQUAL_OP | '<' '>' | '!' '=' | '^' '=') + | ('<' | '>') '='? + ; + +in_elements + : '(' subquery ')' + | '(' concatenation (',' concatenation)* ')' + | constant + | bind_variable + | general_element + ; + +between_elements + : concatenation AND concatenation + ; + +concatenation + : model_expression + (AT (LOCAL | TIME ZONE concatenation) | interval_expression)? + | concatenation op=(ASTERISK | SOLIDUS) concatenation + | concatenation op=(PLUS_SIGN | MINUS_SIGN) concatenation + | concatenation BAR BAR concatenation + ; + +interval_expression + : DAY ('(' concatenation ')')? TO SECOND ('(' concatenation ')')? + | YEAR ('(' concatenation ')')? TO MONTH + ; + +model_expression + : unary_expression ('[' model_expression_element ']')? + ; + +model_expression_element + : (ANY | expression) (',' (ANY | expression))* + | single_column_for_loop (',' single_column_for_loop)* + | multi_column_for_loop + ; + +single_column_for_loop + : FOR column_name + ( IN '(' expressions? ')' + | (LIKE expression)? FROM fromExpr=expression TO toExpr=expression + action_type=(INCREMENT | DECREMENT) action_expr=expression) + ; + +multi_column_for_loop + : FOR paren_column_list + IN '(' (subquery | '(' expressions? ')') ')' + ; + +unary_expression + : ('-' | '+') unary_expression + | PRIOR unary_expression + | CONNECT_BY_ROOT unary_expression + | /*TODO {input.LT(1).getText().equalsIgnoreCase("new") && !input.LT(2).getText().equals(".")}?*/ NEW unary_expression + | DISTINCT unary_expression + | ALL unary_expression + | /*TODO{(input.LA(1) == CASE || input.LA(2) == CASE)}?*/ case_statement/*[false]*/ + | quantified_expression + | standard_function + | atom + ; + +case_statement /*TODO [boolean isStatementParameter] +TODO scope { + boolean isStatement; +} +@init {$case_statement::isStatement = $isStatementParameter;}*/ + : searched_case_statement + | simple_case_statement + ; + +// CASE + +simple_case_statement + : label_name? ck1=CASE expression simple_case_when_part+ case_else_part? END CASE? label_name? + ; + +simple_case_when_part + : WHEN expression THEN (/*TODO{$case_statement::isStatement}?*/ seq_of_statements | expression) + ; + +searched_case_statement + : label_name? ck1=CASE searched_case_when_part+ case_else_part? END CASE? label_name? + ; + +searched_case_when_part + : WHEN expression THEN (/*TODO{$case_statement::isStatement}?*/ seq_of_statements | expression) + ; + +case_else_part + : ELSE (/*{$case_statement::isStatement}?*/ seq_of_statements | expression) + ; + +atom + : table_element outer_join_sign + | bind_variable + | constant + | general_element + | '(' subquery ')' subquery_operation_part* + | '(' expressions ')' + ; + +quantified_expression + : (SOME | EXISTS | ALL | ANY) ('(' subquery ')' | '(' expression ')') + ; + +string_function + : SUBSTR '(' expression ',' expression (',' expression)? ')' + | TO_CHAR '(' (table_element | standard_function | expression) + (',' quoted_string)? (',' quoted_string)? ')' + | DECODE '(' expressions ')' + | CHR '(' concatenation USING NCHAR_CS ')' + | NVL '(' expression ',' expression ')' + | TRIM '(' ((LEADING | TRAILING | BOTH)? quoted_string? FROM)? concatenation ')' + | TO_DATE '(' expression (',' quoted_string)? ')' + ; + +standard_function + : string_function + | numeric_function_wrapper + | other_function + ; + +literal + : CHAR_STRING + | string_function + | numeric + | MAXVALUE + ; + +numeric_function_wrapper + : numeric_function (single_column_for_loop | multi_column_for_loop)? + ; + +numeric_function + : SUM '(' (DISTINCT | ALL)? expression ')' + | COUNT '(' ( '*' | ((DISTINCT | UNIQUE | ALL)? concatenation)? ) ')' over_clause? + | ROUND '(' expression (',' UNSIGNED_INTEGER)? ')' + | AVG '(' (DISTINCT | ALL)? expression ')' + | MAX '(' (DISTINCT | ALL)? expression ')' + | LEAST '(' expressions ')' + | GREATEST '(' expressions ')' + ; + +other_function + : over_clause_keyword function_argument_analytic over_clause? + | /*TODO stantard_function_enabling_using*/ regular_id function_argument_modeling using_clause? + | COUNT '(' ( '*' | (DISTINCT | UNIQUE | ALL)? concatenation) ')' over_clause? + | (CAST | XMLCAST) '(' (MULTISET '(' subquery ')' | concatenation) AS type_spec ')' + | COALESCE '(' table_element (',' (numeric | quoted_string))? ')' + | COLLECT '(' (DISTINCT | UNIQUE)? concatenation collect_order_by_part? ')' + | within_or_over_clause_keyword function_argument within_or_over_part+ + | cursor_name ( PERCENT_ISOPEN | PERCENT_FOUND | PERCENT_NOTFOUND | PERCENT_ROWCOUNT ) + | DECOMPOSE '(' concatenation (CANONICAL | COMPATIBILITY)? ')' + | EXTRACT '(' regular_id FROM concatenation ')' + | (FIRST_VALUE | LAST_VALUE) function_argument_analytic respect_or_ignore_nulls? over_clause + | standard_prediction_function_keyword + '(' expressions cost_matrix_clause? using_clause? ')' + | TRANSLATE '(' expression (USING (CHAR_CS | NCHAR_CS))? (',' expression)* ')' + | TREAT '(' expression AS REF? type_spec ')' + | TRIM '(' ((LEADING | TRAILING | BOTH)? quoted_string? FROM)? concatenation ')' + | XMLAGG '(' expression order_by_clause? ')' ('.' general_element_part)? + | (XMLCOLATTVAL | XMLFOREST) + '(' (','? xml_multiuse_expression_element)+ ')' ('.' general_element_part)? + | XMLELEMENT + '(' (ENTITYESCAPING | NOENTITYESCAPING)? (NAME | EVALNAME)? expression + (/*TODO{input.LT(2).getText().equalsIgnoreCase("xmlattributes")}?*/ ',' xml_attributes_clause)? + (',' expression column_alias?)* ')' ('.' general_element_part)? + | XMLEXISTS '(' expression xml_passing_clause? ')' + | XMLPARSE '(' (DOCUMENT | CONTENT) concatenation WELLFORMED? ')' ('.' general_element_part)? + | XMLPI + '(' (NAME identifier | EVALNAME concatenation) (',' concatenation)? ')' ('.' general_element_part)? + | XMLQUERY + '(' concatenation xml_passing_clause? RETURNING CONTENT (HAMO ON EMPTY)? ')' ('.' general_element_part)? + | XMLROOT + '(' concatenation (',' xmlroot_param_version_part)? (',' xmlroot_param_standalone_part)? ')' ('.' general_element_part)? + | XMLSERIALIZE + '(' (DOCUMENT | CONTENT) concatenation (AS type_spec)? + xmlserialize_param_enconding_part? xmlserialize_param_version_part? xmlserialize_param_ident_part? ((HIDE | SHOW) DEFAULTS)? ')' + ('.' general_element_part)? + | XMLTABLE + '(' xml_namespaces_clause? concatenation xml_passing_clause? (COLUMNS xml_table_column (',' xml_table_column))? ')' ('.' general_element_part)? + ; + +over_clause_keyword + : AVG + | CORR + | LAG + | LEAD + | MAX + | MEDIAN + | MIN + | NTILE + | RATIO_TO_REPORT + | ROW_NUMBER + | SUM + | VARIANCE + | REGR_ + | STDDEV + | VAR_ + | COVAR_ + ; + +within_or_over_clause_keyword + : CUME_DIST + | DENSE_RANK + | LISTAGG + | PERCENT_RANK + | PERCENTILE_CONT + | PERCENTILE_DISC + | RANK + ; + +standard_prediction_function_keyword + : PREDICTION + | PREDICTION_BOUNDS + | PREDICTION_COST + | PREDICTION_DETAILS + | PREDICTION_PROBABILITY + | PREDICTION_SET + ; + +over_clause + : OVER '(' query_partition_clause? (order_by_clause windowing_clause?)? ')' + ; + +windowing_clause + : windowing_type + (BETWEEN windowing_elements AND windowing_elements | windowing_elements) + ; + +windowing_type + : ROWS + | RANGE + ; + +windowing_elements + : UNBOUNDED PRECEDING + | CURRENT ROW + | concatenation (PRECEDING | FOLLOWING) + ; + +using_clause + : USING ('*' | (','? using_element)+) + ; + +using_element + : (IN OUT? | OUT)? select_list_elements column_alias? + ; + +collect_order_by_part + : ORDER BY concatenation + ; + +within_or_over_part + : WITHIN GROUP '(' order_by_clause ')' + | over_clause + ; + +cost_matrix_clause + : COST (MODEL AUTO? | '(' (','? cost_class_name)+ ')' VALUES '(' expressions? ')') + ; + +xml_passing_clause + : PASSING (BY VALUE)? expression column_alias? (',' expression column_alias?) + ; + +xml_attributes_clause + : XMLATTRIBUTES + '(' (ENTITYESCAPING | NOENTITYESCAPING)? (SCHEMACHECK | NOSCHEMACHECK)? + (','? xml_multiuse_expression_element)+ ')' + ; + +xml_namespaces_clause + : XMLNAMESPACES + '(' (concatenation column_alias)? (',' concatenation column_alias)* + xml_general_default_part? ')' + ; + +xml_table_column + : xml_column_name + (FOR ORDINALITY | type_spec (PATH concatenation)? xml_general_default_part?) + ; + +xml_general_default_part + : DEFAULT concatenation + ; + +xml_multiuse_expression_element + : expression (AS (id_expression | EVALNAME concatenation))? + ; + +xmlroot_param_version_part + : VERSION (NO VALUE | expression) + ; + +xmlroot_param_standalone_part + : STANDALONE (YES | NO VALUE?) + ; + +xmlserialize_param_enconding_part + : ENCODING concatenation + ; + +xmlserialize_param_version_part + : VERSION concatenation + ; + +xmlserialize_param_ident_part + : NO INDENT + | INDENT (SIZE '=' concatenation)? + ; + +// SqlPlus + +sql_plus_command + : '/' + | EXIT + | PROMPT + | SHOW (ERR | ERRORS) + | START_CMD + | whenever_command + | set_command + ; + +whenever_command + : WHENEVER (SQLERROR | OSERROR) + ( EXIT (SUCCESS | FAILURE | WARNING) (COMMIT | ROLLBACK) + | CONTINUE (COMMIT | ROLLBACK | NONE)) + ; + +set_command + : SET regular_id (CHAR_STRING | ON | OFF | /*EXACT_NUM_LIT*/numeric | regular_id) + ; + +// Common + +partition_extension_clause + : (SUBPARTITION | PARTITION) FOR? '(' expressions? ')' + ; + +column_alias + : AS? (identifier | quoted_string) + | AS + ; + +table_alias + : identifier + | quoted_string + ; + +where_clause + : WHERE (CURRENT OF cursor_name | expression) + ; + +into_clause + : (BULK COLLECT)? INTO (','? variable_name)+ + ; + +// Common Named Elements + +xml_column_name + : identifier + | quoted_string + ; + +cost_class_name + : identifier + ; + +attribute_name + : identifier + ; + +savepoint_name + : identifier + ; + +rollback_segment_name + : identifier + ; + +table_var_name + : identifier + ; + +schema_name + : identifier + ; + +routine_name + : identifier ('.' id_expression)* ('@' link_name)? + ; + +package_name + : identifier + ; + +implementation_type_name + : identifier ('.' id_expression)? + ; + +parameter_name + : identifier + ; + +reference_model_name + : identifier + ; + +main_model_name + : identifier + ; + +container_tableview_name + : identifier ('.' id_expression)? + ; + +aggregate_function_name + : identifier ('.' id_expression)* + ; + +query_name + : identifier + ; + +grantee_name + : id_expression identified_by? + ; + +role_name + : id_expression + | CONNECT + ; + +constraint_name + : identifier ('.' id_expression)* ('@' link_name)? + ; + +label_name + : id_expression + ; + +type_name + : id_expression ('.' id_expression)* + ; + +sequence_name + : id_expression ('.' id_expression)* + ; + +exception_name + : identifier ('.' id_expression)* + ; + +function_name + : identifier ('.' id_expression)? + ; + +procedure_name + : identifier ('.' id_expression)? + ; + +trigger_name + : identifier ('.' id_expression)? + ; + +variable_name + : (INTRODUCER char_set_name)? id_expression ('.' id_expression)? + | bind_variable + ; + +index_name + : identifier ('.' id_expression)? + ; + +cursor_name + : general_element + | bind_variable + ; + +record_name + : identifier + | bind_variable + ; + +collection_name + : identifier ('.' id_expression)? + ; + +link_name + : identifier + ; + +column_name + : identifier ('.' id_expression)* + ; + +tableview_name + : identifier ('.' id_expression)? + ('@' link_name | /*TODO{!(input.LA(2) == BY)}?*/ partition_extension_clause)? + ; + +char_set_name + : id_expression ('.' id_expression)* + ; + +synonym_name + : identifier + ; + +// Represents a valid DB object name in DDL commands which are valid for several DB (or schema) objects. +// For instance, create synonym ... for , or rename to . +// Both are valid for sequences, tables, views, etc. +schema_object_name + : id_expression + ; + +dir_object_name + : id_expression + ; + +user_object_name + : id_expression + ; + +grant_object_name + : tableview_name + | USER (','? user_object_name)+ + | DIRECTORY dir_object_name + | EDITION schema_object_name + | MINING MODEL schema_object_name + | JAVA (SOURCE | RESOURCE) schema_object_name + | SQL TRANSLATION PROFILE schema_object_name + ; + +column_list + : (','? column_name)+ + ; + +paren_column_list + : LEFT_PAREN column_list RIGHT_PAREN + ; + +// PL/SQL Specs + +// NOTE: In reality this applies to aggregate functions only +keep_clause + : KEEP '(' DENSE_RANK (FIRST | LAST) order_by_clause ')' over_clause? + ; + +function_argument + : '(' (','? argument)* ')' keep_clause? + ; + +function_argument_analytic + : '(' (','? argument respect_or_ignore_nulls?)* ')' keep_clause? + ; + +function_argument_modeling + : '(' column_name (',' (numeric | HAMO) (',' (numeric | HAMO))?)? + USING (tableview_name '.' '*' | '*' | (','? expression column_alias?)+) + ')' keep_clause? + ; + +respect_or_ignore_nulls + : (RESPECT | IGNORE) NULLS + ; + +argument + : (identifier '=' '>')? expression + ; + +type_spec + : datatype + | REF? type_name (PERCENT_ROWTYPE | PERCENT_TYPE)? + ; + +datatype + : native_datatype_element precision_part? (WITH LOCAL? TIME ZONE | CHARACTER SET char_set_name)? + | INTERVAL (YEAR | DAY) ('(' expression ')')? TO (MONTH | SECOND) ('(' expression ')')? + ; + +precision_part + : '(' numeric (',' numeric)? (CHAR | BYTE)? ')' + ; + +native_datatype_element + : BINARY_INTEGER + | PLS_INTEGER + | NATURAL + | BINARY_FLOAT + | BINARY_DOUBLE + | NATURALN + | POSITIVE + | POSITIVEN + | SIGNTYPE + | SIMPLE_INTEGER + | NVARCHAR2 + | DEC + | INTEGER + | INT + | NUMERIC + | SMALLINT + | NUMBER + | DECIMAL + | DOUBLE PRECISION? + | FLOAT + | REAL + | NCHAR + | LONG RAW? + | CHAR + | CHARACTER + | VARCHAR2 + | VARCHAR + | STRING + | RAW + | BOOLEAN + | DATE + | ROWID + | UROWID + | YEAR + | MONTH + | DAY + | HOUR + | MINUTE + | SECOND + | TIMEZONE_HOUR + | TIMEZONE_MINUTE + | TIMEZONE_REGION + | TIMEZONE_ABBR + | TIMESTAMP + | TIMESTAMP_UNCONSTRAINED + | TIMESTAMP_TZ_UNCONSTRAINED + | TIMESTAMP_LTZ_UNCONSTRAINED + | YMINTERVAL_UNCONSTRAINED + | DSINTERVAL_UNCONSTRAINED + | BFILE + | BLOB + | CLOB + | NCLOB + | MLSLABEL + ; + +bind_variable + : (BINDVAR | ':' UNSIGNED_INTEGER) + // Pro*C/C++ indicator variables + (INDICATOR? (BINDVAR | ':' UNSIGNED_INTEGER))? + ('.' general_element_part)* + ; + +general_element + : general_element_part ('.' general_element_part)* + ; + +general_element_part + : (INTRODUCER char_set_name)? id_expression ('.' id_expression)* ('@' link_name)? function_argument? + ; + +table_element + : (INTRODUCER char_set_name)? id_expression ('.' id_expression)* + ; + +object_privilege + : ALL PRIVILEGES? + | ALTER + | DEBUG + | DELETE + | EXECUTE + | FLASHBACK ARCHIVE + | INDEX + | INHERIT PRIVILEGES + | INSERT + | KEEP SEQUENCE + | MERGE VIEW + | ON COMMIT REFRESH + | QUERY REWRITE + | READ + | REFERENCES + | SELECT + | TRANSLATE SQL + | UNDER + | UPDATE + | USE + | WRITE + ; + +//Ordered by type rather than alphabetically +system_privilege + : ALL PRIVILEGES + | ADVISOR + | ADMINISTER ANY? SQL TUNING SET + | (ALTER | CREATE | DROP) ANY SQL PROFILE + | ADMINISTER SQL MANAGEMENT OBJECT + | CREATE ANY? CLUSTER + | (ALTER | DROP) ANY CLUSTER + | (CREATE | DROP) ANY CONTEXT + | EXEMPT REDACTION POLICY + | ALTER DATABASE + | (ALTER | CREATE) PUBLIC? DATABASE LINK + | DROP PUBLIC DATABASE LINK + | DEBUG CONNECT SESSION + | DEBUG ANY PROCEDURE + | ANALYZE ANY DICTIONARY + | CREATE ANY? DIMENSION + | (ALTER | DROP) ANY DIMENSION + | (CREATE | DROP) ANY DIRECTORY + | (CREATE | DROP) ANY EDITION + | FLASHBACK (ARCHIVE ADMINISTER | ANY TABLE) + | (ALTER | CREATE | DROP) ANY INDEX + | CREATE ANY? INDEXTYPE + | (ALTER | DROP | EXECUTE) ANY INDEXTYPE + | CREATE (ANY | EXTERNAL)? JOB + | EXECUTE ANY (CLASS | PROGRAM) + | MANAGE SCHEDULER + | ADMINISTER KEY MANAGEMENT + | CREATE ANY? LIBRARY + | (ALTER | DROP | EXECUTE) ANY LIBRARY + | LOGMINING + | CREATE ANY? MATERIALIZED VIEW + | (ALTER | DROP) ANY MATERIALIZED VIEW + | GLOBAL? QUERY REWRITE + | ON COMMIT REFRESH + | CREATE ANY? MINING MODEL + | (ALTER | DROP | SELECT | COMMENT) ANY MINING MODEL + | CREATE ANY? CUBE + | (ALTER | DROP | SELECT | UPDATE) ANY CUBE + | CREATE ANY? MEASURE FOLDER + | (DELETE | DROP | INSERT) ANY MEASURE FOLDER + | CREATE ANY? CUBE DIMENSION + | (ALTER | DELETE | DROP | INSERT | SELECT | UPDATE) ANY CUBE DIMENSION + | CREATE ANY? CUBE BUILD PROCESS + | (DROP | UPDATE) ANY CUBE BUILD PROCESS + | CREATE ANY? OPERATOR + | (ALTER | DROP | EXECUTE) ANY OPERATOR + | (CREATE | ALTER | DROP) ANY OUTLINE + | CREATE PLUGGABLE DATABASE + | SET CONTAINER + | CREATE ANY? PROCEDURE + | (ALTER | DROP | EXECUTE) ANY PROCEDURE + | (CREATE | ALTER | DROP ) PROFILE + | CREATE ROLE + | (ALTER | DROP | GRANT) ANY ROLE + | (CREATE | ALTER | DROP) ROLLBACK SEGMENT + | CREATE ANY? SEQUENCE + | (ALTER | DROP | SELECT) ANY SEQUENCE + | (ALTER | CREATE | RESTRICTED) SESSION + | ALTER RESOURCE COST + | CREATE ANY? SQL TRANSLATION PROFILE + | (ALTER | DROP | USE) ANY SQL TRANSLATION PROFILE + | TRANSLATE ANY SQL + | CREATE ANY? SYNONYM + | DROP ANY SYNONYM + | (CREATE | DROP) PUBLIC SYNONYM + | CREATE ANY? TABLE + | (ALTER | BACKUP | COMMENT | DELETE | DROP | INSERT | LOCK | READ | SELECT | UPDATE) ANY TABLE + | (CREATE | ALTER | DROP | MANAGE | UNLIMITED) TABLESPACE + | CREATE ANY? TRIGGER + | (ALTER | DROP) ANY TRIGGER + | ADMINISTER DATABASE TRIGGER + | CREATE ANY? TYPE + | (ALTER | DROP | EXECUTE | UNDER) ANY TYPE + | (CREATE | ALTER | DROP) USER + | CREATE ANY? VIEW + | (DROP | UNDER | MERGE) ANY VIEW + | (ANALYZE | AUDIT) ANY + | BECOME USER + | CHANGE NOTIFICATION + | EXEMPT ACCESS POLICY + | FORCE ANY? TRANSACTION + | GRANT ANY OBJECT? PRIVILEGE + | INHERIT ANY PRIVILEGES + | KEEP DATE TIME + | KEEP SYSGUID + | PURGE DBA_RECYCLEBIN + | RESUMABLE + | SELECT ANY (DICTIONARY | TRANSACTION) + | SYSBACKUP + | SYSDBA + | SYSDG + | SYSKM + | SYSOPER + ; + +// $> + +// $ +#include +#include +#include "antlr4-runtime.h" +#include "PlSqlLexer.h" +#include "PlSqlParser.h" + +using namespace antlr4; +using namespace std; + +string parseInput(string inputFileName){ + ifstream inputFile (inputFileName); + if (inputFile.is_open()) { + ANTLRInputStream input(inputFile); + PlSqlLexer lexer(&input); + CommonTokenStream tokens(&lexer); + + tokens.fill(); + for (auto token : tokens.getTokens()) { + std::cout << token->toString() << std::endl; + } + + PlSqlParser parser(&tokens); + tree::ParseTree *tree = parser.sql_script(); + + inputFile.close(); + return tree->toStringTree(&parser); + } +} diff --git a/antlr-library.o b/antlr-library.o new file mode 100644 index 0000000..51afdbf Binary files /dev/null and b/antlr-library.o differ diff --git a/example-input.txt b/example-input.txt new file mode 100644 index 0000000..f8a87dd --- /dev/null +++ b/example-input.txt @@ -0,0 +1,4 @@ +INSERT INTO suppliers +(supplier_id, supplier_name) +VALUES +(5000, 'Apple'); \ No newline at end of file diff --git a/example.cpp b/example.cpp new file mode 100644 index 0000000..846e29b --- /dev/null +++ b/example.cpp @@ -0,0 +1,32 @@ + +#include +#include +#include +#include "antlr4-runtime.h" +#include "PlSqlLexer.h" +#include "PlSqlParser.h" + +using namespace antlr4; +using namespace std; + +int main(int argc, char *argv[]) { + ifstream modelicaFile ("example-input.txt"); + if (modelicaFile.is_open()) { + ANTLRInputStream input(modelicaFile); + PlSqlLexer lexer(&input); + CommonTokenStream tokens(&lexer); + + tokens.fill(); + for (auto token : tokens.getTokens()) { + std::cout << token->toString() << std::endl; + } + + PlSqlParser parser(&tokens); + tree::ParseTree *tree = parser.sql_script(); + + std::cout << tree->toStringTree(&parser) << std::endl; + modelicaFile.close(); + } +} + + diff --git a/my-notes b/my-notes new file mode 100644 index 0000000..7d5a536 --- /dev/null +++ b/my-notes @@ -0,0 +1,78 @@ +I had to change grammar, as follows : + +PlSqlLexer.g4 + +all string litterals are changed with normal letters (without quotes), and after, there is definition for letters like : + +fragment A: [aA]; +fragment B: [bB]; +fragment C: [cC]; +fragment D: [dD]; +fragment E: [eE]; +fragment F: [fF]; +fragment G: [gG]; +fragment H: [hH]; +fragment I: [iI]; +fragment J: [jJ]; +fragment K: [kK]; +fragment L: [lL]; +fragment M: [mM]; +fragment N: [nN]; +fragment O: [oO]; +fragment P: [pP]; +fragment Q: [qQ]; +fragment R: [rR]; +fragment S: [sS]; +fragment T: [tT]; +fragment U: [uU]; +fragment V: [vV]; +fragment W: [wW]; +fragment X: [xX]; +fragment Y: [yY]; +fragment Z: [zZ]; + +also, change this : + +fragment +SIMPLE_LETTER + : [A-Z] + ; + +to this : + +fragment +SIMPLE_LETTER + : 'a'..'z' + | 'A'..'Z' + ; + +after changing litterals, it's safe to replace next strings (in both, PlSqlLexer.g4 and PlSqlParser.g4) + +NULL -> HAMO +null -> hamo + +NAN -> MUJO +nan -> mujo + +OVERFLOW -> HASO +overflow -> haso + + +______ + +Building small c++ library for antlr with just one function + +library is in antlr-library.cpp + +compile with command : + +g++ -c -I runtime-linux/antlr4-runtime/ -I generated -std=c++11 antlr-library.cpp -o antlr-library.o + +make static library with command : + +ar rcs antlr-library.a antlr-library.o + +------------------- + +Note : +Should link with runtime library staticly \ No newline at end of file diff --git a/original-grammar/PlSqlLexer.g4 b/original-grammar/PlSqlLexer.g4 new file mode 100644 index 0000000..77651d0 --- /dev/null +++ b/original-grammar/PlSqlLexer.g4 @@ -0,0 +1,2387 @@ +/** + * Oracle(c) PL/SQL 11g Parser + * + * Copyright (c) 2009-2011 Alexandre Porcelli + * Copyright (c) 2015-2017 Ivan Kochurkin (KvanTTT, kvanttt@gmail.com, Positive Technologies). + * Copyright (c) 2017 Mark Adams + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +lexer grammar PlSqlLexer; + +ABORT: 'ABORT'; +ABS: 'ABS'; +ACCESS: 'ACCESS'; +ACCESSED: 'ACCESSED'; +ACCOUNT: 'ACCOUNT'; +ACL: 'ACL'; +ACOS: 'ACOS'; +ACTION: 'ACTION'; +ACTIONS: 'ACTIONS'; +ACTIVATE: 'ACTIVATE'; +ACTIVE: 'ACTIVE'; +ACTIVE_COMPONENT: 'ACTIVE_COMPONENT'; +ACTIVE_DATA: 'ACTIVE_DATA'; +ACTIVE_FUNCTION: 'ACTIVE_FUNCTION'; +ACTIVE_TAG: 'ACTIVE_TAG'; +ACTIVITY: 'ACTIVITY'; +ADAPTIVE_PLAN: 'ADAPTIVE_PLAN'; +ADD: 'ADD'; +ADD_COLUMN: 'ADD_COLUMN'; +ADD_GROUP: 'ADD_GROUP'; +ADD_MONTHS: 'ADD_MONTHS'; +ADJ_DATE: 'ADJ_DATE'; +ADMIN: 'ADMIN'; +ADMINISTER: 'ADMINISTER'; +ADMINISTRATOR: 'ADMINISTRATOR'; +ADVANCED: 'ADVANCED'; +ADVISE: 'ADVISE'; +ADVISOR: 'ADVISOR'; +AFD_DISKSTRING: 'AFD_DISKSTRING'; +AFTER: 'AFTER'; +AGENT: 'AGENT'; +AGGREGATE: 'AGGREGATE'; +A_LETTER: 'A'; +ALIAS: 'ALIAS'; +ALL: 'ALL'; +ALLOCATE: 'ALLOCATE'; +ALLOW: 'ALLOW'; +ALL_ROWS: 'ALL_ROWS'; +ALTER: 'ALTER'; +ALWAYS: 'ALWAYS'; +ANALYZE: 'ANALYZE'; +ANCILLARY: 'ANCILLARY'; +AND: 'AND'; +AND_EQUAL: 'AND_EQUAL'; +ANOMALY: 'ANOMALY'; +ANSI_REARCH: 'ANSI_REARCH'; +ANTIJOIN: 'ANTIJOIN'; +ANY: 'ANY'; +ANYSCHEMA: 'ANYSCHEMA'; +APPEND: 'APPEND'; +APPENDCHILDXML: 'APPENDCHILDXML'; +APPEND_VALUES: 'APPEND_VALUES'; +APPLICATION: 'APPLICATION'; +APPLY: 'APPLY'; +APPROX_COUNT_DISTINCT: 'APPROX_COUNT_DISTINCT'; +ARCHIVAL: 'ARCHIVAL'; +ARCHIVE: 'ARCHIVE'; +ARCHIVED: 'ARCHIVED'; +ARCHIVELOG: 'ARCHIVELOG'; +ARRAY: 'ARRAY'; +AS: 'AS'; +ASC: 'ASC'; +ASCII: 'ASCII'; +ASCIISTR: 'ASCIISTR'; +ASIN: 'ASIN'; +ASIS: 'ASIS'; +ASSEMBLY: 'ASSEMBLY'; +ASSIGN: 'ASSIGN'; +ASSOCIATE: 'ASSOCIATE'; +ASYNC: 'ASYNC'; +ASYNCHRONOUS: 'ASYNCHRONOUS'; +ATAN2: 'ATAN2'; +ATAN: 'ATAN'; +AT: 'AT'; +ATTRIBUTE: 'ATTRIBUTE'; +ATTRIBUTES: 'ATTRIBUTES'; +AUDIT: 'AUDIT'; +AUTHENTICATED: 'AUTHENTICATED'; +AUTHENTICATION: 'AUTHENTICATION'; +AUTHID: 'AUTHID'; +AUTHORIZATION: 'AUTHORIZATION'; +AUTOALLOCATE: 'AUTOALLOCATE'; +AUTO: 'AUTO'; +AUTOEXTEND: 'AUTOEXTEND'; +AUTO_LOGIN: 'AUTO_LOGIN'; +AUTOMATIC: 'AUTOMATIC'; +AUTONOMOUS_TRANSACTION: 'AUTONOMOUS_TRANSACTION'; +AUTO_REOPTIMIZE: 'AUTO_REOPTIMIZE'; +AVAILABILITY: 'AVAILABILITY'; +AVRO: 'AVRO'; +BACKGROUND: 'BACKGROUND'; +BACKUP: 'BACKUP'; +BASIC: 'BASIC'; +BASICFILE: 'BASICFILE'; +BATCH: 'BATCH'; +BATCHSIZE: 'BATCHSIZE'; +BATCH_TABLE_ACCESS_BY_ROWID: 'BATCH_TABLE_ACCESS_BY_ROWID'; +BECOME: 'BECOME'; +BEFORE: 'BEFORE'; +BEGIN: 'BEGIN'; +BEGINNING: 'BEGINNING'; +BEGIN_OUTLINE_DATA: 'BEGIN_OUTLINE_DATA'; +BEHALF: 'BEHALF'; +BEQUEATH: 'BEQUEATH'; +BETWEEN: 'BETWEEN'; +BFILE: 'BFILE'; +BFILENAME: 'BFILENAME'; +BIGFILE: 'BIGFILE'; +BINARY: 'BINARY'; +BINARY_DOUBLE: 'BINARY_DOUBLE'; +BINARY_DOUBLE_INFINITY: 'BINARY_DOUBLE_INFINITY'; +BINARY_DOUBLE_NAN: 'BINARY_DOUBLE_NAN'; +BINARY_FLOAT: 'BINARY_FLOAT'; +BINARY_FLOAT_INFINITY: 'BINARY_FLOAT_INFINITY'; +BINARY_FLOAT_NAN: 'BINARY_FLOAT_NAN'; +BINARY_INTEGER: 'BINARY_INTEGER'; +BIND_AWARE: 'BIND_AWARE'; +BINDING: 'BINDING'; +BIN_TO_NUM: 'BIN_TO_NUM'; +BITAND: 'BITAND'; +BITMAP_AND: 'BITMAP_AND'; +BITMAP: 'BITMAP'; +BITMAPS: 'BITMAPS'; +BITMAP_TREE: 'BITMAP_TREE'; +BITS: 'BITS'; +BLOB: 'BLOB'; +BLOCK: 'BLOCK'; +BLOCK_RANGE: 'BLOCK_RANGE'; +BLOCKS: 'BLOCKS'; +BLOCKSIZE: 'BLOCKSIZE'; +BODY: 'BODY'; +BOOLEAN: 'BOOLEAN'; +BOTH: 'BOTH'; +BOUND: 'BOUND'; +BRANCH: 'BRANCH'; +BREADTH: 'BREADTH'; +BROADCAST: 'BROADCAST'; +BSON: 'BSON'; +BUFFER: 'BUFFER'; +BUFFER_CACHE: 'BUFFER_CACHE'; +BUFFER_POOL: 'BUFFER_POOL'; +BUILD: 'BUILD'; +BULK: 'BULK'; +BY: 'BY'; +BYPASS_RECURSIVE_CHECK: 'BYPASS_RECURSIVE_CHECK'; +BYPASS_UJVC: 'BYPASS_UJVC'; +BYTE: 'BYTE'; +CACHE: 'CACHE'; +CACHE_CB: 'CACHE_CB'; +CACHE_INSTANCES: 'CACHE_INSTANCES'; +CACHE_TEMP_TABLE: 'CACHE_TEMP_TABLE'; +CACHING: 'CACHING'; +CALCULATED: 'CALCULATED'; +CALLBACK: 'CALLBACK'; +CALL: 'CALL'; +CANCEL: 'CANCEL'; +CANONICAL: 'CANONICAL'; +CAPACITY: 'CAPACITY'; +CARDINALITY: 'CARDINALITY'; +CASCADE: 'CASCADE'; +CASE: 'CASE'; +CAST: 'CAST'; +CATEGORY: 'CATEGORY'; +CDBDEFAULT: 'CDB$DEFAULT'; +CEIL: 'CEIL'; +CELL_FLASH_CACHE: 'CELL_FLASH_CACHE'; +CERTIFICATE: 'CERTIFICATE'; +CFILE: 'CFILE'; +CHAINED: 'CHAINED'; +CHANGE: 'CHANGE'; +CHANGE_DUPKEY_ERROR_INDEX: 'CHANGE_DUPKEY_ERROR_INDEX'; +CHARACTER: 'CHARACTER'; +CHAR: 'CHAR'; +CHAR_CS: 'CHAR_CS'; +CHARTOROWID: 'CHARTOROWID'; +CHECK_ACL_REWRITE: 'CHECK_ACL_REWRITE'; +CHECK: 'CHECK'; +CHECKPOINT: 'CHECKPOINT'; +CHILD: 'CHILD'; +CHOOSE: 'CHOOSE'; +CHR: 'CHR'; +CHUNK: 'CHUNK'; +CLASS: 'CLASS'; +CLASSIFIER: 'CLASSIFIER'; +CLEANUP: 'CLEANUP'; +CLEAR: 'CLEAR'; +C_LETTER: 'C'; +CLIENT: 'CLIENT'; +CLOB: 'CLOB'; +CLONE: 'CLONE'; +CLOSE_CACHED_OPEN_CURSORS: 'CLOSE_CACHED_OPEN_CURSORS'; +CLOSE: 'CLOSE'; +CLUSTER_BY_ROWID: 'CLUSTER_BY_ROWID'; +CLUSTER: 'CLUSTER'; +CLUSTER_DETAILS: 'CLUSTER_DETAILS'; +CLUSTER_DISTANCE: 'CLUSTER_DISTANCE'; +CLUSTER_ID: 'CLUSTER_ID'; +CLUSTERING: 'CLUSTERING'; +CLUSTERING_FACTOR: 'CLUSTERING_FACTOR'; +CLUSTER_PROBABILITY: 'CLUSTER_PROBABILITY'; +CLUSTER_SET: 'CLUSTER_SET'; +COALESCE: 'COALESCE'; +COALESCE_SQ: 'COALESCE_SQ'; +COARSE: 'COARSE'; +CO_AUTH_IND: 'CO_AUTH_IND'; +COLD: 'COLD'; +COLLECT: 'COLLECT'; +COLUMNAR: 'COLUMNAR'; +COLUMN_AUTH_INDICATOR: 'COLUMN_AUTH_INDICATOR'; +COLUMN: 'COLUMN'; +COLUMNS: 'COLUMNS'; +COLUMN_STATS: 'COLUMN_STATS'; +COLUMN_VALUE: 'COLUMN_VALUE'; +COMMENT: 'COMMENT'; +COMMIT: 'COMMIT'; +COMMITTED: 'COMMITTED'; +COMMON_DATA: 'COMMON_DATA'; +COMPACT: 'COMPACT'; +COMPATIBILITY: 'COMPATIBILITY'; +COMPILE: 'COMPILE'; +COMPLETE: 'COMPLETE'; +COMPLIANCE: 'COMPLIANCE'; +COMPONENT: 'COMPONENT'; +COMPONENTS: 'COMPONENTS'; +COMPOSE: 'COMPOSE'; +COMPOSITE: 'COMPOSITE'; +COMPOSITE_LIMIT: 'COMPOSITE_LIMIT'; +COMPOUND: 'COMPOUND'; +COMPRESS: 'COMPRESS'; +COMPUTE: 'COMPUTE'; +CONCAT: 'CONCAT'; +CON_DBID_TO_ID: 'CON_DBID_TO_ID'; +CONDITIONAL: 'CONDITIONAL'; +CONDITION: 'CONDITION'; +CONFIRM: 'CONFIRM'; +CONFORMING: 'CONFORMING'; +CON_GUID_TO_ID: 'CON_GUID_TO_ID'; +CON_ID: 'CON_ID'; +CON_NAME_TO_ID: 'CON_NAME_TO_ID'; +CONNECT_BY_CB_WHR_ONLY: 'CONNECT_BY_CB_WHR_ONLY'; +CONNECT_BY_COMBINE_SW: 'CONNECT_BY_COMBINE_SW'; +CONNECT_BY_COST_BASED: 'CONNECT_BY_COST_BASED'; +CONNECT_BY_ELIM_DUPS: 'CONNECT_BY_ELIM_DUPS'; +CONNECT_BY_FILTERING: 'CONNECT_BY_FILTERING'; +CONNECT_BY_ISCYCLE: 'CONNECT_BY_ISCYCLE'; +CONNECT_BY_ISLEAF: 'CONNECT_BY_ISLEAF'; +CONNECT_BY_ROOT: 'CONNECT_BY_ROOT'; +CONNECT: 'CONNECT'; +CONNECT_TIME: 'CONNECT_TIME'; +CONSIDER: 'CONSIDER'; +CONSISTENT: 'CONSISTENT'; +CONSTANT: 'CONSTANT'; +CONST: 'CONST'; +CONSTRAINT: 'CONSTRAINT'; +CONSTRAINTS: 'CONSTRAINTS'; +CONSTRUCTOR: 'CONSTRUCTOR'; +CONTAINER: 'CONTAINER'; +CONTAINER_DATA: 'CONTAINER_DATA'; +CONTAINERS: 'CONTAINERS'; +CONTENT: 'CONTENT'; +CONTENTS: 'CONTENTS'; +CONTEXT: 'CONTEXT'; +CONTINUE: 'CONTINUE'; +CONTROLFILE: 'CONTROLFILE'; +CON_UID_TO_ID: 'CON_UID_TO_ID'; +CONVERT: 'CONVERT'; +COOKIE: 'COOKIE'; +COPY: 'COPY'; +CORR_K: 'CORR_K'; +CORR_S: 'CORR_S'; +CORRUPTION: 'CORRUPTION'; +CORRUPT_XID_ALL: 'CORRUPT_XID_ALL'; +CORRUPT_XID: 'CORRUPT_XID'; +COS: 'COS'; +COSH: 'COSH'; +COST: 'COST'; +COST_XML_QUERY_REWRITE: 'COST_XML_QUERY_REWRITE'; +COUNT: 'COUNT'; +COVAR_POP: 'COVAR_POP'; +COVAR_SAMP: 'COVAR_SAMP'; +CPU_COSTING: 'CPU_COSTING'; +CPU_PER_CALL: 'CPU_PER_CALL'; +CPU_PER_SESSION: 'CPU_PER_SESSION'; +CRASH: 'CRASH'; +CREATE: 'CREATE'; +CREATE_FILE_DEST: 'CREATE_FILE_DEST'; +CREATE_STORED_OUTLINES: 'CREATE_STORED_OUTLINES'; +CREATION: 'CREATION'; +CREDENTIAL: 'CREDENTIAL'; +CRITICAL: 'CRITICAL'; +CROSS: 'CROSS'; +CROSSEDITION: 'CROSSEDITION'; +CSCONVERT: 'CSCONVERT'; +CUBE_AJ: 'CUBE_AJ'; +CUBE: 'CUBE'; +CUBE_GB: 'CUBE_GB'; +CUBE_SJ: 'CUBE_SJ'; +CUME_DISTM: 'CUME_DISTM'; +CURRENT: 'CURRENT'; +CURRENT_DATE: 'CURRENT_DATE'; +CURRENT_SCHEMA: 'CURRENT_SCHEMA'; +CURRENT_TIME: 'CURRENT_TIME'; +CURRENT_TIMESTAMP: 'CURRENT_TIMESTAMP'; +CURRENT_USER: 'CURRENT_USER'; +CURRENTV: 'CURRENTV'; +CURSOR: 'CURSOR'; +CURSOR_SHARING_EXACT: 'CURSOR_SHARING_EXACT'; +CURSOR_SPECIFIC_SEGMENT: 'CURSOR_SPECIFIC_SEGMENT'; +CUSTOMDATUM: 'CUSTOMDATUM'; +CV: 'CV'; +CYCLE: 'CYCLE'; +DANGLING: 'DANGLING'; +DATABASE: 'DATABASE'; +DATA: 'DATA'; +DATAFILE: 'DATAFILE'; +DATAFILES: 'DATAFILES'; +DATAMOVEMENT: 'DATAMOVEMENT'; +DATAOBJNO: 'DATAOBJNO'; +DATAOBJ_TO_MAT_PARTITION: 'DATAOBJ_TO_MAT_PARTITION'; +DATAOBJ_TO_PARTITION: 'DATAOBJ_TO_PARTITION'; +DATAPUMP: 'DATAPUMP'; +DATA_SECURITY_REWRITE_LIMIT: 'DATA_SECURITY_REWRITE_LIMIT'; +DATE: 'DATE'; +DATE_MODE: 'DATE_MODE'; +DAY: 'DAY'; +DAYS: 'DAYS'; +DBA: 'DBA'; +DBA_RECYCLEBIN: 'DBA_RECYCLEBIN'; +DBMS_STATS: 'DBMS_STATS'; +DB_ROLE_CHANGE: 'DB_ROLE_CHANGE'; +DBTIMEZONE: 'DBTIMEZONE'; +DB_UNIQUE_NAME: 'DB_UNIQUE_NAME'; +DB_VERSION: 'DB_VERSION'; +DDL: 'DDL'; +DEALLOCATE: 'DEALLOCATE'; +DEBUG: 'DEBUG'; +DEBUGGER: 'DEBUGGER'; +DEC: 'DEC'; +DECIMAL: 'DECIMAL'; +DECLARE: 'DECLARE'; +DECOMPOSE: 'DECOMPOSE'; +DECORRELATE: 'DECORRELATE'; +DECR: 'DECR'; +DECREMENT: 'DECREMENT'; +DECRYPT: 'DECRYPT'; +DEDUPLICATE: 'DEDUPLICATE'; +DEFAULT: 'DEFAULT'; +DEFAULTS: 'DEFAULTS'; +DEFERRABLE: 'DEFERRABLE'; +DEFERRED: 'DEFERRED'; +DEFINED: 'DEFINED'; +DEFINE: 'DEFINE'; +DEFINER: 'DEFINER'; +DEGREE: 'DEGREE'; +DELAY: 'DELAY'; +DELEGATE: 'DELEGATE'; +DELETE_ALL: 'DELETE_ALL'; +DELETE: 'DELETE'; +DELETEXML: 'DELETEXML'; +DEMAND: 'DEMAND'; +DENSE_RANKM: 'DENSE_RANKM'; +DEPENDENT: 'DEPENDENT'; +DEPTH: 'DEPTH'; +DEQUEUE: 'DEQUEUE'; +DEREF: 'DEREF'; +DEREF_NO_REWRITE: 'DEREF_NO_REWRITE'; +DESC: 'DESC'; +DESTROY: 'DESTROY'; +DETACHED: 'DETACHED'; +DETERMINES: 'DETERMINES'; +DETERMINISTIC: 'DETERMINISTIC'; +DICTIONARY: 'DICTIONARY'; +DIMENSION: 'DIMENSION'; +DIMENSIONS: 'DIMENSIONS'; +DIRECT_LOAD: 'DIRECT_LOAD'; +DIRECTORY: 'DIRECTORY'; +DIRECT_PATH: 'DIRECT_PATH'; +DISABLE_ALL: 'DISABLE_ALL'; +DISABLE: 'DISABLE'; +DISABLE_PARALLEL_DML: 'DISABLE_PARALLEL_DML'; +DISABLE_PRESET: 'DISABLE_PRESET'; +DISABLE_RPKE: 'DISABLE_RPKE'; +DISALLOW: 'DISALLOW'; +DISASSOCIATE: 'DISASSOCIATE'; +DISCARD: 'DISCARD'; +DISCONNECT: 'DISCONNECT'; +DISK: 'DISK'; +DISKGROUP: 'DISKGROUP'; +DISKS: 'DISKS'; +DISMOUNT: 'DISMOUNT'; +DISTINCT: 'DISTINCT'; +DISTINGUISHED: 'DISTINGUISHED'; +DISTRIBUTED: 'DISTRIBUTED'; +DISTRIBUTE: 'DISTRIBUTE'; +DML: 'DML'; +DML_UPDATE: 'DML_UPDATE'; +DOCFIDELITY: 'DOCFIDELITY'; +DOCUMENT: 'DOCUMENT'; +DOMAIN_INDEX_FILTER: 'DOMAIN_INDEX_FILTER'; +DOMAIN_INDEX_NO_SORT: 'DOMAIN_INDEX_NO_SORT'; +DOMAIN_INDEX_SORT: 'DOMAIN_INDEX_SORT'; +DOUBLE: 'DOUBLE'; +DOWNGRADE: 'DOWNGRADE'; +DRIVING_SITE: 'DRIVING_SITE'; +DROP_COLUMN: 'DROP_COLUMN'; +DROP: 'DROP'; +DROP_GROUP: 'DROP_GROUP'; +DSINTERVAL_UNCONSTRAINED: 'DSINTERVAL_UNCONSTRAINED'; +DST_UPGRADE_INSERT_CONV: 'DST_UPGRADE_INSERT_CONV'; +DUMP: 'DUMP'; +DUPLICATE: 'DUPLICATE'; +DV: 'DV'; +DYNAMIC: 'DYNAMIC'; +DYNAMIC_SAMPLING: 'DYNAMIC_SAMPLING'; +DYNAMIC_SAMPLING_EST_CDN: 'DYNAMIC_SAMPLING_EST_CDN'; +EACH: 'EACH'; +EDITIONABLE: 'EDITIONABLE'; +EDITION: 'EDITION'; +EDITIONING: 'EDITIONING'; +EDITIONS: 'EDITIONS'; +ELEMENT: 'ELEMENT'; +ELIM_GROUPBY: 'ELIM_GROUPBY'; +ELIMINATE_JOIN: 'ELIMINATE_JOIN'; +ELIMINATE_OBY: 'ELIMINATE_OBY'; +ELIMINATE_OUTER_JOIN: 'ELIMINATE_OUTER_JOIN'; +ELSE: 'ELSE'; +ELSIF: 'ELSIF'; +EM: 'EM'; +EMPTY_BLOB: 'EMPTY_BLOB'; +EMPTY_CLOB: 'EMPTY_CLOB'; +EMPTY: 'EMPTY'; +ENABLE_ALL: 'ENABLE_ALL'; +ENABLE: 'ENABLE'; +ENABLE_PARALLEL_DML: 'ENABLE_PARALLEL_DML'; +ENABLE_PRESET: 'ENABLE_PRESET'; +ENCODING: 'ENCODING'; +ENCRYPT: 'ENCRYPT'; +ENCRYPTION: 'ENCRYPTION'; +END: 'END'; +END_OUTLINE_DATA: 'END_OUTLINE_DATA'; +ENFORCED: 'ENFORCED'; +ENFORCE: 'ENFORCE'; +ENQUEUE: 'ENQUEUE'; +ENTERPRISE: 'ENTERPRISE'; +ENTITYESCAPING: 'ENTITYESCAPING'; +ENTRY: 'ENTRY'; +EQUIPART: 'EQUIPART'; +ERR: 'ERR'; +ERROR_ARGUMENT: 'ERROR_ARGUMENT'; +ERROR: 'ERROR'; +ERROR_ON_OVERLAP_TIME: 'ERROR_ON_OVERLAP_TIME'; +ERRORS: 'ERRORS'; +ESCAPE: 'ESCAPE'; +ESTIMATE: 'ESTIMATE'; +EVAL: 'EVAL'; +EVALNAME: 'EVALNAME'; +EVALUATE: 'EVALUATE'; +EVALUATION: 'EVALUATION'; +EVENTS: 'EVENTS'; +EVERY: 'EVERY'; +EXCEPT: 'EXCEPT'; +EXCEPTION: 'EXCEPTION'; +EXCEPTION_INIT: 'EXCEPTION_INIT'; +EXCEPTIONS: 'EXCEPTIONS'; +EXCHANGE: 'EXCHANGE'; +EXCLUDE: 'EXCLUDE'; +EXCLUDING: 'EXCLUDING'; +EXCLUSIVE: 'EXCLUSIVE'; +EXECUTE: 'EXECUTE'; +EXEMPT: 'EXEMPT'; +EXISTING: 'EXISTING'; +EXISTS: 'EXISTS'; +EXISTSNODE: 'EXISTSNODE'; +EXIT: 'EXIT'; +EXPAND_GSET_TO_UNION: 'EXPAND_GSET_TO_UNION'; +EXPAND_TABLE: 'EXPAND_TABLE'; +EXP: 'EXP'; +EXPIRE: 'EXPIRE'; +EXPLAIN: 'EXPLAIN'; +EXPLOSION: 'EXPLOSION'; +EXPORT: 'EXPORT'; +EXPR_CORR_CHECK: 'EXPR_CORR_CHECK'; +EXPRESS: 'EXPRESS'; +EXTENDS: 'EXTENDS'; +EXTENT: 'EXTENT'; +EXTENTS: 'EXTENTS'; +EXTERNAL: 'EXTERNAL'; +EXTERNALLY: 'EXTERNALLY'; +EXTRACTCLOBXML: 'EXTRACTCLOBXML'; +EXTRACT: 'EXTRACT'; +EXTRACTVALUE: 'EXTRACTVALUE'; +EXTRA: 'EXTRA'; +FACILITY: 'FACILITY'; +FACT: 'FACT'; +FACTOR: 'FACTOR'; +FACTORIZE_JOIN: 'FACTORIZE_JOIN'; +FAILED: 'FAILED'; +FAILED_LOGIN_ATTEMPTS: 'FAILED_LOGIN_ATTEMPTS'; +FAILGROUP: 'FAILGROUP'; +FAILOVER: 'FAILOVER'; +FAILURE: 'FAILURE'; +FALSE: 'FALSE'; +FAMILY: 'FAMILY'; +FAR: 'FAR'; +FAST: 'FAST'; +FASTSTART: 'FASTSTART'; +FBTSCAN: 'FBTSCAN'; +FEATURE_DETAILS: 'FEATURE_DETAILS'; +FEATURE_ID: 'FEATURE_ID'; +FEATURE_SET: 'FEATURE_SET'; +FEATURE_VALUE: 'FEATURE_VALUE'; +FETCH: 'FETCH'; +FILE: 'FILE'; +FILE_NAME_CONVERT: 'FILE_NAME_CONVERT'; +FILESYSTEM_LIKE_LOGGING: 'FILESYSTEM_LIKE_LOGGING'; +FILTER: 'FILTER'; +FINAL: 'FINAL'; +FINE: 'FINE'; +FINISH: 'FINISH'; +FIRST: 'FIRST'; +FIRSTM: 'FIRSTM'; +FIRST_ROWS: 'FIRST_ROWS'; +FIRST_VALUE: 'FIRST_VALUE'; +FIXED_VIEW_DATA: 'FIXED_VIEW_DATA'; +FLAGGER: 'FLAGGER'; +FLASHBACK: 'FLASHBACK'; +FLASH_CACHE: 'FLASH_CACHE'; +FLOAT: 'FLOAT'; +FLOB: 'FLOB'; +FLOOR: 'FLOOR'; +FLUSH: 'FLUSH'; +FOLDER: 'FOLDER'; +FOLLOWING: 'FOLLOWING'; +FOLLOWS: 'FOLLOWS'; +FORALL: 'FORALL'; +FORCE: 'FORCE'; +FORCE_XML_QUERY_REWRITE: 'FORCE_XML_QUERY_REWRITE'; +FOREIGN: 'FOREIGN'; +FOREVER: 'FOREVER'; +FOR: 'FOR'; +FORMAT: 'FORMAT'; +FORWARD: 'FORWARD'; +FRAGMENT_NUMBER: 'FRAGMENT_NUMBER'; +FREELIST: 'FREELIST'; +FREELISTS: 'FREELISTS'; +FREEPOOLS: 'FREEPOOLS'; +FRESH: 'FRESH'; +FROM: 'FROM'; +FROM_TZ: 'FROM_TZ'; +FULL: 'FULL'; +FULL_OUTER_JOIN_TO_OUTER: 'FULL_OUTER_JOIN_TO_OUTER'; +FUNCTION: 'FUNCTION'; +FUNCTIONS: 'FUNCTIONS'; +GATHER_OPTIMIZER_STATISTICS: 'GATHER_OPTIMIZER_STATISTICS'; +GATHER_PLAN_STATISTICS: 'GATHER_PLAN_STATISTICS'; +GBY_CONC_ROLLUP: 'GBY_CONC_ROLLUP'; +GBY_PUSHDOWN: 'GBY_PUSHDOWN'; +GENERATED: 'GENERATED'; +GET: 'GET'; +GLOBAL: 'GLOBAL'; +GLOBALLY: 'GLOBALLY'; +GLOBAL_NAME: 'GLOBAL_NAME'; +GLOBAL_TOPIC_ENABLED: 'GLOBAL_TOPIC_ENABLED'; +GOTO: 'GOTO'; +GRANT: 'GRANT'; +GROUP_BY: 'GROUP_BY'; +GROUP: 'GROUP'; +GROUP_ID: 'GROUP_ID'; +GROUPING: 'GROUPING'; +GROUPING_ID: 'GROUPING_ID'; +GROUPS: 'GROUPS'; +GUARANTEED: 'GUARANTEED'; +GUARANTEE: 'GUARANTEE'; +GUARD: 'GUARD'; +HASH_AJ: 'HASH_AJ'; +HASH: 'HASH'; +HASHKEYS: 'HASHKEYS'; +HASH_SJ: 'HASH_SJ'; +HAVING: 'HAVING'; +HEADER: 'HEADER'; +HEAP: 'HEAP'; +HELP: 'HELP'; +HEXTORAW: 'HEXTORAW'; +HEXTOREF: 'HEXTOREF'; +HIDDEN_KEYWORD: 'HIDDEN'; +HIDE: 'HIDE'; +HIERARCHY: 'HIERARCHY'; +HIGH: 'HIGH'; +HINTSET_BEGIN: 'HINTSET_BEGIN'; +HINTSET_END: 'HINTSET_END'; +HOT: 'HOT'; +HOUR: 'HOUR'; +HWM_BROKERED: 'HWM_BROKERED'; +HYBRID: 'HYBRID'; +IDENTIFIED: 'IDENTIFIED'; +IDENTIFIER: 'IDENTIFIER'; +IDENTITY: 'IDENTITY'; +IDGENERATORS: 'IDGENERATORS'; +ID: 'ID'; +IDLE_TIME: 'IDLE_TIME'; +IF: 'IF'; +IGNORE: 'IGNORE'; +IGNORE_OPTIM_EMBEDDED_HINTS: 'IGNORE_OPTIM_EMBEDDED_HINTS'; +IGNORE_ROW_ON_DUPKEY_INDEX: 'IGNORE_ROW_ON_DUPKEY_INDEX'; +IGNORE_WHERE_CLAUSE: 'IGNORE_WHERE_CLAUSE'; +ILM: 'ILM'; +IMMEDIATE: 'IMMEDIATE'; +IMPACT: 'IMPACT'; +IMPORT: 'IMPORT'; +INACTIVE: 'INACTIVE'; +INCLUDE: 'INCLUDE'; +INCLUDE_VERSION: 'INCLUDE_VERSION'; +INCLUDING: 'INCLUDING'; +INCREMENTAL: 'INCREMENTAL'; +INCREMENT: 'INCREMENT'; +INCR: 'INCR'; +INDENT: 'INDENT'; +INDEX_ASC: 'INDEX_ASC'; +INDEX_COMBINE: 'INDEX_COMBINE'; +INDEX_DESC: 'INDEX_DESC'; +INDEXED: 'INDEXED'; +INDEXES: 'INDEXES'; +INDEX_FFS: 'INDEX_FFS'; +INDEX_FILTER: 'INDEX_FILTER'; +INDEX: 'INDEX'; +INDEXING: 'INDEXING'; +INDEX_JOIN: 'INDEX_JOIN'; +INDEX_ROWS: 'INDEX_ROWS'; +INDEX_RRS: 'INDEX_RRS'; +INDEX_RS_ASC: 'INDEX_RS_ASC'; +INDEX_RS_DESC: 'INDEX_RS_DESC'; +INDEX_RS: 'INDEX_RS'; +INDEX_SCAN: 'INDEX_SCAN'; +INDEX_SKIP_SCAN: 'INDEX_SKIP_SCAN'; +INDEX_SS_ASC: 'INDEX_SS_ASC'; +INDEX_SS_DESC: 'INDEX_SS_DESC'; +INDEX_SS: 'INDEX_SS'; +INDEX_STATS: 'INDEX_STATS'; +INDEXTYPE: 'INDEXTYPE'; +INDEXTYPES: 'INDEXTYPES'; +INDICATOR: 'INDICATOR'; +INDICES: 'INDICES'; +INFINITE: 'INFINITE'; +INFORMATIONAL: 'INFORMATIONAL'; +INHERIT: 'INHERIT'; +IN: 'IN'; +INITCAP: 'INITCAP'; +INITIAL: 'INITIAL'; +INITIALIZED: 'INITIALIZED'; +INITIALLY: 'INITIALLY'; +INITRANS: 'INITRANS'; +INLINE: 'INLINE'; +INLINE_XMLTYPE_NT: 'INLINE_XMLTYPE_NT'; +INMEMORY: 'INMEMORY'; +IN_MEMORY_METADATA: 'IN_MEMORY_METADATA'; +INMEMORY_PRUNING: 'INMEMORY_PRUNING'; +INNER: 'INNER'; +INOUT: 'INOUT'; +INPLACE: 'INPLACE'; +INSERTCHILDXMLAFTER: 'INSERTCHILDXMLAFTER'; +INSERTCHILDXMLBEFORE: 'INSERTCHILDXMLBEFORE'; +INSERTCHILDXML: 'INSERTCHILDXML'; +INSERT: 'INSERT'; +INSERTXMLAFTER: 'INSERTXMLAFTER'; +INSERTXMLBEFORE: 'INSERTXMLBEFORE'; +INSTANCE: 'INSTANCE'; +INSTANCES: 'INSTANCES'; +INSTANTIABLE: 'INSTANTIABLE'; +INSTANTLY: 'INSTANTLY'; +INSTEAD: 'INSTEAD'; +INSTR2: 'INSTR2'; +INSTR4: 'INSTR4'; +INSTRB: 'INSTRB'; +INSTRC: 'INSTRC'; +INSTR: 'INSTR'; +INTEGER: 'INTEGER'; +INTERLEAVED: 'INTERLEAVED'; +INTERMEDIATE: 'INTERMEDIATE'; +INTERNAL_CONVERT: 'INTERNAL_CONVERT'; +INTERNAL_USE: 'INTERNAL_USE'; +INTERPRETED: 'INTERPRETED'; +INTERSECT: 'INTERSECT'; +INTERVAL: 'INTERVAL'; +INT: 'INT'; +INTO: 'INTO'; +INVALIDATE: 'INVALIDATE'; +INVISIBLE: 'INVISIBLE'; +IN_XQUERY: 'IN_XQUERY'; +IS: 'IS'; +ISOLATION: 'ISOLATION'; +ISOLATION_LEVEL: 'ISOLATION_LEVEL'; +ITERATE: 'ITERATE'; +ITERATION_NUMBER: 'ITERATION_NUMBER'; +JAVA: 'JAVA'; +JOB: 'JOB'; +JOIN: 'JOIN'; +JSON_ARRAYAGG: 'JSON_ARRAYAGG'; +JSON_ARRAY: 'JSON_ARRAY'; +JSON_EQUAL: 'JSON_EQUAL'; +JSON_EXISTS2: 'JSON_EXISTS2'; +JSON_EXISTS: 'JSON_EXISTS'; +JSONGET: 'JSONGET'; +JSON: 'JSON'; +JSON_OBJECTAGG: 'JSON_OBJECTAGG'; +JSON_OBJECT: 'JSON_OBJECT'; +JSONPARSE: 'JSONPARSE'; +JSON_QUERY: 'JSON_QUERY'; +JSON_SERIALIZE: 'JSON_SERIALIZE'; +JSON_TABLE: 'JSON_TABLE'; +JSON_TEXTCONTAINS2: 'JSON_TEXTCONTAINS2'; +JSON_TEXTCONTAINS: 'JSON_TEXTCONTAINS'; +JSON_VALUE: 'JSON_VALUE'; +KEEP_DUPLICATES: 'KEEP_DUPLICATES'; +KEEP: 'KEEP'; +KERBEROS: 'KERBEROS'; +KEY: 'KEY'; +KEY_LENGTH: 'KEY_LENGTH'; +KEYSIZE: 'KEYSIZE'; +KEYS: 'KEYS'; +KEYSTORE: 'KEYSTORE'; +KILL: 'KILL'; +LABEL: 'LABEL'; +LANGUAGE: 'LANGUAGE'; +LAST_DAY: 'LAST_DAY'; +LAST: 'LAST'; +LAST_VALUE: 'LAST_VALUE'; +LATERAL: 'LATERAL'; +LAX: 'LAX'; +LAYER: 'LAYER'; +LDAP_REGISTRATION_ENABLED: 'LDAP_REGISTRATION_ENABLED'; +LDAP_REGISTRATION: 'LDAP_REGISTRATION'; +LDAP_REG_SYNC_INTERVAL: 'LDAP_REG_SYNC_INTERVAL'; +LEADING: 'LEADING'; +LEFT: 'LEFT'; +LENGTH2: 'LENGTH2'; +LENGTH4: 'LENGTH4'; +LENGTHB: 'LENGTHB'; +LENGTHC: 'LENGTHC'; +LENGTH: 'LENGTH'; +LESS: 'LESS'; +LEVEL: 'LEVEL'; +LEVELS: 'LEVELS'; +LIBRARY: 'LIBRARY'; +LIFECYCLE: 'LIFECYCLE'; +LIFE: 'LIFE'; +LIFETIME: 'LIFETIME'; +LIKE2: 'LIKE2'; +LIKE4: 'LIKE4'; +LIKEC: 'LIKEC'; +LIKE_EXPAND: 'LIKE_EXPAND'; +LIKE: 'LIKE'; +LIMIT: 'LIMIT'; +LINEAR: 'LINEAR'; +LINK: 'LINK'; +LIST: 'LIST'; +LN: 'LN'; +LNNVL: 'LNNVL'; +LOAD: 'LOAD'; +LOB: 'LOB'; +LOBNVL: 'LOBNVL'; +LOBS: 'LOBS'; +LOCAL_INDEXES: 'LOCAL_INDEXES'; +LOCAL: 'LOCAL'; +LOCALTIME: 'LOCALTIME'; +LOCALTIMESTAMP: 'LOCALTIMESTAMP'; +LOCATION: 'LOCATION'; +LOCATOR: 'LOCATOR'; +LOCKED: 'LOCKED'; +LOCKING: 'LOCKING'; +LOCK: 'LOCK'; +LOGFILE: 'LOGFILE'; +LOGFILES: 'LOGFILES'; +LOGGING: 'LOGGING'; +LOGICAL: 'LOGICAL'; +LOGICAL_READS_PER_CALL: 'LOGICAL_READS_PER_CALL'; +LOGICAL_READS_PER_SESSION: 'LOGICAL_READS_PER_SESSION'; +LOG: 'LOG'; +LOGMINING: 'LOGMINING'; +LOGOFF: 'LOGOFF'; +LOGON: 'LOGON'; +LOG_READ_ONLY_VIOLATIONS: 'LOG_READ_ONLY_VIOLATIONS'; +LONG: 'LONG'; +LOOP: 'LOOP'; +LOWER: 'LOWER'; +LOW: 'LOW'; +LPAD: 'LPAD'; +LTRIM: 'LTRIM'; +MAIN: 'MAIN'; +MAKE_REF: 'MAKE_REF'; +MANAGED: 'MANAGED'; +MANAGE: 'MANAGE'; +MANAGEMENT: 'MANAGEMENT'; +MANAGER: 'MANAGER'; +MANUAL: 'MANUAL'; +MAP: 'MAP'; +MAPPING: 'MAPPING'; +MASTER: 'MASTER'; +MATCHED: 'MATCHED'; +MATCHES: 'MATCHES'; +MATCH: 'MATCH'; +MATCH_NUMBER: 'MATCH_NUMBER'; +MATCH_RECOGNIZE: 'MATCH_RECOGNIZE'; +MATERIALIZED: 'MATERIALIZED'; +MATERIALIZE: 'MATERIALIZE'; +MAXARCHLOGS: 'MAXARCHLOGS'; +MAXDATAFILES: 'MAXDATAFILES'; +MAXEXTENTS: 'MAXEXTENTS'; +MAXIMIZE: 'MAXIMIZE'; +MAXINSTANCES: 'MAXINSTANCES'; +MAXLOGFILES: 'MAXLOGFILES'; +MAXLOGHISTORY: 'MAXLOGHISTORY'; +MAXLOGMEMBERS: 'MAXLOGMEMBERS'; +MAX_SHARED_TEMP_SIZE: 'MAX_SHARED_TEMP_SIZE'; +MAXSIZE: 'MAXSIZE'; +MAXTRANS: 'MAXTRANS'; +MAXVALUE: 'MAXVALUE'; +MEASURE: 'MEASURE'; +MEASURES: 'MEASURES'; +MEDIUM: 'MEDIUM'; +MEMBER: 'MEMBER'; +MEMCOMPRESS: 'MEMCOMPRESS'; +MEMORY: 'MEMORY'; +MERGEACTIONS: 'MERGE$ACTIONS'; +MERGE_AJ: 'MERGE_AJ'; +MERGE_CONST_ON: 'MERGE_CONST_ON'; +MERGE: 'MERGE'; +MERGE_SJ: 'MERGE_SJ'; +METADATA: 'METADATA'; +METHOD: 'METHOD'; +MIGRATE: 'MIGRATE'; +MIGRATION: 'MIGRATION'; +MINEXTENTS: 'MINEXTENTS'; +MINIMIZE: 'MINIMIZE'; +MINIMUM: 'MINIMUM'; +MINING: 'MINING'; +MINUS: 'MINUS'; +MINUS_NULL: 'MINUS_NULL'; +MINUTE: 'MINUTE'; +MINVALUE: 'MINVALUE'; +MIRRORCOLD: 'MIRRORCOLD'; +MIRRORHOT: 'MIRRORHOT'; +MIRROR: 'MIRROR'; +MLSLABEL: 'MLSLABEL'; +MODEL_COMPILE_SUBQUERY: 'MODEL_COMPILE_SUBQUERY'; +MODEL_DONTVERIFY_UNIQUENESS: 'MODEL_DONTVERIFY_UNIQUENESS'; +MODEL_DYNAMIC_SUBQUERY: 'MODEL_DYNAMIC_SUBQUERY'; +MODEL_MIN_ANALYSIS: 'MODEL_MIN_ANALYSIS'; +MODEL: 'MODEL'; +MODEL_NB: 'MODEL_NB'; +MODEL_NO_ANALYSIS: 'MODEL_NO_ANALYSIS'; +MODEL_PBY: 'MODEL_PBY'; +MODEL_PUSH_REF: 'MODEL_PUSH_REF'; +MODEL_SV: 'MODEL_SV'; +MODE: 'MODE'; +MODIFICATION: 'MODIFICATION'; +MODIFY_COLUMN_TYPE: 'MODIFY_COLUMN_TYPE'; +MODIFY: 'MODIFY'; +MOD: 'MOD'; +MODULE: 'MODULE'; +MONITORING: 'MONITORING'; +MONITOR: 'MONITOR'; +MONTH: 'MONTH'; +MONTHS_BETWEEN: 'MONTHS_BETWEEN'; +MONTHS: 'MONTHS'; +MOUNT: 'MOUNT'; +MOUNTPATH: 'MOUNTPATH'; +MOVEMENT: 'MOVEMENT'; +MOVE: 'MOVE'; +MULTIDIMENSIONAL: 'MULTIDIMENSIONAL'; +MULTISET: 'MULTISET'; +MV_MERGE: 'MV_MERGE'; +NAMED: 'NAMED'; +NAME: 'NAME'; +NAMESPACE: 'NAMESPACE'; +NAN: 'NAN'; +NANVL: 'NANVL'; +NATIONAL: 'NATIONAL'; +NATIVE_FULL_OUTER_JOIN: 'NATIVE_FULL_OUTER_JOIN'; +NATIVE: 'NATIVE'; +NATURAL: 'NATURAL'; +NATURALN: 'NATURALN'; +NAV: 'NAV'; +NCHAR_CS: 'NCHAR_CS'; +NCHAR: 'NCHAR'; +NCHR: 'NCHR'; +NCLOB: 'NCLOB'; +NEEDED: 'NEEDED'; +NEG: 'NEG'; +NESTED: 'NESTED'; +NESTED_TABLE_FAST_INSERT: 'NESTED_TABLE_FAST_INSERT'; +NESTED_TABLE_GET_REFS: 'NESTED_TABLE_GET_REFS'; +NESTED_TABLE_ID: 'NESTED_TABLE_ID'; +NESTED_TABLE_SET_REFS: 'NESTED_TABLE_SET_REFS'; +NESTED_TABLE_SET_SETID: 'NESTED_TABLE_SET_SETID'; +NETWORK: 'NETWORK'; +NEVER: 'NEVER'; +NEW: 'NEW'; +NEW_TIME: 'NEW_TIME'; +NEXT_DAY: 'NEXT_DAY'; +NEXT: 'NEXT'; +NL_AJ: 'NL_AJ'; +NLJ_BATCHING: 'NLJ_BATCHING'; +NLJ_INDEX_FILTER: 'NLJ_INDEX_FILTER'; +NLJ_INDEX_SCAN: 'NLJ_INDEX_SCAN'; +NLJ_PREFETCH: 'NLJ_PREFETCH'; +NLS_CALENDAR: 'NLS_CALENDAR'; +NLS_CHARACTERSET: 'NLS_CHARACTERSET'; +NLS_CHARSET_DECL_LEN: 'NLS_CHARSET_DECL_LEN'; +NLS_CHARSET_ID: 'NLS_CHARSET_ID'; +NLS_CHARSET_NAME: 'NLS_CHARSET_NAME'; +NLS_COMP: 'NLS_COMP'; +NLS_CURRENCY: 'NLS_CURRENCY'; +NLS_DATE_FORMAT: 'NLS_DATE_FORMAT'; +NLS_DATE_LANGUAGE: 'NLS_DATE_LANGUAGE'; +NLS_INITCAP: 'NLS_INITCAP'; +NLS_ISO_CURRENCY: 'NLS_ISO_CURRENCY'; +NL_SJ: 'NL_SJ'; +NLS_LANG: 'NLS_LANG'; +NLS_LANGUAGE: 'NLS_LANGUAGE'; +NLS_LENGTH_SEMANTICS: 'NLS_LENGTH_SEMANTICS'; +NLS_LOWER: 'NLS_LOWER'; +NLS_NCHAR_CONV_EXCP: 'NLS_NCHAR_CONV_EXCP'; +NLS_NUMERIC_CHARACTERS: 'NLS_NUMERIC_CHARACTERS'; +NLS_SORT: 'NLS_SORT'; +NLSSORT: 'NLSSORT'; +NLS_SPECIAL_CHARS: 'NLS_SPECIAL_CHARS'; +NLS_TERRITORY: 'NLS_TERRITORY'; +NLS_UPPER: 'NLS_UPPER'; +NO_ACCESS: 'NO_ACCESS'; +NO_ADAPTIVE_PLAN: 'NO_ADAPTIVE_PLAN'; +NO_ANSI_REARCH: 'NO_ANSI_REARCH'; +NOAPPEND: 'NOAPPEND'; +NOARCHIVELOG: 'NOARCHIVELOG'; +NOAUDIT: 'NOAUDIT'; +NO_AUTO_REOPTIMIZE: 'NO_AUTO_REOPTIMIZE'; +NO_BASETABLE_MULTIMV_REWRITE: 'NO_BASETABLE_MULTIMV_REWRITE'; +NO_BATCH_TABLE_ACCESS_BY_ROWID: 'NO_BATCH_TABLE_ACCESS_BY_ROWID'; +NO_BIND_AWARE: 'NO_BIND_AWARE'; +NO_BUFFER: 'NO_BUFFER'; +NOCACHE: 'NOCACHE'; +NO_CARTESIAN: 'NO_CARTESIAN'; +NO_CHECK_ACL_REWRITE: 'NO_CHECK_ACL_REWRITE'; +NO_CLUSTER_BY_ROWID: 'NO_CLUSTER_BY_ROWID'; +NO_CLUSTERING: 'NO_CLUSTERING'; +NO_COALESCE_SQ: 'NO_COALESCE_SQ'; +NO_COMMON_DATA: 'NO_COMMON_DATA'; +NOCOMPRESS: 'NOCOMPRESS'; +NO_CONNECT_BY_CB_WHR_ONLY: 'NO_CONNECT_BY_CB_WHR_ONLY'; +NO_CONNECT_BY_COMBINE_SW: 'NO_CONNECT_BY_COMBINE_SW'; +NO_CONNECT_BY_COST_BASED: 'NO_CONNECT_BY_COST_BASED'; +NO_CONNECT_BY_ELIM_DUPS: 'NO_CONNECT_BY_ELIM_DUPS'; +NO_CONNECT_BY_FILTERING: 'NO_CONNECT_BY_FILTERING'; +NOCOPY: 'NOCOPY'; +NO_COST_XML_QUERY_REWRITE: 'NO_COST_XML_QUERY_REWRITE'; +NO_CPU_COSTING: 'NO_CPU_COSTING'; +NOCPU_COSTING: 'NOCPU_COSTING'; +NOCYCLE: 'NOCYCLE'; +NO_DATA_SECURITY_REWRITE: 'NO_DATA_SECURITY_REWRITE'; +NO_DECORRELATE: 'NO_DECORRELATE'; +NODELAY: 'NODELAY'; +NO_DOMAIN_INDEX_FILTER: 'NO_DOMAIN_INDEX_FILTER'; +NO_DST_UPGRADE_INSERT_CONV: 'NO_DST_UPGRADE_INSERT_CONV'; +NO_ELIM_GROUPBY: 'NO_ELIM_GROUPBY'; +NO_ELIMINATE_JOIN: 'NO_ELIMINATE_JOIN'; +NO_ELIMINATE_OBY: 'NO_ELIMINATE_OBY'; +NO_ELIMINATE_OUTER_JOIN: 'NO_ELIMINATE_OUTER_JOIN'; +NOENTITYESCAPING: 'NOENTITYESCAPING'; +NO_EXPAND_GSET_TO_UNION: 'NO_EXPAND_GSET_TO_UNION'; +NO_EXPAND: 'NO_EXPAND'; +NO_EXPAND_TABLE: 'NO_EXPAND_TABLE'; +NO_FACT: 'NO_FACT'; +NO_FACTORIZE_JOIN: 'NO_FACTORIZE_JOIN'; +NO_FILTERING: 'NO_FILTERING'; +NOFORCE: 'NOFORCE'; +NO_FULL_OUTER_JOIN_TO_OUTER: 'NO_FULL_OUTER_JOIN_TO_OUTER'; +NO_GATHER_OPTIMIZER_STATISTICS: 'NO_GATHER_OPTIMIZER_STATISTICS'; +NO_GBY_PUSHDOWN: 'NO_GBY_PUSHDOWN'; +NOGUARANTEE: 'NOGUARANTEE'; +NO_INDEX_FFS: 'NO_INDEX_FFS'; +NO_INDEX: 'NO_INDEX'; +NO_INDEX_SS: 'NO_INDEX_SS'; +NO_INMEMORY: 'NO_INMEMORY'; +NO_INMEMORY_PRUNING: 'NO_INMEMORY_PRUNING'; +NOKEEP: 'NOKEEP'; +NO_LOAD: 'NO_LOAD'; +NOLOCAL: 'NOLOCAL'; +NOLOGGING: 'NOLOGGING'; +NOMAPPING: 'NOMAPPING'; +NOMAXVALUE: 'NOMAXVALUE'; +NO_MERGE: 'NO_MERGE'; +NOMINIMIZE: 'NOMINIMIZE'; +NOMINVALUE: 'NOMINVALUE'; +NO_MODEL_PUSH_REF: 'NO_MODEL_PUSH_REF'; +NO_MONITORING: 'NO_MONITORING'; +NOMONITORING: 'NOMONITORING'; +NO_MONITOR: 'NO_MONITOR'; +NO_MULTIMV_REWRITE: 'NO_MULTIMV_REWRITE'; +NO_NATIVE_FULL_OUTER_JOIN: 'NO_NATIVE_FULL_OUTER_JOIN'; +NONBLOCKING: 'NONBLOCKING'; +NONEDITIONABLE: 'NONEDITIONABLE'; +NONE: 'NONE'; +NO_NLJ_BATCHING: 'NO_NLJ_BATCHING'; +NO_NLJ_PREFETCH: 'NO_NLJ_PREFETCH'; +NO: 'NO'; +NONSCHEMA: 'NONSCHEMA'; +NO_OBJECT_LINK: 'NO_OBJECT_LINK'; +NOORDER: 'NOORDER'; +NO_ORDER_ROLLUPS: 'NO_ORDER_ROLLUPS'; +NO_OUTER_JOIN_TO_ANTI: 'NO_OUTER_JOIN_TO_ANTI'; +NO_OUTER_JOIN_TO_INNER: 'NO_OUTER_JOIN_TO_INNER'; +NOOVERRIDE: 'NOOVERRIDE'; +NO_PARALLEL_INDEX: 'NO_PARALLEL_INDEX'; +NOPARALLEL_INDEX: 'NOPARALLEL_INDEX'; +NO_PARALLEL: 'NO_PARALLEL'; +NOPARALLEL: 'NOPARALLEL'; +NO_PARTIAL_COMMIT: 'NO_PARTIAL_COMMIT'; +NO_PARTIAL_JOIN: 'NO_PARTIAL_JOIN'; +NO_PARTIAL_ROLLUP_PUSHDOWN: 'NO_PARTIAL_ROLLUP_PUSHDOWN'; +NOPARTITION: 'NOPARTITION'; +NO_PLACE_DISTINCT: 'NO_PLACE_DISTINCT'; +NO_PLACE_GROUP_BY: 'NO_PLACE_GROUP_BY'; +NO_PQ_CONCURRENT_UNION: 'NO_PQ_CONCURRENT_UNION'; +NO_PQ_MAP: 'NO_PQ_MAP'; +NO_PQ_REPLICATE: 'NO_PQ_REPLICATE'; +NO_PQ_SKEW: 'NO_PQ_SKEW'; +NO_PRUNE_GSETS: 'NO_PRUNE_GSETS'; +NO_PULL_PRED: 'NO_PULL_PRED'; +NO_PUSH_PRED: 'NO_PUSH_PRED'; +NO_PUSH_SUBQ: 'NO_PUSH_SUBQ'; +NO_PX_FAULT_TOLERANCE: 'NO_PX_FAULT_TOLERANCE'; +NO_PX_JOIN_FILTER: 'NO_PX_JOIN_FILTER'; +NO_QKN_BUFF: 'NO_QKN_BUFF'; +NO_QUERY_TRANSFORMATION: 'NO_QUERY_TRANSFORMATION'; +NO_REF_CASCADE: 'NO_REF_CASCADE'; +NORELOCATE: 'NORELOCATE'; +NORELY: 'NORELY'; +NOREPAIR: 'NOREPAIR'; +NOREPLAY: 'NOREPLAY'; +NORESETLOGS: 'NORESETLOGS'; +NO_RESULT_CACHE: 'NO_RESULT_CACHE'; +NOREVERSE: 'NOREVERSE'; +NO_REWRITE: 'NO_REWRITE'; +NOREWRITE: 'NOREWRITE'; +NORMAL: 'NORMAL'; +NO_ROOT_SW_FOR_LOCAL: 'NO_ROOT_SW_FOR_LOCAL'; +NOROWDEPENDENCIES: 'NOROWDEPENDENCIES'; +NOSCHEMACHECK: 'NOSCHEMACHECK'; +NOSEGMENT: 'NOSEGMENT'; +NO_SEMIJOIN: 'NO_SEMIJOIN'; +NO_SEMI_TO_INNER: 'NO_SEMI_TO_INNER'; +NO_SET_TO_JOIN: 'NO_SET_TO_JOIN'; +NOSORT: 'NOSORT'; +NO_SQL_TRANSLATION: 'NO_SQL_TRANSLATION'; +NO_SQL_TUNE: 'NO_SQL_TUNE'; +NO_STAR_TRANSFORMATION: 'NO_STAR_TRANSFORMATION'; +NO_STATEMENT_QUEUING: 'NO_STATEMENT_QUEUING'; +NO_STATS_GSETS: 'NO_STATS_GSETS'; +NOSTRICT: 'NOSTRICT'; +NO_SUBQUERY_PRUNING: 'NO_SUBQUERY_PRUNING'; +NO_SUBSTRB_PAD: 'NO_SUBSTRB_PAD'; +NO_SWAP_JOIN_INPUTS: 'NO_SWAP_JOIN_INPUTS'; +NOSWITCH: 'NOSWITCH'; +NO_TABLE_LOOKUP_BY_NL: 'NO_TABLE_LOOKUP_BY_NL'; +NO_TEMP_TABLE: 'NO_TEMP_TABLE'; +NOTHING: 'NOTHING'; +NOTIFICATION: 'NOTIFICATION'; +NOT: 'NOT'; +NO_TRANSFORM_DISTINCT_AGG: 'NO_TRANSFORM_DISTINCT_AGG'; +NO_UNNEST: 'NO_UNNEST'; +NO_USE_CUBE: 'NO_USE_CUBE'; +NO_USE_HASH_AGGREGATION: 'NO_USE_HASH_AGGREGATION'; +NO_USE_HASH_GBY_FOR_PUSHDOWN: 'NO_USE_HASH_GBY_FOR_PUSHDOWN'; +NO_USE_HASH: 'NO_USE_HASH'; +NO_USE_INVISIBLE_INDEXES: 'NO_USE_INVISIBLE_INDEXES'; +NO_USE_MERGE: 'NO_USE_MERGE'; +NO_USE_NL: 'NO_USE_NL'; +NO_USE_VECTOR_AGGREGATION: 'NO_USE_VECTOR_AGGREGATION'; +NOVALIDATE: 'NOVALIDATE'; +NO_VECTOR_TRANSFORM_DIMS: 'NO_VECTOR_TRANSFORM_DIMS'; +NO_VECTOR_TRANSFORM_FACT: 'NO_VECTOR_TRANSFORM_FACT'; +NO_VECTOR_TRANSFORM: 'NO_VECTOR_TRANSFORM'; +NOWAIT: 'NOWAIT'; +NO_XDB_FASTPATH_INSERT: 'NO_XDB_FASTPATH_INSERT'; +NO_XML_DML_REWRITE: 'NO_XML_DML_REWRITE'; +NO_XMLINDEX_REWRITE_IN_SELECT: 'NO_XMLINDEX_REWRITE_IN_SELECT'; +NO_XMLINDEX_REWRITE: 'NO_XMLINDEX_REWRITE'; +NO_XML_QUERY_REWRITE: 'NO_XML_QUERY_REWRITE'; +NO_ZONEMAP: 'NO_ZONEMAP'; +NTH_VALUE: 'NTH_VALUE'; +NULLIF: 'NULLIF'; +NULL: 'NULL'; +NULLS: 'NULLS'; +NUMBER: 'NUMBER'; +NUMERIC: 'NUMERIC'; +NUM_INDEX_KEYS: 'NUM_INDEX_KEYS'; +NUMTODSINTERVAL: 'NUMTODSINTERVAL'; +NUMTOYMINTERVAL: 'NUMTOYMINTERVAL'; +NVARCHAR2: 'NVARCHAR2'; +NVL2: 'NVL2'; +OBJECT2XML: 'OBJECT2XML'; +OBJECT: 'OBJECT'; +OBJ_ID: 'OBJ_ID'; +OBJNO: 'OBJNO'; +OBJNO_REUSE: 'OBJNO_REUSE'; +OCCURENCES: 'OCCURENCES'; +OFFLINE: 'OFFLINE'; +OFF: 'OFF'; +OFFSET: 'OFFSET'; +OF: 'OF'; +OIDINDEX: 'OIDINDEX'; +OID: 'OID'; +OLAP: 'OLAP'; +OLD: 'OLD'; +OLD_PUSH_PRED: 'OLD_PUSH_PRED'; +OLS: 'OLS'; +OLTP: 'OLTP'; +OMIT: 'OMIT'; +ONE: 'ONE'; +ONLINE: 'ONLINE'; +ONLY: 'ONLY'; +ON: 'ON'; +OPAQUE: 'OPAQUE'; +OPAQUE_TRANSFORM: 'OPAQUE_TRANSFORM'; +OPAQUE_XCANONICAL: 'OPAQUE_XCANONICAL'; +OPCODE: 'OPCODE'; +OPEN: 'OPEN'; +OPERATIONS: 'OPERATIONS'; +OPERATOR: 'OPERATOR'; +OPT_ESTIMATE: 'OPT_ESTIMATE'; +OPTIMAL: 'OPTIMAL'; +OPTIMIZE: 'OPTIMIZE'; +OPTIMIZER_FEATURES_ENABLE: 'OPTIMIZER_FEATURES_ENABLE'; +OPTIMIZER_GOAL: 'OPTIMIZER_GOAL'; +OPTION: 'OPTION'; +OPT_PARAM: 'OPT_PARAM'; +ORA_BRANCH: 'ORA_BRANCH'; +ORA_CHECK_ACL: 'ORA_CHECK_ACL'; +ORA_CHECK_PRIVILEGE: 'ORA_CHECK_PRIVILEGE'; +ORA_CLUSTERING: 'ORA_CLUSTERING'; +ORADATA: 'ORADATA'; +ORADEBUG: 'ORADEBUG'; +ORA_DST_AFFECTED: 'ORA_DST_AFFECTED'; +ORA_DST_CONVERT: 'ORA_DST_CONVERT'; +ORA_DST_ERROR: 'ORA_DST_ERROR'; +ORA_GET_ACLIDS: 'ORA_GET_ACLIDS'; +ORA_GET_PRIVILEGES: 'ORA_GET_PRIVILEGES'; +ORA_HASH: 'ORA_HASH'; +ORA_INVOKING_USERID: 'ORA_INVOKING_USERID'; +ORA_INVOKING_USER: 'ORA_INVOKING_USER'; +ORA_INVOKING_XS_USER_GUID: 'ORA_INVOKING_XS_USER_GUID'; +ORA_INVOKING_XS_USER: 'ORA_INVOKING_XS_USER'; +ORA_RAWCOMPARE: 'ORA_RAWCOMPARE'; +ORA_RAWCONCAT: 'ORA_RAWCONCAT'; +ORA_ROWSCN: 'ORA_ROWSCN'; +ORA_ROWSCN_RAW: 'ORA_ROWSCN_RAW'; +ORA_ROWVERSION: 'ORA_ROWVERSION'; +ORA_TABVERSION: 'ORA_TABVERSION'; +ORA_WRITE_TIME: 'ORA_WRITE_TIME'; +ORDERED: 'ORDERED'; +ORDERED_PREDICATES: 'ORDERED_PREDICATES'; +ORDER: 'ORDER'; +ORDINALITY: 'ORDINALITY'; +OR_EXPAND: 'OR_EXPAND'; +ORGANIZATION: 'ORGANIZATION'; +OR: 'OR'; +OR_PREDICATES: 'OR_PREDICATES'; +OSERROR: 'OSERROR'; +OTHER: 'OTHER'; +OUTER_JOIN_TO_ANTI: 'OUTER_JOIN_TO_ANTI'; +OUTER_JOIN_TO_INNER: 'OUTER_JOIN_TO_INNER'; +OUTER: 'OUTER'; +OUTLINE_LEAF: 'OUTLINE_LEAF'; +OUTLINE: 'OUTLINE'; +OUT_OF_LINE: 'OUT_OF_LINE'; +OUT: 'OUT'; +OVERFLOW_NOMOVE: 'OVERFLOW_NOMOVE'; +OVERFLOW: 'OVERFLOW'; +OVERLAPS: 'OVERLAPS'; +OVER: 'OVER'; +OVERRIDING: 'OVERRIDING'; +OWNER: 'OWNER'; +OWNERSHIP: 'OWNERSHIP'; +OWN: 'OWN'; +PACKAGE: 'PACKAGE'; +PACKAGES: 'PACKAGES'; +PARALLEL_ENABLE: 'PARALLEL_ENABLE'; +PARALLEL_INDEX: 'PARALLEL_INDEX'; +PARALLEL: 'PARALLEL'; +PARAMETERS: 'PARAMETERS'; +PARAM: 'PARAM'; +PARENT: 'PARENT'; +PARITY: 'PARITY'; +PARTIAL_JOIN: 'PARTIAL_JOIN'; +PARTIALLY: 'PARTIALLY'; +PARTIAL: 'PARTIAL'; +PARTIAL_ROLLUP_PUSHDOWN: 'PARTIAL_ROLLUP_PUSHDOWN'; +PARTITION_HASH: 'PARTITION_HASH'; +PARTITION_LIST: 'PARTITION_LIST'; +PARTITION: 'PARTITION'; +PARTITION_RANGE: 'PARTITION_RANGE'; +PARTITIONS: 'PARTITIONS'; +PARTNUMINST: 'PART$NUM$INST'; +PASSING: 'PASSING'; +PASSWORD_GRACE_TIME: 'PASSWORD_GRACE_TIME'; +PASSWORD_LIFE_TIME: 'PASSWORD_LIFE_TIME'; +PASSWORD_LOCK_TIME: 'PASSWORD_LOCK_TIME'; +PASSWORD: 'PASSWORD'; +PASSWORD_REUSE_MAX: 'PASSWORD_REUSE_MAX'; +PASSWORD_REUSE_TIME: 'PASSWORD_REUSE_TIME'; +PASSWORD_VERIFY_FUNCTION: 'PASSWORD_VERIFY_FUNCTION'; +PAST: 'PAST'; +PATCH: 'PATCH'; +PATH: 'PATH'; +PATH_PREFIX: 'PATH_PREFIX'; +PATHS: 'PATHS'; +PATTERN: 'PATTERN'; +PBL_HS_BEGIN: 'PBL_HS_BEGIN'; +PBL_HS_END: 'PBL_HS_END'; +PCTFREE: 'PCTFREE'; +PCTINCREASE: 'PCTINCREASE'; +PCTTHRESHOLD: 'PCTTHRESHOLD'; +PCTUSED: 'PCTUSED'; +PCTVERSION: 'PCTVERSION'; +PENDING: 'PENDING'; +PERCENT_FOUND: '%FOUND'; +PERCENT_ISOPEN: '%ISOPEN'; +PERCENT_NOTFOUND: '%NOTFOUND'; +PERCENT_KEYWORD: 'PERCENT'; +PERCENT_RANKM: 'PERCENT_RANKM'; +PERCENT_ROWCOUNT: '%ROWCOUNT'; +PERCENT_ROWTYPE: '%ROWTYPE'; +PERCENT_TYPE: '%TYPE'; +PERFORMANCE: 'PERFORMANCE'; +PERIOD_KEYWORD: 'PERIOD'; +PERMANENT: 'PERMANENT'; +PERMISSION: 'PERMISSION'; +PERMUTE: 'PERMUTE'; +PER: 'PER'; +PFILE: 'PFILE'; +PHYSICAL: 'PHYSICAL'; +PIKEY: 'PIKEY'; +PIPELINED: 'PIPELINED'; +PIPE: 'PIPE'; +PIV_GB: 'PIV_GB'; +PIVOT: 'PIVOT'; +PIV_SSF: 'PIV_SSF'; +PLACE_DISTINCT: 'PLACE_DISTINCT'; +PLACE_GROUP_BY: 'PLACE_GROUP_BY'; +PLAN: 'PLAN'; +PLSCOPE_SETTINGS: 'PLSCOPE_SETTINGS'; +PLS_INTEGER: 'PLS_INTEGER'; +PLSQL_CCFLAGS: 'PLSQL_CCFLAGS'; +PLSQL_CODE_TYPE: 'PLSQL_CODE_TYPE'; +PLSQL_DEBUG: 'PLSQL_DEBUG'; +PLSQL_OPTIMIZE_LEVEL: 'PLSQL_OPTIMIZE_LEVEL'; +PLSQL_WARNINGS: 'PLSQL_WARNINGS'; +PLUGGABLE: 'PLUGGABLE'; +POINT: 'POINT'; +POLICY: 'POLICY'; +POOL_16K: 'POOL_16K'; +POOL_2K: 'POOL_2K'; +POOL_32K: 'POOL_32K'; +POOL_4K: 'POOL_4K'; +POOL_8K: 'POOL_8K'; +POSITIVEN: 'POSITIVEN'; +POSITIVE: 'POSITIVE'; +POST_TRANSACTION: 'POST_TRANSACTION'; +POWERMULTISET_BY_CARDINALITY: 'POWERMULTISET_BY_CARDINALITY'; +POWERMULTISET: 'POWERMULTISET'; +POWER: 'POWER'; +PQ_CONCURRENT_UNION: 'PQ_CONCURRENT_UNION'; +PQ_DISTRIBUTE: 'PQ_DISTRIBUTE'; +PQ_DISTRIBUTE_WINDOW: 'PQ_DISTRIBUTE_WINDOW'; +PQ_FILTER: 'PQ_FILTER'; +PQ_MAP: 'PQ_MAP'; +PQ_NOMAP: 'PQ_NOMAP'; +PQ_REPLICATE: 'PQ_REPLICATE'; +PQ_SKEW: 'PQ_SKEW'; +PRAGMA: 'PRAGMA'; +PREBUILT: 'PREBUILT'; +PRECEDES: 'PRECEDES'; +PRECEDING: 'PRECEDING'; +PRECISION: 'PRECISION'; +PRECOMPUTE_SUBQUERY: 'PRECOMPUTE_SUBQUERY'; +PREDICATE_REORDERS: 'PREDICATE_REORDERS'; +PRELOAD: 'PRELOAD'; +PREPARE: 'PREPARE'; +PRESENTNNV: 'PRESENTNNV'; +PRESENT: 'PRESENT'; +PRESENTV: 'PRESENTV'; +PRESERVE_OID: 'PRESERVE_OID'; +PRESERVE: 'PRESERVE'; +PRETTY: 'PRETTY'; +PREVIOUS: 'PREVIOUS'; +PREV: 'PREV'; +PRIMARY: 'PRIMARY'; +PRINTBLOBTOCLOB: 'PRINTBLOBTOCLOB'; +PRIORITY: 'PRIORITY'; +PRIOR: 'PRIOR'; +PRIVATE: 'PRIVATE'; +PRIVATE_SGA: 'PRIVATE_SGA'; +PRIVILEGED: 'PRIVILEGED'; +PRIVILEGE: 'PRIVILEGE'; +PRIVILEGES: 'PRIVILEGES'; +PROCEDURAL: 'PROCEDURAL'; +PROCEDURE: 'PROCEDURE'; +PROCESS: 'PROCESS'; +PROFILE: 'PROFILE'; +PROGRAM: 'PROGRAM'; +PROJECT: 'PROJECT'; +PROPAGATE: 'PROPAGATE'; +PROTECTED: 'PROTECTED'; +PROTECTION: 'PROTECTION'; +PROXY: 'PROXY'; +PRUNING: 'PRUNING'; +PUBLIC: 'PUBLIC'; +PULL_PRED: 'PULL_PRED'; +PURGE: 'PURGE'; +PUSH_PRED: 'PUSH_PRED'; +PUSH_SUBQ: 'PUSH_SUBQ'; +PX_FAULT_TOLERANCE: 'PX_FAULT_TOLERANCE'; +PX_GRANULE: 'PX_GRANULE'; +PX_JOIN_FILTER: 'PX_JOIN_FILTER'; +QB_NAME: 'QB_NAME'; +QUERY_BLOCK: 'QUERY_BLOCK'; +QUERY: 'QUERY'; +QUEUE_CURR: 'QUEUE_CURR'; +QUEUE: 'QUEUE'; +QUEUE_ROWP: 'QUEUE_ROWP'; +QUIESCE: 'QUIESCE'; +QUORUM: 'QUORUM'; +QUOTA: 'QUOTA'; +RAISE: 'RAISE'; +RANDOM_LOCAL: 'RANDOM_LOCAL'; +RANDOM: 'RANDOM'; +RANGE: 'RANGE'; +RANKM: 'RANKM'; +RAPIDLY: 'RAPIDLY'; +RAW: 'RAW'; +RAWTOHEX: 'RAWTOHEX'; +RAWTONHEX: 'RAWTONHEX'; +RBA: 'RBA'; +RBO_OUTLINE: 'RBO_OUTLINE'; +RDBA: 'RDBA'; +READ: 'READ'; +READS: 'READS'; +REALM: 'REALM'; +REAL: 'REAL'; +REBALANCE: 'REBALANCE'; +REBUILD: 'REBUILD'; +RECORD: 'RECORD'; +RECORDS_PER_BLOCK: 'RECORDS_PER_BLOCK'; +RECOVERABLE: 'RECOVERABLE'; +RECOVER: 'RECOVER'; +RECOVERY: 'RECOVERY'; +RECYCLEBIN: 'RECYCLEBIN'; +RECYCLE: 'RECYCLE'; +REDACTION: 'REDACTION'; +REDEFINE: 'REDEFINE'; +REDO: 'REDO'; +REDUCED: 'REDUCED'; +REDUNDANCY: 'REDUNDANCY'; +REF_CASCADE_CURSOR: 'REF_CASCADE_CURSOR'; +REFERENCED: 'REFERENCED'; +REFERENCE: 'REFERENCE'; +REFERENCES: 'REFERENCES'; +REFERENCING: 'REFERENCING'; +REF: 'REF'; +REFRESH: 'REFRESH'; +REFTOHEX: 'REFTOHEX'; +REGEXP_COUNT: 'REGEXP_COUNT'; +REGEXP_INSTR: 'REGEXP_INSTR'; +REGEXP_LIKE: 'REGEXP_LIKE'; +REGEXP_REPLACE: 'REGEXP_REPLACE'; +REGEXP_SUBSTR: 'REGEXP_SUBSTR'; +REGISTER: 'REGISTER'; +REGR_AVGX: 'REGR_AVGX'; +REGR_AVGY: 'REGR_AVGY'; +REGR_COUNT: 'REGR_COUNT'; +REGR_INTERCEPT: 'REGR_INTERCEPT'; +REGR_R2: 'REGR_R2'; +REGR_SLOPE: 'REGR_SLOPE'; +REGR_SXX: 'REGR_SXX'; +REGR_SXY: 'REGR_SXY'; +REGR_SYY: 'REGR_SYY'; +REGULAR: 'REGULAR'; +REJECT: 'REJECT'; +REKEY: 'REKEY'; +RELATIONAL: 'RELATIONAL'; +RELIES_ON: 'RELIES_ON'; +RELOCATE: 'RELOCATE'; +RELY: 'RELY'; +REMAINDER: 'REMAINDER'; +REMOTE_MAPPED: 'REMOTE_MAPPED'; +REMOVE: 'REMOVE'; +RENAME: 'RENAME'; +REPAIR: 'REPAIR'; +REPEAT: 'REPEAT'; +REPLACE: 'REPLACE'; +REPLICATION: 'REPLICATION'; +REQUIRED: 'REQUIRED'; +RESETLOGS: 'RESETLOGS'; +RESET: 'RESET'; +RESIZE: 'RESIZE'; +RESOLVE: 'RESOLVE'; +RESOLVER: 'RESOLVER'; +RESOURCE: 'RESOURCE'; +RESPECT: 'RESPECT'; +RESTART: 'RESTART'; +RESTORE_AS_INTERVALS: 'RESTORE_AS_INTERVALS'; +RESTORE: 'RESTORE'; +RESTRICT_ALL_REF_CONS: 'RESTRICT_ALL_REF_CONS'; +RESTRICTED: 'RESTRICTED'; +RESTRICT_REFERENCES: 'RESTRICT_REFERENCES'; +RESTRICT: 'RESTRICT'; +RESULT_CACHE: 'RESULT_CACHE'; +RESULT: 'RESULT'; +RESUMABLE: 'RESUMABLE'; +RESUME: 'RESUME'; +RETENTION: 'RETENTION'; +RETRY_ON_ROW_CHANGE: 'RETRY_ON_ROW_CHANGE'; +RETURNING: 'RETURNING'; +RETURN: 'RETURN'; +REUSE: 'REUSE'; +REVERSE: 'REVERSE'; +REVOKE: 'REVOKE'; +REWRITE_OR_ERROR: 'REWRITE_OR_ERROR'; +REWRITE: 'REWRITE'; +RIGHT: 'RIGHT'; +ROLE: 'ROLE'; +ROLESET: 'ROLESET'; +ROLES: 'ROLES'; +ROLLBACK: 'ROLLBACK'; +ROLLING: 'ROLLING'; +ROLLUP: 'ROLLUP'; +ROWDEPENDENCIES: 'ROWDEPENDENCIES'; +ROWID_MAPPING_TABLE: 'ROWID_MAPPING_TABLE'; +ROWID: 'ROWID'; +ROWIDTOCHAR: 'ROWIDTOCHAR'; +ROWIDTONCHAR: 'ROWIDTONCHAR'; +ROW_LENGTH: 'ROW_LENGTH'; +ROWNUM: 'ROWNUM'; +ROW: 'ROW'; +ROWS: 'ROWS'; +RPAD: 'RPAD'; +RTRIM: 'RTRIM'; +RULE: 'RULE'; +RULES: 'RULES'; +RUNNING: 'RUNNING'; +SALT: 'SALT'; +SAMPLE: 'SAMPLE'; +SAVE_AS_INTERVALS: 'SAVE_AS_INTERVALS'; +SAVEPOINT: 'SAVEPOINT'; +SAVE: 'SAVE'; +SB4: 'SB4'; +SCALE_ROWS: 'SCALE_ROWS'; +SCALE: 'SCALE'; +SCAN_INSTANCES: 'SCAN_INSTANCES'; +SCAN: 'SCAN'; +SCHEDULER: 'SCHEDULER'; +SCHEMACHECK: 'SCHEMACHECK'; +SCHEMA: 'SCHEMA'; +SCN_ASCENDING: 'SCN_ASCENDING'; +SCN: 'SCN'; +SCOPE: 'SCOPE'; +SCRUB: 'SCRUB'; +SD_ALL: 'SD_ALL'; +SD_INHIBIT: 'SD_INHIBIT'; +SDO_GEOM_MBR: 'SDO_GEOM_MBR'; +SD_SHOW: 'SD_SHOW'; +SEARCH: 'SEARCH'; +SECOND: 'SECOND'; +SECRET: 'SECRET'; +SECUREFILE_DBA: 'SECUREFILE_DBA'; +SECUREFILE: 'SECUREFILE'; +SECURITY: 'SECURITY'; +SEED: 'SEED'; +SEG_BLOCK: 'SEG_BLOCK'; +SEG_FILE: 'SEG_FILE'; +SEGMENT: 'SEGMENT'; +SELECTIVITY: 'SELECTIVITY'; +SELECT: 'SELECT'; +SELF: 'SELF'; +SEMIJOIN_DRIVER: 'SEMIJOIN_DRIVER'; +SEMIJOIN: 'SEMIJOIN'; +SEMI_TO_INNER: 'SEMI_TO_INNER'; +SEQUENCED: 'SEQUENCED'; +SEQUENCE: 'SEQUENCE'; +SEQUENTIAL: 'SEQUENTIAL'; +SERIALIZABLE: 'SERIALIZABLE'; +SERIALLY_REUSABLE: 'SERIALLY_REUSABLE'; +SERIAL: 'SERIAL'; +SERVERERROR: 'SERVERERROR'; +SERVICE_NAME_CONVERT: 'SERVICE_NAME_CONVERT'; +SERVICES: 'SERVICES'; +SESSION_CACHED_CURSORS: 'SESSION_CACHED_CURSORS'; +SESSION: 'SESSION'; +SESSIONS_PER_USER: 'SESSIONS_PER_USER'; +SESSIONTIMEZONE: 'SESSIONTIMEZONE'; +SESSIONTZNAME: 'SESSIONTZNAME'; +SET: 'SET'; +SETS: 'SETS'; +SETTINGS: 'SETTINGS'; +SET_TO_JOIN: 'SET_TO_JOIN'; +SEVERE: 'SEVERE'; +SHARED_POOL: 'SHARED_POOL'; +SHARED: 'SHARED'; +SHARE: 'SHARE'; +SHARING: 'SHARING'; +SHELFLIFE: 'SHELFLIFE'; +SHOW: 'SHOW'; +SHRINK: 'SHRINK'; +SHUTDOWN: 'SHUTDOWN'; +SIBLINGS: 'SIBLINGS'; +SID: 'SID'; +SIGNAL_COMPONENT: 'SIGNAL_COMPONENT'; +SIGNAL_FUNCTION: 'SIGNAL_FUNCTION'; +SIGN: 'SIGN'; +SIGNTYPE: 'SIGNTYPE'; +SIMPLE_INTEGER: 'SIMPLE_INTEGER'; +SIMPLE: 'SIMPLE'; +SINGLE: 'SINGLE'; +SINGLETASK: 'SINGLETASK'; +SINH: 'SINH'; +SIN: 'SIN'; +SIZE: 'SIZE'; +SKIP_EXT_OPTIMIZER: 'SKIP_EXT_OPTIMIZER'; +SKIP_ : 'SKIP'; +SKIP_UNQ_UNUSABLE_IDX: 'SKIP_UNQ_UNUSABLE_IDX'; +SKIP_UNUSABLE_INDEXES: 'SKIP_UNUSABLE_INDEXES'; +SMALLFILE: 'SMALLFILE'; +SMALLINT: 'SMALLINT'; +SNAPSHOT: 'SNAPSHOT'; +SOME: 'SOME'; +SORT: 'SORT'; +SOUNDEX: 'SOUNDEX'; +SOURCE_FILE_DIRECTORY: 'SOURCE_FILE_DIRECTORY'; +SOURCE_FILE_NAME_CONVERT: 'SOURCE_FILE_NAME_CONVERT'; +SOURCE: 'SOURCE'; +SPACE_KEYWORD: 'SPACE'; +SPECIFICATION: 'SPECIFICATION'; +SPFILE: 'SPFILE'; +SPLIT: 'SPLIT'; +SPREADSHEET: 'SPREADSHEET'; +SQLDATA: 'SQLDATA'; +SQLERROR: 'SQLERROR'; +SQLLDR: 'SQLLDR'; +SQL: 'SQL'; +SQL_TRACE: 'SQL_TRACE'; +SQL_TRANSLATION_PROFILE: 'SQL_TRANSLATION_PROFILE'; +SQRT: 'SQRT'; +STALE: 'STALE'; +STANDALONE: 'STANDALONE'; +STANDARD_HASH: 'STANDARD_HASH'; +STANDBY_MAX_DATA_DELAY: 'STANDBY_MAX_DATA_DELAY'; +STANDBYS: 'STANDBYS'; +STANDBY: 'STANDBY'; +STAR: 'STAR'; +STAR_TRANSFORMATION: 'STAR_TRANSFORMATION'; +START: 'START'; +STARTUP: 'STARTUP'; +STATEMENT_ID: 'STATEMENT_ID'; +STATEMENT_QUEUING: 'STATEMENT_QUEUING'; +STATEMENTS: 'STATEMENTS'; +STATEMENT: 'STATEMENT'; +STATE: 'STATE'; +STATIC: 'STATIC'; +STATISTICS: 'STATISTICS'; +STATS_BINOMIAL_TEST: 'STATS_BINOMIAL_TEST'; +STATS_CROSSTAB: 'STATS_CROSSTAB'; +STATS_F_TEST: 'STATS_F_TEST'; +STATS_KS_TEST: 'STATS_KS_TEST'; +STATS_MODE: 'STATS_MODE'; +STATS_MW_TEST: 'STATS_MW_TEST'; +STATS_ONE_WAY_ANOVA: 'STATS_ONE_WAY_ANOVA'; +STATS_T_TEST_INDEP: 'STATS_T_TEST_INDEP'; +STATS_T_TEST_INDEPU: 'STATS_T_TEST_INDEPU'; +STATS_T_TEST_ONE: 'STATS_T_TEST_ONE'; +STATS_T_TEST_PAIRED: 'STATS_T_TEST_PAIRED'; +STATS_WSR_TEST: 'STATS_WSR_TEST'; +STDDEV_POP: 'STDDEV_POP'; +STDDEV_SAMP: 'STDDEV_SAMP'; +STOP: 'STOP'; +STORAGE: 'STORAGE'; +STORE: 'STORE'; +STREAMS: 'STREAMS'; +STREAM: 'STREAM'; +STRICT: 'STRICT'; +STRING: 'STRING'; +STRIPE_COLUMNS: 'STRIPE_COLUMNS'; +STRIPE_WIDTH: 'STRIPE_WIDTH'; +STRIP: 'STRIP'; +STRUCTURE: 'STRUCTURE'; +SUBMULTISET: 'SUBMULTISET'; +SUBPARTITION_REL: 'SUBPARTITION_REL'; +SUBPARTITIONS: 'SUBPARTITIONS'; +SUBPARTITION: 'SUBPARTITION'; +SUBQUERIES: 'SUBQUERIES'; +SUBQUERY_PRUNING: 'SUBQUERY_PRUNING'; +SUBSCRIBE: 'SUBSCRIBE'; +SUBSET: 'SUBSET'; +SUBSTITUTABLE: 'SUBSTITUTABLE'; +SUBSTR2: 'SUBSTR2'; +SUBSTR4: 'SUBSTR4'; +SUBSTRB: 'SUBSTRB'; +SUBSTRC: 'SUBSTRC'; +SUBTYPE: 'SUBTYPE'; +SUCCESSFUL: 'SUCCESSFUL'; +SUCCESS: 'SUCCESS'; +SUMMARY: 'SUMMARY'; +SUPPLEMENTAL: 'SUPPLEMENTAL'; +SUSPEND: 'SUSPEND'; +SWAP_JOIN_INPUTS: 'SWAP_JOIN_INPUTS'; +SWITCHOVER: 'SWITCHOVER'; +SWITCH: 'SWITCH'; +SYNCHRONOUS: 'SYNCHRONOUS'; +SYNC: 'SYNC'; +SYNONYM: 'SYNONYM'; +SYSASM: 'SYSASM'; +SYS_AUDIT: 'SYS_AUDIT'; +SYSAUX: 'SYSAUX'; +SYSBACKUP: 'SYSBACKUP'; +SYS_CHECKACL: 'SYS_CHECKACL'; +SYS_CHECK_PRIVILEGE: 'SYS_CHECK_PRIVILEGE'; +SYS_CONNECT_BY_PATH: 'SYS_CONNECT_BY_PATH'; +SYS_CONTEXT: 'SYS_CONTEXT'; +SYSDATE: 'SYSDATE'; +SYSDBA: 'SYSDBA'; +SYS_DBURIGEN: 'SYS_DBURIGEN'; +SYSDG: 'SYSDG'; +SYS_DL_CURSOR: 'SYS_DL_CURSOR'; +SYS_DM_RXFORM_CHR: 'SYS_DM_RXFORM_CHR'; +SYS_DM_RXFORM_NUM: 'SYS_DM_RXFORM_NUM'; +SYS_DOM_COMPARE: 'SYS_DOM_COMPARE'; +SYS_DST_PRIM2SEC: 'SYS_DST_PRIM2SEC'; +SYS_DST_SEC2PRIM: 'SYS_DST_SEC2PRIM'; +SYS_ET_BFILE_TO_RAW: 'SYS_ET_BFILE_TO_RAW'; +SYS_ET_BLOB_TO_IMAGE: 'SYS_ET_BLOB_TO_IMAGE'; +SYS_ET_IMAGE_TO_BLOB: 'SYS_ET_IMAGE_TO_BLOB'; +SYS_ET_RAW_TO_BFILE: 'SYS_ET_RAW_TO_BFILE'; +SYS_EXTPDTXT: 'SYS_EXTPDTXT'; +SYS_EXTRACT_UTC: 'SYS_EXTRACT_UTC'; +SYS_FBT_INSDEL: 'SYS_FBT_INSDEL'; +SYS_FILTER_ACLS: 'SYS_FILTER_ACLS'; +SYS_FNMATCHES: 'SYS_FNMATCHES'; +SYS_FNREPLACE: 'SYS_FNREPLACE'; +SYS_GET_ACLIDS: 'SYS_GET_ACLIDS'; +SYS_GET_COL_ACLIDS: 'SYS_GET_COL_ACLIDS'; +SYS_GET_PRIVILEGES: 'SYS_GET_PRIVILEGES'; +SYS_GETTOKENID: 'SYS_GETTOKENID'; +SYS_GETXTIVAL: 'SYS_GETXTIVAL'; +SYS_GUID: 'SYS_GUID'; +SYSGUID: 'SYSGUID'; +SYSKM: 'SYSKM'; +SYS_MAKE_XMLNODEID: 'SYS_MAKE_XMLNODEID'; +SYS_MAKEXML: 'SYS_MAKEXML'; +SYS_MKXMLATTR: 'SYS_MKXMLATTR'; +SYS_MKXTI: 'SYS_MKXTI'; +SYSOBJ: 'SYSOBJ'; +SYS_OP_ADT2BIN: 'SYS_OP_ADT2BIN'; +SYS_OP_ADTCONS: 'SYS_OP_ADTCONS'; +SYS_OP_ALSCRVAL: 'SYS_OP_ALSCRVAL'; +SYS_OP_ATG: 'SYS_OP_ATG'; +SYS_OP_BIN2ADT: 'SYS_OP_BIN2ADT'; +SYS_OP_BITVEC: 'SYS_OP_BITVEC'; +SYS_OP_BL2R: 'SYS_OP_BL2R'; +SYS_OP_BLOOM_FILTER_LIST: 'SYS_OP_BLOOM_FILTER_LIST'; +SYS_OP_BLOOM_FILTER: 'SYS_OP_BLOOM_FILTER'; +SYS_OP_C2C: 'SYS_OP_C2C'; +SYS_OP_CAST: 'SYS_OP_CAST'; +SYS_OP_CEG: 'SYS_OP_CEG'; +SYS_OP_CL2C: 'SYS_OP_CL2C'; +SYS_OP_COMBINED_HASH: 'SYS_OP_COMBINED_HASH'; +SYS_OP_COMP: 'SYS_OP_COMP'; +SYS_OP_CONVERT: 'SYS_OP_CONVERT'; +SYS_OP_COUNTCHG: 'SYS_OP_COUNTCHG'; +SYS_OP_CSCONV: 'SYS_OP_CSCONV'; +SYS_OP_CSCONVTEST: 'SYS_OP_CSCONVTEST'; +SYS_OP_CSR: 'SYS_OP_CSR'; +SYS_OP_CSX_PATCH: 'SYS_OP_CSX_PATCH'; +SYS_OP_CYCLED_SEQ: 'SYS_OP_CYCLED_SEQ'; +SYS_OP_DECOMP: 'SYS_OP_DECOMP'; +SYS_OP_DESCEND: 'SYS_OP_DESCEND'; +SYS_OP_DISTINCT: 'SYS_OP_DISTINCT'; +SYS_OP_DRA: 'SYS_OP_DRA'; +SYS_OP_DUMP: 'SYS_OP_DUMP'; +SYS_OP_DV_CHECK: 'SYS_OP_DV_CHECK'; +SYS_OP_ENFORCE_NOT_NULL: 'SYS_OP_ENFORCE_NOT_NULL$'; +SYSOPER: 'SYSOPER'; +SYS_OP_EXTRACT: 'SYS_OP_EXTRACT'; +SYS_OP_GROUPING: 'SYS_OP_GROUPING'; +SYS_OP_GUID: 'SYS_OP_GUID'; +SYS_OP_HASH: 'SYS_OP_HASH'; +SYS_OP_IIX: 'SYS_OP_IIX'; +SYS_OP_ITR: 'SYS_OP_ITR'; +SYS_OP_KEY_VECTOR_CREATE: 'SYS_OP_KEY_VECTOR_CREATE'; +SYS_OP_KEY_VECTOR_FILTER_LIST: 'SYS_OP_KEY_VECTOR_FILTER_LIST'; +SYS_OP_KEY_VECTOR_FILTER: 'SYS_OP_KEY_VECTOR_FILTER'; +SYS_OP_KEY_VECTOR_SUCCEEDED: 'SYS_OP_KEY_VECTOR_SUCCEEDED'; +SYS_OP_KEY_VECTOR_USE: 'SYS_OP_KEY_VECTOR_USE'; +SYS_OP_LBID: 'SYS_OP_LBID'; +SYS_OP_LOBLOC2BLOB: 'SYS_OP_LOBLOC2BLOB'; +SYS_OP_LOBLOC2CLOB: 'SYS_OP_LOBLOC2CLOB'; +SYS_OP_LOBLOC2ID: 'SYS_OP_LOBLOC2ID'; +SYS_OP_LOBLOC2NCLOB: 'SYS_OP_LOBLOC2NCLOB'; +SYS_OP_LOBLOC2TYP: 'SYS_OP_LOBLOC2TYP'; +SYS_OP_LSVI: 'SYS_OP_LSVI'; +SYS_OP_LVL: 'SYS_OP_LVL'; +SYS_OP_MAKEOID: 'SYS_OP_MAKEOID'; +SYS_OP_MAP_NONNULL: 'SYS_OP_MAP_NONNULL'; +SYS_OP_MSR: 'SYS_OP_MSR'; +SYS_OP_NICOMBINE: 'SYS_OP_NICOMBINE'; +SYS_OP_NIEXTRACT: 'SYS_OP_NIEXTRACT'; +SYS_OP_NII: 'SYS_OP_NII'; +SYS_OP_NIX: 'SYS_OP_NIX'; +SYS_OP_NOEXPAND: 'SYS_OP_NOEXPAND'; +SYS_OP_NTCIMG: 'SYS_OP_NTCIMG$'; +SYS_OP_NUMTORAW: 'SYS_OP_NUMTORAW'; +SYS_OP_OIDVALUE: 'SYS_OP_OIDVALUE'; +SYS_OP_OPNSIZE: 'SYS_OP_OPNSIZE'; +SYS_OP_PAR_1: 'SYS_OP_PAR_1'; +SYS_OP_PARGID_1: 'SYS_OP_PARGID_1'; +SYS_OP_PARGID: 'SYS_OP_PARGID'; +SYS_OP_PAR: 'SYS_OP_PAR'; +SYS_OP_PART_ID: 'SYS_OP_PART_ID'; +SYS_OP_PIVOT: 'SYS_OP_PIVOT'; +SYS_OP_R2O: 'SYS_OP_R2O'; +SYS_OP_RAWTONUM: 'SYS_OP_RAWTONUM'; +SYS_OP_RDTM: 'SYS_OP_RDTM'; +SYS_OP_REF: 'SYS_OP_REF'; +SYS_OP_RMTD: 'SYS_OP_RMTD'; +SYS_OP_ROWIDTOOBJ: 'SYS_OP_ROWIDTOOBJ'; +SYS_OP_RPB: 'SYS_OP_RPB'; +SYS_OPTLOBPRBSC: 'SYS_OPTLOBPRBSC'; +SYS_OP_TOSETID: 'SYS_OP_TOSETID'; +SYS_OP_TPR: 'SYS_OP_TPR'; +SYS_OP_TRTB: 'SYS_OP_TRTB'; +SYS_OPTXICMP: 'SYS_OPTXICMP'; +SYS_OPTXQCASTASNQ: 'SYS_OPTXQCASTASNQ'; +SYS_OP_UNDESCEND: 'SYS_OP_UNDESCEND'; +SYS_OP_VECAND: 'SYS_OP_VECAND'; +SYS_OP_VECBIT: 'SYS_OP_VECBIT'; +SYS_OP_VECOR: 'SYS_OP_VECOR'; +SYS_OP_VECXOR: 'SYS_OP_VECXOR'; +SYS_OP_VERSION: 'SYS_OP_VERSION'; +SYS_OP_VREF: 'SYS_OP_VREF'; +SYS_OP_VVD: 'SYS_OP_VVD'; +SYS_OP_XMLCONS_FOR_CSX: 'SYS_OP_XMLCONS_FOR_CSX'; +SYS_OP_XPTHATG: 'SYS_OP_XPTHATG'; +SYS_OP_XPTHIDX: 'SYS_OP_XPTHIDX'; +SYS_OP_XPTHOP: 'SYS_OP_XPTHOP'; +SYS_OP_XTXT2SQLT: 'SYS_OP_XTXT2SQLT'; +SYS_OP_ZONE_ID: 'SYS_OP_ZONE_ID'; +SYS_ORDERKEY_DEPTH: 'SYS_ORDERKEY_DEPTH'; +SYS_ORDERKEY_MAXCHILD: 'SYS_ORDERKEY_MAXCHILD'; +SYS_ORDERKEY_PARENT: 'SYS_ORDERKEY_PARENT'; +SYS_PARALLEL_TXN: 'SYS_PARALLEL_TXN'; +SYS_PATHID_IS_ATTR: 'SYS_PATHID_IS_ATTR'; +SYS_PATHID_IS_NMSPC: 'SYS_PATHID_IS_NMSPC'; +SYS_PATHID_LASTNAME: 'SYS_PATHID_LASTNAME'; +SYS_PATHID_LASTNMSPC: 'SYS_PATHID_LASTNMSPC'; +SYS_PATH_REVERSE: 'SYS_PATH_REVERSE'; +SYS_PXQEXTRACT: 'SYS_PXQEXTRACT'; +SYS_RAW_TO_XSID: 'SYS_RAW_TO_XSID'; +SYS_RID_ORDER: 'SYS_RID_ORDER'; +SYS_ROW_DELTA: 'SYS_ROW_DELTA'; +SYS_SC_2_XMLT: 'SYS_SC_2_XMLT'; +SYS_SYNRCIREDO: 'SYS_SYNRCIREDO'; +SYSTEM_DEFINED: 'SYSTEM_DEFINED'; +SYSTEM: 'SYSTEM'; +SYSTIMESTAMP: 'SYSTIMESTAMP'; +SYS_TYPEID: 'SYS_TYPEID'; +SYS_UMAKEXML: 'SYS_UMAKEXML'; +SYS_XMLANALYZE: 'SYS_XMLANALYZE'; +SYS_XMLCONTAINS: 'SYS_XMLCONTAINS'; +SYS_XMLCONV: 'SYS_XMLCONV'; +SYS_XMLEXNSURI: 'SYS_XMLEXNSURI'; +SYS_XMLGEN: 'SYS_XMLGEN'; +SYS_XMLI_LOC_ISNODE: 'SYS_XMLI_LOC_ISNODE'; +SYS_XMLI_LOC_ISTEXT: 'SYS_XMLI_LOC_ISTEXT'; +SYS_XMLINSTR: 'SYS_XMLINSTR'; +SYS_XMLLOCATOR_GETSVAL: 'SYS_XMLLOCATOR_GETSVAL'; +SYS_XMLNODEID_GETCID: 'SYS_XMLNODEID_GETCID'; +SYS_XMLNODEID_GETLOCATOR: 'SYS_XMLNODEID_GETLOCATOR'; +SYS_XMLNODEID_GETOKEY: 'SYS_XMLNODEID_GETOKEY'; +SYS_XMLNODEID_GETPATHID: 'SYS_XMLNODEID_GETPATHID'; +SYS_XMLNODEID_GETPTRID: 'SYS_XMLNODEID_GETPTRID'; +SYS_XMLNODEID_GETRID: 'SYS_XMLNODEID_GETRID'; +SYS_XMLNODEID_GETSVAL: 'SYS_XMLNODEID_GETSVAL'; +SYS_XMLNODEID_GETTID: 'SYS_XMLNODEID_GETTID'; +SYS_XMLNODEID: 'SYS_XMLNODEID'; +SYS_XMLT_2_SC: 'SYS_XMLT_2_SC'; +SYS_XMLTRANSLATE: 'SYS_XMLTRANSLATE'; +SYS_XMLTYPE2SQL: 'SYS_XMLTYPE2SQL'; +SYS_XQ_ASQLCNV: 'SYS_XQ_ASQLCNV'; +SYS_XQ_ATOMCNVCHK: 'SYS_XQ_ATOMCNVCHK'; +SYS_XQBASEURI: 'SYS_XQBASEURI'; +SYS_XQCASTABLEERRH: 'SYS_XQCASTABLEERRH'; +SYS_XQCODEP2STR: 'SYS_XQCODEP2STR'; +SYS_XQCODEPEQ: 'SYS_XQCODEPEQ'; +SYS_XQCON2SEQ: 'SYS_XQCON2SEQ'; +SYS_XQCONCAT: 'SYS_XQCONCAT'; +SYS_XQDELETE: 'SYS_XQDELETE'; +SYS_XQDFLTCOLATION: 'SYS_XQDFLTCOLATION'; +SYS_XQDOC: 'SYS_XQDOC'; +SYS_XQDOCURI: 'SYS_XQDOCURI'; +SYS_XQDURDIV: 'SYS_XQDURDIV'; +SYS_XQED4URI: 'SYS_XQED4URI'; +SYS_XQENDSWITH: 'SYS_XQENDSWITH'; +SYS_XQERRH: 'SYS_XQERRH'; +SYS_XQERR: 'SYS_XQERR'; +SYS_XQESHTMLURI: 'SYS_XQESHTMLURI'; +SYS_XQEXLOBVAL: 'SYS_XQEXLOBVAL'; +SYS_XQEXSTWRP: 'SYS_XQEXSTWRP'; +SYS_XQEXTRACT: 'SYS_XQEXTRACT'; +SYS_XQEXTRREF: 'SYS_XQEXTRREF'; +SYS_XQEXVAL: 'SYS_XQEXVAL'; +SYS_XQFB2STR: 'SYS_XQFB2STR'; +SYS_XQFNBOOL: 'SYS_XQFNBOOL'; +SYS_XQFNCMP: 'SYS_XQFNCMP'; +SYS_XQFNDATIM: 'SYS_XQFNDATIM'; +SYS_XQFNLNAME: 'SYS_XQFNLNAME'; +SYS_XQFNNM: 'SYS_XQFNNM'; +SYS_XQFNNSURI: 'SYS_XQFNNSURI'; +SYS_XQFNPREDTRUTH: 'SYS_XQFNPREDTRUTH'; +SYS_XQFNQNM: 'SYS_XQFNQNM'; +SYS_XQFNROOT: 'SYS_XQFNROOT'; +SYS_XQFORMATNUM: 'SYS_XQFORMATNUM'; +SYS_XQFTCONTAIN: 'SYS_XQFTCONTAIN'; +SYS_XQFUNCR: 'SYS_XQFUNCR'; +SYS_XQGETCONTENT: 'SYS_XQGETCONTENT'; +SYS_XQINDXOF: 'SYS_XQINDXOF'; +SYS_XQINSERT: 'SYS_XQINSERT'; +SYS_XQINSPFX: 'SYS_XQINSPFX'; +SYS_XQIRI2URI: 'SYS_XQIRI2URI'; +SYS_XQLANG: 'SYS_XQLANG'; +SYS_XQLLNMFRMQNM: 'SYS_XQLLNMFRMQNM'; +SYS_XQMKNODEREF: 'SYS_XQMKNODEREF'; +SYS_XQNILLED: 'SYS_XQNILLED'; +SYS_XQNODENAME: 'SYS_XQNODENAME'; +SYS_XQNORMSPACE: 'SYS_XQNORMSPACE'; +SYS_XQNORMUCODE: 'SYS_XQNORMUCODE'; +SYS_XQ_NRNG: 'SYS_XQ_NRNG'; +SYS_XQNSP4PFX: 'SYS_XQNSP4PFX'; +SYS_XQNSPFRMQNM: 'SYS_XQNSPFRMQNM'; +SYS_XQPFXFRMQNM: 'SYS_XQPFXFRMQNM'; +SYS_XQ_PKSQL2XML: 'SYS_XQ_PKSQL2XML'; +SYS_XQPOLYABS: 'SYS_XQPOLYABS'; +SYS_XQPOLYADD: 'SYS_XQPOLYADD'; +SYS_XQPOLYCEL: 'SYS_XQPOLYCEL'; +SYS_XQPOLYCSTBL: 'SYS_XQPOLYCSTBL'; +SYS_XQPOLYCST: 'SYS_XQPOLYCST'; +SYS_XQPOLYDIV: 'SYS_XQPOLYDIV'; +SYS_XQPOLYFLR: 'SYS_XQPOLYFLR'; +SYS_XQPOLYMOD: 'SYS_XQPOLYMOD'; +SYS_XQPOLYMUL: 'SYS_XQPOLYMUL'; +SYS_XQPOLYRND: 'SYS_XQPOLYRND'; +SYS_XQPOLYSQRT: 'SYS_XQPOLYSQRT'; +SYS_XQPOLYSUB: 'SYS_XQPOLYSUB'; +SYS_XQPOLYUMUS: 'SYS_XQPOLYUMUS'; +SYS_XQPOLYUPLS: 'SYS_XQPOLYUPLS'; +SYS_XQPOLYVEQ: 'SYS_XQPOLYVEQ'; +SYS_XQPOLYVGE: 'SYS_XQPOLYVGE'; +SYS_XQPOLYVGT: 'SYS_XQPOLYVGT'; +SYS_XQPOLYVLE: 'SYS_XQPOLYVLE'; +SYS_XQPOLYVLT: 'SYS_XQPOLYVLT'; +SYS_XQPOLYVNE: 'SYS_XQPOLYVNE'; +SYS_XQREF2VAL: 'SYS_XQREF2VAL'; +SYS_XQRENAME: 'SYS_XQRENAME'; +SYS_XQREPLACE: 'SYS_XQREPLACE'; +SYS_XQRESVURI: 'SYS_XQRESVURI'; +SYS_XQRNDHALF2EVN: 'SYS_XQRNDHALF2EVN'; +SYS_XQRSLVQNM: 'SYS_XQRSLVQNM'; +SYS_XQRYENVPGET: 'SYS_XQRYENVPGET'; +SYS_XQRYVARGET: 'SYS_XQRYVARGET'; +SYS_XQRYWRP: 'SYS_XQRYWRP'; +SYS_XQSEQ2CON4XC: 'SYS_XQSEQ2CON4XC'; +SYS_XQSEQ2CON: 'SYS_XQSEQ2CON'; +SYS_XQSEQDEEPEQ: 'SYS_XQSEQDEEPEQ'; +SYS_XQSEQINSB: 'SYS_XQSEQINSB'; +SYS_XQSEQRM: 'SYS_XQSEQRM'; +SYS_XQSEQRVS: 'SYS_XQSEQRVS'; +SYS_XQSEQSUB: 'SYS_XQSEQSUB'; +SYS_XQSEQTYPMATCH: 'SYS_XQSEQTYPMATCH'; +SYS_XQSTARTSWITH: 'SYS_XQSTARTSWITH'; +SYS_XQSTATBURI: 'SYS_XQSTATBURI'; +SYS_XQSTR2CODEP: 'SYS_XQSTR2CODEP'; +SYS_XQSTRJOIN: 'SYS_XQSTRJOIN'; +SYS_XQSUBSTRAFT: 'SYS_XQSUBSTRAFT'; +SYS_XQSUBSTRBEF: 'SYS_XQSUBSTRBEF'; +SYS_XQTOKENIZE: 'SYS_XQTOKENIZE'; +SYS_XQTREATAS: 'SYS_XQTREATAS'; +SYS_XQ_UPKXML2SQL: 'SYS_XQ_UPKXML2SQL'; +SYS_XQXFORM: 'SYS_XQXFORM'; +SYS_XSID_TO_RAW: 'SYS_XSID_TO_RAW'; +SYS_ZMAP_FILTER: 'SYS_ZMAP_FILTER'; +SYS_ZMAP_REFRESH: 'SYS_ZMAP_REFRESH'; +TABLE_LOOKUP_BY_NL: 'TABLE_LOOKUP_BY_NL'; +TABLESPACE_NO: 'TABLESPACE_NO'; +TABLESPACE: 'TABLESPACE'; +TABLES: 'TABLES'; +TABLE_STATS: 'TABLE_STATS'; +TABLE: 'TABLE'; +TABNO: 'TABNO'; +TAG: 'TAG'; +TANH: 'TANH'; +TAN: 'TAN'; +TBLORIDXPARTNUM: 'TBL$OR$IDX$PART$NUM'; +TEMPFILE: 'TEMPFILE'; +TEMPLATE: 'TEMPLATE'; +TEMPORARY: 'TEMPORARY'; +TEMP_TABLE: 'TEMP_TABLE'; +TEST: 'TEST'; +TEXT: 'TEXT'; +THAN: 'THAN'; +THEN: 'THEN'; +THE: 'THE'; +THREAD: 'THREAD'; +THROUGH: 'THROUGH'; +TIER: 'TIER'; +TIES: 'TIES'; +TIMEOUT: 'TIMEOUT'; +TIMESTAMP_LTZ_UNCONSTRAINED: 'TIMESTAMP_LTZ_UNCONSTRAINED'; +TIMESTAMP: 'TIMESTAMP'; +TIMESTAMP_TZ_UNCONSTRAINED: 'TIMESTAMP_TZ_UNCONSTRAINED'; +TIMESTAMP_UNCONSTRAINED: 'TIMESTAMP_UNCONSTRAINED'; +TIMES: 'TIMES'; +TIME: 'TIME'; +TIMEZONE: 'TIMEZONE'; +TIMEZONE_ABBR: 'TIMEZONE_ABBR'; +TIMEZONE_HOUR: 'TIMEZONE_HOUR'; +TIMEZONE_MINUTE: 'TIMEZONE_MINUTE'; +TIMEZONE_OFFSET: 'TIMEZONE_OFFSET'; +TIMEZONE_REGION: 'TIMEZONE_REGION'; +TIME_ZONE: 'TIME_ZONE'; +TIV_GB: 'TIV_GB'; +TIV_SSF: 'TIV_SSF'; +TO_ACLID: 'TO_ACLID'; +TO_BINARY_DOUBLE: 'TO_BINARY_DOUBLE'; +TO_BINARY_FLOAT: 'TO_BINARY_FLOAT'; +TO_BLOB: 'TO_BLOB'; +TO_CLOB: 'TO_CLOB'; +TO_DSINTERVAL: 'TO_DSINTERVAL'; +TO_LOB: 'TO_LOB'; +TO_MULTI_BYTE: 'TO_MULTI_BYTE'; +TO_NCHAR: 'TO_NCHAR'; +TO_NCLOB: 'TO_NCLOB'; +TO_NUMBER: 'TO_NUMBER'; +TOPLEVEL: 'TOPLEVEL'; +TO_SINGLE_BYTE: 'TO_SINGLE_BYTE'; +TO_TIMESTAMP: 'TO_TIMESTAMP'; +TO_TIMESTAMP_TZ: 'TO_TIMESTAMP_TZ'; +TO_TIME: 'TO_TIME'; +TO_TIME_TZ: 'TO_TIME_TZ'; +TO: 'TO'; +TO_YMINTERVAL: 'TO_YMINTERVAL'; +TRACE: 'TRACE'; +TRACING: 'TRACING'; +TRACKING: 'TRACKING'; +TRAILING: 'TRAILING'; +TRANSACTION: 'TRANSACTION'; +TRANSFORM_DISTINCT_AGG: 'TRANSFORM_DISTINCT_AGG'; +TRANSITIONAL: 'TRANSITIONAL'; +TRANSITION: 'TRANSITION'; +TRANSLATE: 'TRANSLATE'; +TRANSLATION: 'TRANSLATION'; +TREAT: 'TREAT'; +TRIGGERS: 'TRIGGERS'; +TRIGGER: 'TRIGGER'; +TRUE: 'TRUE'; +TRUNCATE: 'TRUNCATE'; +TRUNC: 'TRUNC'; +TRUSTED: 'TRUSTED'; +TRUST: 'TRUST'; +TUNING: 'TUNING'; +TX: 'TX'; +TYPES: 'TYPES'; +TYPE: 'TYPE'; +TZ_OFFSET: 'TZ_OFFSET'; +UB2: 'UB2'; +UBA: 'UBA'; +UCS2: 'UCS2'; +UID: 'UID'; +UNARCHIVED: 'UNARCHIVED'; +UNBOUNDED: 'UNBOUNDED'; +UNBOUND: 'UNBOUND'; +UNCONDITIONAL: 'UNCONDITIONAL'; +UNDER: 'UNDER'; +UNDO: 'UNDO'; +UNDROP: 'UNDROP'; +UNIFORM: 'UNIFORM'; +UNION: 'UNION'; +UNIQUE: 'UNIQUE'; +UNISTR: 'UNISTR'; +UNLIMITED: 'UNLIMITED'; +UNLOAD: 'UNLOAD'; +UNLOCK: 'UNLOCK'; +UNMATCHED: 'UNMATCHED'; +UNNEST_INNERJ_DISTINCT_VIEW: 'UNNEST_INNERJ_DISTINCT_VIEW'; +UNNEST_NOSEMIJ_NODISTINCTVIEW: 'UNNEST_NOSEMIJ_NODISTINCTVIEW'; +UNNEST_SEMIJ_VIEW: 'UNNEST_SEMIJ_VIEW'; +UNNEST: 'UNNEST'; +UNPACKED: 'UNPACKED'; +UNPIVOT: 'UNPIVOT'; +UNPLUG: 'UNPLUG'; +UNPROTECTED: 'UNPROTECTED'; +UNQUIESCE: 'UNQUIESCE'; +UNRECOVERABLE: 'UNRECOVERABLE'; +UNRESTRICTED: 'UNRESTRICTED'; +UNSUBSCRIBE: 'UNSUBSCRIBE'; +UNTIL: 'UNTIL'; +UNUSABLE: 'UNUSABLE'; +UNUSED: 'UNUSED'; +UPDATABLE: 'UPDATABLE'; +UPDATED: 'UPDATED'; +UPDATE: 'UPDATE'; +UPDATEXML: 'UPDATEXML'; +UPD_INDEXES: 'UPD_INDEXES'; +UPD_JOININDEX: 'UPD_JOININDEX'; +UPGRADE: 'UPGRADE'; +UPPER: 'UPPER'; +UPSERT: 'UPSERT'; +UROWID: 'UROWID'; +USABLE: 'USABLE'; +USAGE: 'USAGE'; +USE_ANTI: 'USE_ANTI'; +USE_CONCAT: 'USE_CONCAT'; +USE_CUBE: 'USE_CUBE'; +USE_HASH_AGGREGATION: 'USE_HASH_AGGREGATION'; +USE_HASH_GBY_FOR_PUSHDOWN: 'USE_HASH_GBY_FOR_PUSHDOWN'; +USE_HASH: 'USE_HASH'; +USE_HIDDEN_PARTITIONS: 'USE_HIDDEN_PARTITIONS'; +USE_INVISIBLE_INDEXES: 'USE_INVISIBLE_INDEXES'; +USE_MERGE_CARTESIAN: 'USE_MERGE_CARTESIAN'; +USE_MERGE: 'USE_MERGE'; +USE_NL: 'USE_NL'; +USE_NL_WITH_INDEX: 'USE_NL_WITH_INDEX'; +USE_PRIVATE_OUTLINES: 'USE_PRIVATE_OUTLINES'; +USER_DATA: 'USER_DATA'; +USER_DEFINED: 'USER_DEFINED'; +USERENV: 'USERENV'; +USERGROUP: 'USERGROUP'; +USER_RECYCLEBIN: 'USER_RECYCLEBIN'; +USERS: 'USERS'; +USER_TABLESPACES: 'USER_TABLESPACES'; +USER: 'USER'; +USE_SEMI: 'USE_SEMI'; +USE_STORED_OUTLINES: 'USE_STORED_OUTLINES'; +USE_TTT_FOR_GSETS: 'USE_TTT_FOR_GSETS'; +USE: 'USE'; +USE_VECTOR_AGGREGATION: 'USE_VECTOR_AGGREGATION'; +USE_WEAK_NAME_RESL: 'USE_WEAK_NAME_RESL'; +USING_NO_EXPAND: 'USING_NO_EXPAND'; +USING: 'USING'; +UTF16BE: 'UTF16BE'; +UTF16LE: 'UTF16LE'; +UTF32: 'UTF32'; +UTF8: 'UTF8'; +V1: 'V1'; +V2: 'V2'; +VALIDATE: 'VALIDATE'; +VALIDATION: 'VALIDATION'; +VALID_TIME_END: 'VALID_TIME_END'; +VALUES: 'VALUES'; +VALUE: 'VALUE'; +VARCHAR2: 'VARCHAR2'; +VARCHAR: 'VARCHAR'; +VARIABLE: 'VARIABLE'; +VAR_POP: 'VAR_POP'; +VARRAYS: 'VARRAYS'; +VARRAY: 'VARRAY'; +VAR_SAMP: 'VAR_SAMP'; +VARYING: 'VARYING'; +VECTOR_READ_TRACE: 'VECTOR_READ_TRACE'; +VECTOR_READ: 'VECTOR_READ'; +VECTOR_TRANSFORM_DIMS: 'VECTOR_TRANSFORM_DIMS'; +VECTOR_TRANSFORM_FACT: 'VECTOR_TRANSFORM_FACT'; +VECTOR_TRANSFORM: 'VECTOR_TRANSFORM'; +VERIFIER: 'VERIFIER'; +VERIFY: 'VERIFY'; +VERSIONING: 'VERSIONING'; +VERSIONS_ENDSCN: 'VERSIONS_ENDSCN'; +VERSIONS_ENDTIME: 'VERSIONS_ENDTIME'; +VERSIONS_OPERATION: 'VERSIONS_OPERATION'; +VERSIONS_STARTSCN: 'VERSIONS_STARTSCN'; +VERSIONS_STARTTIME: 'VERSIONS_STARTTIME'; +VERSIONS: 'VERSIONS'; +VERSIONS_XID: 'VERSIONS_XID'; +VERSION: 'VERSION'; +VIEW: 'VIEW'; +VIOLATION: 'VIOLATION'; +VIRTUAL: 'VIRTUAL'; +VISIBILITY: 'VISIBILITY'; +VISIBLE: 'VISIBLE'; +VOLUME: 'VOLUME'; +VSIZE: 'VSIZE'; +WAIT: 'WAIT'; +WALLET: 'WALLET'; +WARNING: 'WARNING'; +WEEKS: 'WEEKS'; +WEEK: 'WEEK'; +WELLFORMED: 'WELLFORMED'; +WHENEVER: 'WHENEVER'; +WHEN: 'WHEN'; +WHERE: 'WHERE'; +WHILE: 'WHILE'; +WHITESPACE: 'WHITESPACE'; +WIDTH_BUCKET: 'WIDTH_BUCKET'; +WITHIN: 'WITHIN'; +WITHOUT: 'WITHOUT'; +WITH_PLSQL: 'WITH_PLSQL'; +WITH: 'WITH'; +WORK: 'WORK'; +WRAPPED: 'WRAPPED'; +WRAPPER: 'WRAPPER'; +WRITE: 'WRITE'; +XDB_FASTPATH_INSERT: 'XDB_FASTPATH_INSERT'; +XDB: 'XDB'; +X_DYN_PRUNE: 'X_DYN_PRUNE'; +XID: 'XID'; +XML2OBJECT: 'XML2OBJECT'; +XMLAGG: 'XMLAGG'; +XMLATTRIBUTES: 'XMLATTRIBUTES'; +XMLCAST: 'XMLCAST'; +XMLCDATA: 'XMLCDATA'; +XMLCOLATTVAL: 'XMLCOLATTVAL'; +XMLCOMMENT: 'XMLCOMMENT'; +XMLCONCAT: 'XMLCONCAT'; +XMLDIFF: 'XMLDIFF'; +XML_DML_RWT_STMT: 'XML_DML_RWT_STMT'; +XMLELEMENT: 'XMLELEMENT'; +XMLEXISTS2: 'XMLEXISTS2'; +XMLEXISTS: 'XMLEXISTS'; +XMLFOREST: 'XMLFOREST'; +XMLINDEX: 'XMLINDEX'; +XMLINDEX_REWRITE_IN_SELECT: 'XMLINDEX_REWRITE_IN_SELECT'; +XMLINDEX_REWRITE: 'XMLINDEX_REWRITE'; +XMLINDEX_SEL_IDX_TBL: 'XMLINDEX_SEL_IDX_TBL'; +XMLISNODE: 'XMLISNODE'; +XMLISVALID: 'XMLISVALID'; +XMLNAMESPACES: 'XMLNAMESPACES'; +XMLPARSE: 'XMLPARSE'; +XMLPATCH: 'XMLPATCH'; +XMLPI: 'XMLPI'; +XMLQUERYVAL: 'XMLQUERYVAL'; +XMLQUERY: 'XMLQUERY'; +XMLROOT: 'XMLROOT'; +XMLSCHEMA: 'XMLSCHEMA'; +XMLSERIALIZE: 'XMLSERIALIZE'; +XMLTABLE: 'XMLTABLE'; +XMLTRANSFORMBLOB: 'XMLTRANSFORMBLOB'; +XMLTRANSFORM: 'XMLTRANSFORM'; +XMLTYPE: 'XMLTYPE'; +XML: 'XML'; +XPATHTABLE: 'XPATHTABLE'; +XS_SYS_CONTEXT: 'XS_SYS_CONTEXT'; +XS: 'XS'; +YEARS: 'YEARS'; +YEAR: 'YEAR'; +YES: 'YES'; +YMINTERVAL_UNCONSTRAINED: 'YMINTERVAL_UNCONSTRAINED'; +ZONEMAP: 'ZONEMAP'; +ZONE: 'ZONE'; +PREDICTION: 'PREDICTION'; +PREDICTION_BOUNDS: 'PREDICTION_BOUNDS'; +PREDICTION_COST: 'PREDICTION_COST'; +PREDICTION_DETAILS: 'PREDICTION_DETAILS'; +PREDICTION_PROBABILITY: 'PREDICTION_PROBABILITY'; +PREDICTION_SET: 'PREDICTION_SET'; + +CUME_DIST: 'CUME_DIST'; +DENSE_RANK: 'DENSE_RANK'; +LISTAGG: 'LISTAGG'; +PERCENT_RANK: 'PERCENT_RANK'; +PERCENTILE_CONT: 'PERCENTILE_CONT'; +PERCENTILE_DISC: 'PERCENTILE_DISC'; +RANK: 'RANK'; + +AVG: 'AVG'; +CORR: 'CORR'; +COVAR_: 'COVAR_'; +DECODE: 'DECODE'; +LAG: 'LAG'; +LEAD: 'LEAD'; +MAX: 'MAX'; +MEDIAN: 'MEDIAN'; +MIN: 'MIN'; +NTILE: 'NTILE'; +NVL: 'NVL'; +RATIO_TO_REPORT: 'RATIO_TO_REPORT'; +REGR_: 'REGR_'; +ROUND: 'ROUND'; +ROW_NUMBER: 'ROW_NUMBER'; +SUBSTR: 'SUBSTR'; +TO_CHAR: 'TO_CHAR'; +TRIM: 'TRIM'; +SUM: 'SUM'; +STDDEV: 'STDDEV'; +VAR_: 'VAR_'; +VARIANCE: 'VARIANCE'; +LEAST: 'LEAST'; +GREATEST: 'GREATEST'; +TO_DATE: 'TO_DATE'; + +// Rule #358 - subtoken typecast in , it also incorporates +// Lowercase 'n' is a usual addition to the standard + +NATIONAL_CHAR_STRING_LIT: 'N' '\'' (~('\'' | '\r' | '\n' ) | '\'' '\'' | NEWLINE)* '\''; + +// Rule #040 - subtoken typecast in +// Lowercase 'b' is a usual addition to the standard + +BIT_STRING_LIT: 'B' ('\'' [01]* '\'')+; + +// Rule #284 - subtoken typecast in +// Lowercase 'x' is a usual addition to the standard + +HEX_STRING_LIT: 'X' ('\'' [A-F0-9]* '\'')+; +DOUBLE_PERIOD: '..'; +PERIOD: '.'; + +//{ Rule #238 +// This rule is a bit tricky - it resolves the ambiguity with +// It also incorporates and for the +// Rule #501 was incorporated directly in the token +// See also the rule #617 +/* + : ( + UNSIGNED_INTEGER + ( '.' UNSIGNED_INTEGER + | {$type = UNSIGNED_INTEGER;} + ) ( E ('+' | '-')? UNSIGNED_INTEGER {$type = APPROXIMATE_NUM_LIT;} )? + | '.' UNSIGNED_INTEGER ( E ('+' | '-')? UNSIGNED_INTEGER {$type = APPROXIMATE_NUM_LIT;} )? + ) + (D | F)? + ;*/ + +UNSIGNED_INTEGER: [0-9]+; +APPROXIMATE_NUM_LIT: FLOAT_FRAGMENT ('E' ('+'|'-')? (FLOAT_FRAGMENT | [0-9]+))? ('D' | 'F')?; + +// Rule #--- is a base for Rule #065 , it incorporates +// and a superfluous subtoken typecasting of the "QUOTE" +CHAR_STRING: '\'' (~('\'' | '\r' | '\n') | '\'' '\'' | NEWLINE)* '\''; + +// Perl-style quoted string, see Oracle SQL reference, chapter String Literals +CHAR_STRING_PERL : 'Q' ( QS_ANGLE | QS_BRACE | QS_BRACK | QS_PAREN) -> type(CHAR_STRING); +fragment QUOTE : '\'' ; +fragment QS_ANGLE : QUOTE '<' .*? '>' QUOTE ; +fragment QS_BRACE : QUOTE '{' .*? '}' QUOTE ; +fragment QS_BRACK : QUOTE '[' .*? ']' QUOTE ; +fragment QS_PAREN : QUOTE '(' .*? ')' QUOTE ; +fragment QS_OTHER_CH: ~('<' | '{' | '[' | '(' | ' ' | '\t' | '\n' | '\r'); + +DELIMITED_ID: '"' (~('"' | '\r' | '\n') | '"' '"')+ '"' ; + +// SQL_SPECIAL_CHAR was split into single rules + +PERCENT: '%'; +AMPERSAND: '&'; +LEFT_PAREN: '('; +RIGHT_PAREN: ')'; +DOUBLE_ASTERISK: '**'; +ASTERISK: '*'; +PLUS_SIGN: '+'; +MINUS_SIGN: '-'; +COMMA: ','; +SOLIDUS: '/'; +AT_SIGN: '@'; +ASSIGN_OP: ':='; + +// See OCI reference for more information about this + +BINDVAR + : ':' SIMPLE_LETTER (SIMPLE_LETTER | [0-9] | '_')* + | ':' DELIMITED_ID // not used in SQL but spotted in v$sqltext when using cursor_sharing + | ':' UNSIGNED_INTEGER + | QUESTION_MARK // not in SQL, not in Oracle, not in OCI, use this for JDBC + ; + +NOT_EQUAL_OP: '!=' + | '<>' + | '^=' + | '~=' + ; +CARRET_OPERATOR_PART: '^'; +TILDE_OPERATOR_PART: '~'; +EXCLAMATION_OPERATOR_PART: '!'; +GREATER_THAN_OP: '>'; +LESS_THAN_OP: '<'; +COLON: ':'; +SEMICOLON: ';'; + +fragment +QUESTION_MARK: '?'; + +// protected UNDERSCORE : '_' SEPARATOR ; // subtoken typecast within +BAR: '|'; +EQUALS_OP: '='; + +// Rule #532 was split into single rules: +LEFT_BRACKET: '['; +RIGHT_BRACKET: ']'; + +//{ Rule #319 +INTRODUCER + : '_' //(SEPARATOR {$type = UNDERSCORE;})? + ; + +//{ Rule #479 +// It was originally a protected rule set to be filtered out but the and <'-'> clashed. +/*SEPARATOR + : '-' -> type('-') + | COMMENT -> channel(HIDDEN) + | (SPACE | NEWLINE)+ -> channel(HIDDEN) + ;*/ +//} + +SPACES: [ \t\r\n]+ -> skip; + + +// Rule #504 - simple_latin _letter was generalised into SIMPLE_LETTER +// Unicode is yet to be implemented - see NSF0 +fragment +SIMPLE_LETTER + : [A-Z] + ; + +fragment +FLOAT_FRAGMENT + : UNSIGNED_INTEGER* '.'? UNSIGNED_INTEGER+ + ; + +// Rule #097 + +SINGLE_LINE_COMMENT: '--' ~('\r' | '\n')* (NEWLINE | EOF) -> channel(HIDDEN); +MULTI_LINE_COMMENT: '/*' .*? '*/' -> channel(HIDDEN); + +// SQL*Plus prompt +// TODO should be grammar rule, but tricky to implement + +PROMPT + : 'prompt' SPACE ( ~('\r' | '\n') )* (NEWLINE|EOF) + ; + +START_CMD + // TODO When using full word START there is a conflict with START WITH in sequences and CONNECT BY queries + // 'start' SPACE ( ~( '\r' | '\n') )* (NEWLINE|EOF) + : 'sta' SPACE ( ~('\r' | '\n') )* (NEWLINE|EOF) + // TODO Single @ conflicts with a database link name, like employees@remote + // | '@' ( ~('\r' | '\n') )* (NEWLINE|EOF) + | '@@' ( ~('\r' | '\n') )* (NEWLINE|EOF) + ; + +fragment +NEWLINE: '\r'? '\n'; + +fragment +SPACE: [ \t]; + +//{ Rule #442 additionally encapsulates a few STRING_LITs. +// Within testLiterals all reserved and non-reserved words are being resolved + +REGULAR_ID: SIMPLE_LETTER (SIMPLE_LETTER | '$' | '_' | '#' | [0-9])*; + +ZV: '@!' -> channel(HIDDEN); diff --git a/original-grammar/PlSqlParser.g4 b/original-grammar/PlSqlParser.g4 new file mode 100644 index 0000000..033212a --- /dev/null +++ b/original-grammar/PlSqlParser.g4 @@ -0,0 +1,6661 @@ + /** + * Oracle(c) PL/SQL 11g Parser + * + * Copyright (c) 2009-2011 Alexandre Porcelli + * Copyright (c) 2015-2017 Ivan Kochurkin (KvanTTT, kvanttt@gmail.com, Positive Technologies). + * Copyright (c) 2017 Mark Adams + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +parser grammar PlSqlParser; + +options { tokenVocab=PlSqlLexer; } + +@members {boolean version12=true;} + +sql_script + : ((unit_statement | sql_plus_command) SEMICOLON?)* EOF + ; + +unit_statement + : transaction_control_statements + | alter_cluster + | alter_function + | alter_package + | alter_procedure + | alter_sequence + | alter_trigger + | alter_type + | alter_table + | alter_tablespace + | alter_index + | alter_library + | alter_materialized_view + | alter_materialized_view_log + | alter_user + | alter_view + + | analyze + | associate_statistics + | audit_traditional + | unified_auditing + + | create_function_body + | create_procedure_body + | create_package + | create_package_body + + | create_index + | create_table + | create_tablespace + | create_cluster + | create_context + | create_view //TODO + | create_directory + | create_materialized_view + | create_materialized_view_log + | create_user + + | create_sequence + | create_trigger + | create_type + | create_synonym + + | drop_function + | drop_package + | drop_procedure + | drop_sequence + | drop_trigger + | drop_type + | data_manipulation_language_statements + | drop_table + | drop_index + + | comment_on_column + | comment_on_table + + | anonymous_block + + | grant_statement + ; + +// DDL -> SQL Statements for Stored PL/SQL Units + +// Function DDLs + +drop_function + : DROP FUNCTION function_name ';' + ; + +alter_function + : ALTER FUNCTION function_name COMPILE DEBUG? compiler_parameters_clause* (REUSE SETTINGS)? ';' + ; + +create_function_body + : CREATE (OR REPLACE)? FUNCTION function_name ('(' (','? parameter)+ ')')? + RETURN type_spec (invoker_rights_clause | parallel_enable_clause | result_cache_clause | DETERMINISTIC)* + ((PIPELINED? (IS | AS) (DECLARE? seq_of_declare_specs? body | call_spec)) | (PIPELINED | AGGREGATE) USING implementation_type_name) ';' + ; + +// Creation Function - Specific Clauses + +parallel_enable_clause + : PARALLEL_ENABLE partition_by_clause? + ; + +partition_by_clause + : '(' PARTITION expression BY (ANY | (HASH | RANGE | LIST) paren_column_list) streaming_clause? ')' + ; + +result_cache_clause + : RESULT_CACHE relies_on_part? + ; + +relies_on_part + : RELIES_ON '(' tableview_name (',' tableview_name)* ')' + ; + +streaming_clause + : (ORDER | CLUSTER) expression BY paren_column_list + ; + +// Package DDLs + +drop_package + : DROP PACKAGE BODY? (schema_object_name '.')? package_name ';' + ; + +alter_package + : ALTER PACKAGE package_name COMPILE DEBUG? (PACKAGE | BODY | SPECIFICATION)? compiler_parameters_clause* (REUSE SETTINGS)? ';' + ; + +create_package + : CREATE (OR REPLACE)? PACKAGE (schema_object_name '.')? package_name invoker_rights_clause? (IS | AS) package_obj_spec* END package_name? ';' + ; + +create_package_body + : CREATE (OR REPLACE)? PACKAGE BODY (schema_object_name '.')? package_name (IS | AS) package_obj_body* (BEGIN seq_of_statements)? END package_name? ';' + ; + +// Create Package Specific Clauses + +package_obj_spec + : pragma_declaration + | variable_declaration + | subtype_declaration + | cursor_declaration + | exception_declaration + | type_declaration + | procedure_spec + | function_spec + ; + +procedure_spec + : PROCEDURE identifier ('(' parameter ( ',' parameter )* ')')? ';' + ; + +function_spec + : FUNCTION identifier ('(' parameter ( ',' parameter)* ')')? + RETURN type_spec (DETERMINISTIC)? (RESULT_CACHE)? ';' + ; + +package_obj_body + : variable_declaration + | subtype_declaration + | cursor_declaration + | exception_declaration + | type_declaration + | procedure_body + | function_body + | procedure_spec + | function_spec + ; + +// Procedure DDLs + +drop_procedure + : DROP PROCEDURE procedure_name ';' + ; + +alter_procedure + : ALTER PROCEDURE procedure_name COMPILE DEBUG? compiler_parameters_clause* (REUSE SETTINGS)? ';' + ; + +function_body + : FUNCTION identifier ('(' parameter (',' parameter)* ')')? + RETURN type_spec (invoker_rights_clause | parallel_enable_clause | result_cache_clause | DETERMINISTIC)* + ((PIPELINED? (IS | AS) (DECLARE? seq_of_declare_specs? body | call_spec)) | (PIPELINED | AGGREGATE) USING implementation_type_name) ';' + ; + +procedure_body + : PROCEDURE identifier ('(' parameter (',' parameter)* ')')? (IS | AS) + (DECLARE? seq_of_declare_specs? body | call_spec | EXTERNAL) ';' + ; + +create_procedure_body + : CREATE (OR REPLACE)? PROCEDURE procedure_name ('(' parameter (',' parameter)* ')')? + invoker_rights_clause? (IS | AS) + (DECLARE? seq_of_declare_specs? body | call_spec | EXTERNAL) ';' + ; + +// Trigger DDLs + +drop_trigger + : DROP TRIGGER trigger_name ';' + ; + +alter_trigger + : ALTER TRIGGER alter_trigger_name=trigger_name + ((ENABLE | DISABLE) | RENAME TO rename_trigger_name=trigger_name | COMPILE DEBUG? compiler_parameters_clause* (REUSE SETTINGS)?) ';' + ; + +create_trigger + : CREATE ( OR REPLACE )? TRIGGER trigger_name + (simple_dml_trigger | compound_dml_trigger | non_dml_trigger) + trigger_follows_clause? (ENABLE | DISABLE)? trigger_when_clause? trigger_body ';' + ; + +trigger_follows_clause + : FOLLOWS trigger_name (',' trigger_name)* + ; + +trigger_when_clause + : WHEN '(' condition ')' + ; + +// Create Trigger Specific Clauses + +simple_dml_trigger + : (BEFORE | AFTER | INSTEAD OF) dml_event_clause referencing_clause? for_each_row? + ; + +for_each_row + : FOR EACH ROW + ; + +compound_dml_trigger + : FOR dml_event_clause referencing_clause? + ; + +non_dml_trigger + : (BEFORE | AFTER) non_dml_event (OR non_dml_event)* ON (DATABASE | (schema_name '.')? SCHEMA) + ; + +trigger_body + : COMPOUND TRIGGER + | CALL identifier + | trigger_block + ; + +routine_clause + : routine_name function_argument? + ; + +compound_trigger_block + : COMPOUND TRIGGER seq_of_declare_specs? timing_point_section+ END trigger_name + ; + +timing_point_section + : bk=BEFORE STATEMENT IS trigger_block BEFORE STATEMENT ';' + | bk=BEFORE EACH ROW IS trigger_block BEFORE EACH ROW ';' + | ak=AFTER STATEMENT IS trigger_block AFTER STATEMENT ';' + | ak=AFTER EACH ROW IS trigger_block AFTER EACH ROW ';' + ; + +non_dml_event + : ALTER + | ANALYZE + | ASSOCIATE STATISTICS + | AUDIT + | COMMENT + | CREATE + | DISASSOCIATE STATISTICS + | DROP + | GRANT + | NOAUDIT + | RENAME + | REVOKE + | TRUNCATE + | DDL + | STARTUP + | SHUTDOWN + | DB_ROLE_CHANGE + | LOGON + | LOGOFF + | SERVERERROR + | SUSPEND + | DATABASE + | SCHEMA + | FOLLOWS + ; + +dml_event_clause + : dml_event_element (OR dml_event_element)* ON dml_event_nested_clause? tableview_name + ; + +dml_event_element + : (DELETE | INSERT | UPDATE) (OF column_list)? + ; + +dml_event_nested_clause + : NESTED TABLE tableview_name OF + ; + +referencing_clause + : REFERENCING referencing_element+ + ; + +referencing_element + : (NEW | OLD | PARENT) column_alias + ; + +// DDLs + +drop_type + : DROP TYPE BODY? type_name (FORCE | VALIDATE)? ';' + ; + +alter_type + : ALTER TYPE type_name + (compile_type_clause + | replace_type_clause + //TODO | {input.LT(2).getText().equalsIgnoreCase("attribute")}? alter_attribute_definition + | alter_method_spec + | alter_collection_clauses + | modifier_clause + ) dependent_handling_clause? ';' + ; + +// Alter Type Specific Clauses + +compile_type_clause + : COMPILE DEBUG? (SPECIFICATION | BODY)? compiler_parameters_clause* (REUSE SETTINGS)? + ; + +replace_type_clause + : REPLACE invoker_rights_clause? AS OBJECT '(' object_member_spec (',' object_member_spec)* ')' + ; + +alter_method_spec + : alter_method_element (',' alter_method_element)* + ; + +alter_method_element + : (ADD | DROP) (map_order_function_spec | subprogram_spec) + ; + +alter_attribute_definition + : (ADD | MODIFY | DROP) ATTRIBUTE (attribute_definition | '(' attribute_definition (',' attribute_definition)* ')') + ; + +attribute_definition + : attribute_name type_spec? + ; + +alter_collection_clauses + : MODIFY (LIMIT expression | ELEMENT TYPE type_spec) + ; + +dependent_handling_clause + : INVALIDATE + | CASCADE (CONVERT TO SUBSTITUTABLE | NOT? INCLUDING TABLE DATA)? dependent_exceptions_part? + ; + +dependent_exceptions_part + : FORCE? EXCEPTIONS INTO tableview_name + ; + +create_type + : CREATE (OR REPLACE)? TYPE (type_definition | type_body) ';' + ; + +// Create Type Specific Clauses + +type_definition + : type_name (OID CHAR_STRING)? object_type_def? + ; + +object_type_def + : invoker_rights_clause? (object_as_part | object_under_part) sqlj_object_type? + ('(' object_member_spec (',' object_member_spec)* ')')? modifier_clause* + ; + +object_as_part + : (IS | AS) (OBJECT | varray_type_def | nested_table_type_def) + ; + +object_under_part + : UNDER type_spec + ; + +nested_table_type_def + : TABLE OF type_spec (NOT NULL)? + ; + +sqlj_object_type + : EXTERNAL NAME expression LANGUAGE JAVA USING (SQLDATA | CUSTOMDATUM | ORADATA) + ; + +type_body + : BODY type_name (IS | AS) (type_body_elements)+ END + ; + +type_body_elements + : map_order_func_declaration + | subprog_decl_in_type + ; + +map_order_func_declaration + : (MAP | ORDER) MEMBER func_decl_in_type + ; + +subprog_decl_in_type + : (MEMBER | STATIC) (proc_decl_in_type | func_decl_in_type | constructor_declaration) + ; + +proc_decl_in_type + : PROCEDURE procedure_name '(' type_elements_parameter (',' type_elements_parameter)* ')' + (IS | AS) (call_spec | DECLARE? seq_of_declare_specs? body ';') + ; + +func_decl_in_type + : FUNCTION function_name ('(' type_elements_parameter (',' type_elements_parameter)* ')')? + RETURN type_spec (IS | AS) (call_spec | DECLARE? seq_of_declare_specs? body ';') + ; + +constructor_declaration + : FINAL? INSTANTIABLE? CONSTRUCTOR FUNCTION type_spec + ('(' (SELF IN OUT type_spec ',') type_elements_parameter (',' type_elements_parameter)* ')')? + RETURN SELF AS RESULT (IS | AS) (call_spec | DECLARE? seq_of_declare_specs? body ';') + ; + +// Common Type Clauses + +modifier_clause + : NOT? (INSTANTIABLE | FINAL | OVERRIDING) + ; + +object_member_spec + : identifier type_spec sqlj_object_type_attr? + | element_spec + ; + +sqlj_object_type_attr + : EXTERNAL NAME expression + ; + +element_spec + : modifier_clause? element_spec_options+ (',' pragma_clause)? + ; + +element_spec_options + : subprogram_spec + | constructor_spec + | map_order_function_spec + ; + +subprogram_spec + : (MEMBER | STATIC) (type_procedure_spec | type_function_spec) + ; + +type_procedure_spec + : PROCEDURE procedure_name '(' type_elements_parameter (',' type_elements_parameter)* ')' ((IS | AS) call_spec)? + ; + +type_function_spec + : FUNCTION function_name ('(' type_elements_parameter (',' type_elements_parameter)* ')')? + RETURN (type_spec | SELF AS RESULT) ((IS | AS) call_spec | EXTERNAL VARIABLE? NAME expression)? + ; + +constructor_spec + : FINAL? INSTANTIABLE? CONSTRUCTOR FUNCTION + type_spec ('(' (SELF IN OUT type_spec ',') type_elements_parameter (',' type_elements_parameter)* ')')? + RETURN SELF AS RESULT ((IS | AS) call_spec)? + ; + +map_order_function_spec + : (MAP | ORDER) MEMBER type_function_spec + ; + +pragma_clause + : PRAGMA RESTRICT_REFERENCES '(' pragma_elements (',' pragma_elements)* ')' + ; + +pragma_elements + : identifier + | DEFAULT + ; + +type_elements_parameter + : parameter_name type_spec + ; + +// Sequence DDLs + +drop_sequence + : DROP SEQUENCE sequence_name ';' + ; + +alter_sequence + : ALTER SEQUENCE sequence_name sequence_spec+ ';' + ; + +create_sequence + : CREATE SEQUENCE sequence_name (sequence_start_clause | sequence_spec)* ';' + ; + +// Common Sequence + +sequence_spec + : INCREMENT BY UNSIGNED_INTEGER + | MAXVALUE UNSIGNED_INTEGER + | NOMAXVALUE + | MINVALUE UNSIGNED_INTEGER + | NOMINVALUE + | CYCLE + | NOCYCLE + | CACHE UNSIGNED_INTEGER + | NOCACHE + | ORDER + | NOORDER + ; + +sequence_start_clause + : START WITH UNSIGNED_INTEGER + ; + +create_index + : CREATE (UNIQUE | BITMAP)? INDEX index_name + ON (cluster_index_clause | table_index_clause | bitmap_join_index_clause) + UNUSABLE? + ';' + ; + +cluster_index_clause + : CLUSTER cluster_name index_attributes? + ; + +cluster_name + : (id_expression '.')? id_expression + ; + +table_index_clause + : tableview_name table_alias? '(' (','? index_expr (ASC | DESC)? )+ ')' + index_properties? + ; +bitmap_join_index_clause + : tableview_name '(' (','? (tableview_name | table_alias)? column_name (ASC | DESC)? )+ ')' + FROM (','? tableview_name table_alias)+ + where_clause local_partitioned_index? index_attributes? + ; + +index_expr + : column_name + | expression + ; + +index_properties + : (global_partitioned_index | local_partitioned_index | index_attributes)+ + | INDEXTYPE IS (domain_index_clause | xmlindex_clause) + ; + +domain_index_clause + : indextype local_domain_index_clause? parallel_clause? (PARAMETERS '(' odci_parameters ')' )? + ; + +local_domain_index_clause + : LOCAL ('(' (','? PARTITION partition_name (PARAMETERS '(' odci_parameters ')' )? )+ ')' )? + ; + +xmlindex_clause + : (XDB '.')? XMLINDEX local_xmlindex_clause? + parallel_clause? //TODO xmlindex_parameters_clause? + ; + +local_xmlindex_clause + : LOCAL ('(' (','? PARTITION partition_name //TODO xmlindex_parameters_clause? + )+ ')')? + ; + +global_partitioned_index + : GLOBAL PARTITION BY (RANGE '(' (','? column_name)+ ')' '(' index_partitioning_clause ')' + | HASH '(' (','? column_name)+ ')' + (individual_hash_partitions + | hash_partitions_by_quantity + ) + ) + ; + +index_partitioning_clause + : PARTITION partition_name? VALUES LESS THAN '(' (','? literal)+ ')' + segment_attributes_clause? + ; + +local_partitioned_index + : LOCAL (on_range_partitioned_table + | on_list_partitioned_table + | on_hash_partitioned_table + | on_comp_partitioned_table + )? + ; + +on_range_partitioned_table + : '(' (','? PARTITION partition_name? + ((segment_attributes_clause | key_compression)+ )? + UNUSABLE? )+ + ')' + ; + +on_list_partitioned_table + : '(' (','? PARTITION partition_name? + ((segment_attributes_clause | key_compression)+ )? + UNUSABLE? )+ + ')' + ; + +on_hash_partitioned_table + : STORE IN '(' (','? tablespace)+ ')' + | '(' (','? PARTITION partition_name? (TABLESPACE tablespace)? + key_compression? UNUSABLE?)+ + ')' + ; + +on_comp_partitioned_table + : (STORE IN '(' (','? tablespace)+ ')' )? + '(' (','? PARTITION partition_name? + ((segment_attributes_clause | key_compression)+)? + UNUSABLE index_subpartition_clause? )+ + ')' + ; + +index_subpartition_clause + : STORE IN '(' (','? tablespace)+ ')' + | '(' (','? SUBPARTITION subpartition_name? (TABLESPACE tablespace)? + key_compression? UNUSABLE?)+ + ')' + ; + + +odci_parameters + : CHAR_STRING + ; + +indextype + : (id_expression '.')? id_expression + ; + +//https://docs.oracle.com/cd/E11882_01/server.112/e41084/statements_1010.htm#SQLRF00805 +alter_index + : ALTER INDEX index_name (alter_index_ops_set1 | alter_index_ops_set2) ';' + ; + +alter_index_ops_set1 + : ( deallocate_unused_clause + | allocate_extent_clause + | shrink_clause + | parallel_clause + | physical_attributes_clause + | logging_clause + )+ + ; + +alter_index_ops_set2 + : rebuild_clause + | PARAMETERS '(' odci_parameters ')' + | COMPILE + | enable_or_disable + | UNUSABLE + | visible_or_invisible + | RENAME TO new_index_name + | COALESCE + | monitoring_nomonitoring USAGE + | UPDATE BLOCK REFERENCES + | alter_index_partitioning + ; + +visible_or_invisible + : VISIBLE + | INVISIBLE + ; + +monitoring_nomonitoring + : MONITORING + | NOMONITORING + ; + +rebuild_clause + : REBUILD ( PARTITION partition_name + | SUBPARTITION subpartition_name + | REVERSE + | NOREVERSE + )? + ( parallel_clause + | TABLESPACE tablespace + | PARAMETERS '(' odci_parameters ')' +//TODO | xmlindex_parameters_clause + | ONLINE + | physical_attributes_clause + | key_compression + | logging_clause + )* + ; + +alter_index_partitioning + : modify_index_default_attrs + | add_hash_index_partition + | modify_index_partition + | rename_index_partition + | drop_index_partition + | split_index_partition + | coalesce_index_partition + | modify_index_subpartition + ; + +modify_index_default_attrs + : MODIFY DEFAULT ATTRIBUTES (FOR PARTITION partition_name)? + ( physical_attributes_clause + | TABLESPACE (tablespace | DEFAULT) + | logging_clause + ) + ; + +add_hash_index_partition + : ADD PARTITION partition_name? (TABLESPACE tablespace)? + key_compression? parallel_clause? + ; + +coalesce_index_partition + : COALESCE PARTITION parallel_clause? + ; + +modify_index_partition + : MODIFY PARTITION partition_name + ( modify_index_partitions_ops+ + | PARAMETERS '(' odci_parameters ')' + | COALESCE + | UPDATE BLOCK REFERENCES + | UNUSABLE + ) + ; + +modify_index_partitions_ops + : deallocate_unused_clause + | allocate_extent_clause + | physical_attributes_clause + | logging_clause + | key_compression + ; + +rename_index_partition + : RENAME (PARTITION partition_name | SUBPARTITION subpartition_name) + TO new_partition_name + ; + +drop_index_partition + : DROP PARTITION partition_name + ; + +split_index_partition + : SPLIT PARTITION partition_name_old AT '(' (','? literal)+ ')' + (INTO '(' index_partition_description ',' index_partition_description ')' ) ? parallel_clause? + ; + +index_partition_description + : PARTITION (partition_name ( (segment_attributes_clause | key_compression)+ + | PARAMETERS '(' odci_parameters ')' + ) + UNUSABLE? + )? + ; + +modify_index_subpartition + : MODIFY SUBPARTITION subpartition_name (UNUSABLE + | allocate_extent_clause + | deallocate_unused_clause + ) + ; + +partition_name_old + : partition_name + ; + +new_partition_name + : partition_name + ; + +new_index_name + : index_name + ; + +create_user + : CREATE USER + user_object_name + ( identified_by + | identified_other_clause + | user_tablespace_clause + | quota_clause + | profile_clause + | password_expire_clause + | user_lock_clause + | user_editions_clause + | container_clause + )+ ';' + ; + +// The standard clauses only permit one user per statement. +// The proxy clause allows multiple users for a proxy designation. +alter_user + : ALTER USER + user_object_name + ( alter_identified_by + | identified_other_clause + | user_tablespace_clause + | quota_clause + | profile_clause + | user_default_role_clause + | password_expire_clause + | user_lock_clause + | alter_user_editions_clause + | container_clause + | container_data_clause + )+ + ';' + | (','? user_object_name)+ proxy_clause ';' + ; + +alter_identified_by + : identified_by (REPLACE id_expression)? + ; + +identified_by + : IDENTIFIED BY id_expression + ; + +identified_other_clause + : IDENTIFIED (EXTERNALLY | GLOBALLY) (AS quoted_string)? + ; + +user_tablespace_clause + : (DEFAULT | TEMPORARY) TABLESPACE id_expression + ; + +quota_clause + : QUOTA (size_clause | UNLIMITED) ON id_expression + ; + +profile_clause + : PROFILE id_expression + ; + +role_clause + : (','? role_name)+ + | ALL (EXCEPT (','? role_name)+)* + ; + +user_default_role_clause + : DEFAULT ROLE (NONE | role_clause) + ; + +password_expire_clause + : PASSWORD EXPIRE + ; + +user_lock_clause + : ACCOUNT (LOCK | UNLOCK) + ; + +user_editions_clause + : ENABLE EDITIONS + ; + +alter_user_editions_clause + : user_editions_clause (FOR (','? regular_id)+)? FORCE? + ; + +proxy_clause + : REVOKE CONNECT THROUGH (ENTERPRISE USERS | user_object_name) + | GRANT CONNECT THROUGH + ( ENTERPRISE USERS + | user_object_name + (WITH (NO ROLES | ROLE role_clause))? + (AUTHENTICATION REQUIRED)? + (AUTHENTICATED USING (PASSWORD | CERTIFICATE | DISTINGUISHED NAME))? + ) + ; + +container_names + : LEFT_PAREN (','? id_expression)+ RIGHT_PAREN + ; + +set_container_data + : SET CONTAINER_DATA EQUALS_OP (ALL | DEFAULT | container_names) + ; + +add_rem_container_data + : (ADD | REMOVE) CONTAINER_DATA EQUALS_OP container_names + ; + +container_data_clause + : set_container_data + | add_rem_container_data (FOR container_tableview_name)? + ; + +// https://docs.oracle.com/cd/E11882_01/server.112/e41084/statements_4005.htm#SQLRF01105 +analyze + : ( ANALYZE (TABLE tableview_name | INDEX index_name) partition_extention_clause? + | ANALYZE CLUSTER cluster_name + ) + + ( validation_clauses + | LIST CHAINED ROWS into_clause1? + | DELETE SYSTEM? STATISTICS + ) + ';' + ; + +partition_extention_clause + : PARTITION ( '(' partition_name ')' + | FOR '(' (','? partition_key_value)+ ')' + ) + | SUBPARTITION ( '(' subpartition_name ')' + | FOR '(' (','? subpartition_key_value)+ ')' + ) + ; + +validation_clauses + : VALIDATE REF UPDATE (SET DANGLING TO NULL)? + | VALIDATE STRUCTURE + ( CASCADE FAST + | CASCADE online_or_offline? into_clause? + | CASCADE + )? + online_or_offline? into_clause? + ; + +online_or_offline + : OFFLINE + | ONLINE + ; + +into_clause1 + : INTO tableview_name? + ; + +//Making assumption on partition ad subpartition key value clauses +partition_key_value + : literal + ; + +subpartition_key_value + : literal + ; + +//https://docs.oracle.com/cd/E11882_01/server.112/e41084/statements_4006.htm#SQLRF01106 +associate_statistics + : ASSOCIATE STATISTICS + WITH (column_association | function_association) + storage_table_clause? + ';' + ; + +column_association + : COLUMNS (','? tableview_name '.' column_name)+ using_statistics_type + ; + +function_association + : ( FUNCTIONS (','? function_name)+ + | PACKAGES (','? package_name)+ + | TYPES (','? type_name)+ + | INDEXES (','? index_name)+ + | INDEXTYPES (','? indextype_name)+ + ) + + ( using_statistics_type + | default_cost_clause (',' default_selectivity_clause)? + | default_selectivity_clause (',' default_cost_clause)? + ) + ; + +indextype_name + : id_expression + ; + + +using_statistics_type + : USING (statistics_type_name | NULL) + ; + +statistics_type_name + : regular_id + ; + +default_cost_clause + : DEFAULT COST '(' cpu_cost ',' io_cost ',' network_cost ')' + ; + +cpu_cost + : UNSIGNED_INTEGER + ; + +io_cost + : UNSIGNED_INTEGER + ; + +network_cost + : UNSIGNED_INTEGER + ; + +default_selectivity_clause + : DEFAULT SELECTIVITY default_selectivity + ; + +default_selectivity + : UNSIGNED_INTEGER + ; + +storage_table_clause + : WITH (SYSTEM | USER) MANAGED STORAGE TABLES + ; + +// https://docs.oracle.com/database/121/SQLRF/statements_4008.htm#SQLRF56110 +unified_auditing + : {version12}? + AUDIT (POLICY policy_name ((BY | EXCEPT) (','? audit_user)+ )? + (WHENEVER NOT? SUCCESSFUL)? + | CONTEXT NAMESPACE oracle_namespace + ATTRIBUTES (','? attribute_name)+ (BY (','? audit_user)+)? + ) + ';' + ; + +policy_name + : identifier + ; + +// https://docs.oracle.com/cd/E11882_01/server.112/e41084/statements_4007.htm#SQLRF01107 +// https://docs.oracle.com/database/121/SQLRF/statements_4007.htm#SQLRF01107 + +audit_traditional + : AUDIT ( audit_operation_clause (auditing_by_clause | IN SESSION CURRENT)? + | audit_schema_object_clause + | NETWORK + | audit_direct_path + ) + (BY (SESSION | ACCESS) )? (WHENEVER NOT? SUCCESSFUL)? + audit_container_clause? + ';' + ; + +audit_direct_path + : {version12}? DIRECT_PATH auditing_by_clause + ; + +audit_container_clause + : {version12}? (CONTAINER EQUALS_OP (CURRENT | ALL)) + ; + +audit_operation_clause + : ( (','? (sql_statement_shortcut | ALL STATEMENTS?) )+ + | (','? (system_privilege | ALL PRIVILEGES) )+ + ) + ; + +auditing_by_clause + : BY (','? audit_user)+ + ; + +audit_user + : regular_id + ; + +audit_schema_object_clause + : ( (','? sql_operation)+ | ALL) auditing_on_clause + ; + +sql_operation + : ALTER + | AUDIT + | COMMENT + | DELETE + | EXECUTE + | FLASHBACK + | GRANT + | INDEX + | INSERT + | LOCK + | READ + | RENAME + | SELECT + | UPDATE + ; + +auditing_on_clause + : ON ( object_name + | DIRECTORY regular_id + | MINING MODEL model_name + | {version12}? SQL TRANSLATION PROFILE profile_name + | DEFAULT + ) + ; + +model_name + : (id_expression '.')? id_expression + ; + +object_name + : (id_expression '.')? id_expression + ; + +profile_name + : (id_expression '.')? id_expression + ; + +sql_statement_shortcut + : ALTER SYSTEM + | CLUSTER + | CONTEXT + | DATABASE LINK + | DIMENSION + | DIRECTORY + | INDEX + | MATERIALIZED VIEW + | NOT EXISTS + | OUTLINE + | {version12}? PLUGGABLE DATABASE + | PROCEDURE + | PROFILE + | PUBLIC DATABASE LINK + | PUBLIC SYNONYM + | ROLE + | ROLLBACK SEGMENT + | SEQUENCE + | SESSION + | SYNONYM + | SYSTEM AUDIT + | SYSTEM GRANT + | TABLE + | TABLESPACE + | TRIGGER + | TYPE + | USER + | VIEW + | ALTER SEQUENCE + | ALTER TABLE + | COMMENT TABLE + | DELETE TABLE + | EXECUTE PROCEDURE + | GRANT DIRECTORY + | GRANT PROCEDURE + | GRANT SEQUENCE + | GRANT TABLE + | GRANT TYPE + | INSERT TABLE + | LOCK TABLE + | SELECT SEQUENCE + | SELECT TABLE + | UPDATE TABLE + ; + +drop_index + : DROP INDEX index_name ';' + ; + +grant_statement + : GRANT + ( ','? + (role_name + | system_privilege + | object_privilege paren_column_list? + ) + )+ + (ON grant_object_name)? + TO (','? grantee_name | PUBLIC)+ + (WITH (ADMIN | DELEGATE) OPTION)? + (WITH HIERARCHY OPTION)? + (WITH GRANT OPTION)? + container_clause? ';' + ; + +container_clause + : CONTAINER EQUALS_OP (CURRENT | ALL) + ; + +create_directory + : CREATE (OR REPLACE)? DIRECTORY directory_name AS directory_path + ';' + ; + +directory_name + : regular_id + ; + +directory_path + : CHAR_STRING + ; + +// https://docs.oracle.com/cd/E11882_01/appdev.112/e25519/alter_library.htm#LNPLS99946 +// https://docs.oracle.com/database/121/LNPLS/alter_library.htm#LNPLS99946 +alter_library + : ALTER LIBRARY library_name + ( COMPILE library_debug? compiler_parameters_clause* (REUSE SETTINGS)? + | library_editionable + ) + ';' + ; + +library_editionable + : {version12}? (EDITIONABLE | NONEDITIONABLE) + ; + +library_debug + : {version12}? DEBUG + ; + + +compiler_parameters_clause + : parameter_name EQUALS_OP parameter_value + ; + +parameter_value + : regular_id + ; + +library_name + : (regular_id '.')? regular_id + ; + +// https://docs.oracle.com/cd/E11882_01/server.112/e41084/statements_4004.htm#SQLRF01104 +// https://docs.oracle.com/database/121/SQLRF/statements_4004.htm#SQLRF01104 +alter_view + : ALTER VIEW tableview_name + ( ADD out_of_line_constraint + | MODIFY CONSTRAINT constraint_name (RELY | NORELY) + | DROP ( CONSTRAINT constraint_name + | PRIMARY KEY + | UNIQUE '(' (','? column_name)+ ')' + ) + | COMPILE + | READ (ONLY | WRITE) + | alter_view_editionable? + ) + ';' + ; + +alter_view_editionable + : {version12}? (EDITIONABLE | NONEDITIONABLE) + ; + +create_view + : CREATE (OR REPLACE)? (OR? FORCE)? EDITIONING? VIEW + tableview_name view_options? + AS subquery subquery_restriction_clause? + ; + +view_options + : view_alias_constraint + | object_view_clause +// | xmltype_view_clause //TODO + ; + +view_alias_constraint + : '(' ( ','? (table_alias inline_constraint* | out_of_line_constraint) )+ ')' + ; + +object_view_clause + : OF type_name + ( WITH OBJECT (IDENTIFIER|ID|OID) ( DEFAULT | '(' (','? REGULAR_ID)+ ')' ) + | UNDER tableview_name + ) + ( '(' ( ','? (out_of_line_constraint | REGULAR_ID inline_constraint ) )+ ')' )* + ; + +inline_constraint + : (CONSTRAINT constraint_name)? + ( NOT? NULL + | UNIQUE + | PRIMARY KEY + | references_clause + | check_constraint + ) + constraint_state? + ; + +inline_ref_constraint + : SCOPE IS tableview_name + | WITH ROWID + | (CONSTRAINT constraint_name)? references_clause constraint_state? + ; + +out_of_line_ref_constraint + : SCOPE FOR '(' ref_col_or_attr=regular_id ')' IS tableview_name + | REF '(' ref_col_or_attr=regular_id ')' WITH ROWID + | (CONSTRAINT constraint_name)? FOREIGN KEY '(' ( ','? ref_col_or_attr=regular_id)+ ')' references_clause constraint_state? + ; + +out_of_line_constraint + : ( (CONSTRAINT constraint_name)? + ( UNIQUE '(' (','? column_name)+ ')' + | PRIMARY KEY '(' (','? column_name)+ ')' + | foreign_key_clause + | CHECK '(' expression ')' + ) + ) + constraint_state? + ; + +constraint_state + : ( NOT? DEFERRABLE + | INITIALLY (IMMEDIATE|DEFERRED) + | (RELY|NORELY) + | (ENABLE|DISABLE) + | (VALIDATE|NOVALIDATE) + | using_index_clause + )+ + ; + +alter_tablespace + : ALTER TABLESPACE tablespace + ( DEFAULT table_compression? storage_clause? + | MINIMUM EXTENT size_clause + | RESIZE size_clause + | COALESCE + | SHRINK SPACE_KEYWORD (KEEP size_clause)? + | RENAME TO new_tablespace_name + | begin_or_end BACKUP + | datafile_tempfile_clauses + | tablespace_logging_clauses + | tablespace_group_clause + | tablespace_state_clauses + | autoextend_clause + | flashback_mode_clause + | tablespace_retention_clause + ) + ';' + ; + +datafile_tempfile_clauses + : ADD (datafile_specification | tempfile_specification) + | DROP (DATAFILE | TEMPFILE) (filename | UNSIGNED_INTEGER) (KEEP size_clause)? + | SHRINK TEMPFILE (filename | UNSIGNED_INTEGER) (KEEP size_clause)? + | RENAME DATAFILE (','? filename)+ TO (','? filename)+ + | (DATAFILE | TEMPFILE) (online_or_offline) + ; + +tablespace_logging_clauses + : logging_clause + | NO? FORCE LOGGING + ; + +tablespace_group_clause + : TABLESPACE GROUP (tablespace_group_name | CHAR_STRING) + ; + +tablespace_group_name + : regular_id + ; + +tablespace_state_clauses + : ONLINE + | OFFLINE (NORMAL | TEMPORARY | IMMEDIATE)? + | READ (ONLY | WRITE) + | PERMANENT + | TEMPORARY + ; + +flashback_mode_clause + : FLASHBACK (ON | OFF) + ; + +new_tablespace_name + : tablespace + ; + +create_tablespace + : CREATE (BIGFILE | SMALLFILE)? + ( permanent_tablespace_clause + | temporary_tablespace_clause + | undo_tablespace_clause + ) + ';' + ; + +permanent_tablespace_clause + : TABLESPACE id_expression datafile_specification? + ( MINIMUM EXTENT size_clause + | BLOCKSIZE size_clause + | logging_clause + | FORCE LOGGING + | (ONLINE | OFFLINE) + | ENCRYPTION tablespace_encryption_spec + | DEFAULT //TODO table_compression? storage_clause? + | extent_management_clause + | segment_management_clause + | flashback_mode_clause + )* + ; + +tablespace_encryption_spec + : USING encrypt_algorithm=CHAR_STRING + ; + +logging_clause + : LOGGING + | NOLOGGING + | FILESYSTEM_LIKE_LOGGING + ; + +extent_management_clause + : EXTENT MANAGEMENT LOCAL + ( AUTOALLOCATE + | UNIFORM (SIZE size_clause)? + )? + ; + +segment_management_clause + : SEGMENT SPACE_KEYWORD MANAGEMENT (AUTO | MANUAL) + ; + +temporary_tablespace_clause + : TEMPORARY TABLESPACE tablespace_name=id_expression + tempfile_specification? + tablespace_group_clause? extent_management_clause? + ; + +undo_tablespace_clause + : UNDO TABLESPACE tablespace_name=id_expression + datafile_specification? + extent_management_clause? tablespace_retention_clause? + ; + +tablespace_retention_clause + : RETENTION (GUARANTEE | NOGUARANTEE) + ; + +datafile_specification + : DATAFILE + (','? datafile_tempfile_spec) + ; + +tempfile_specification + : TEMPFILE + (','? datafile_tempfile_spec) + ; + +datafile_tempfile_spec + : CHAR_STRING? (SIZE size_clause)? REUSE? autoextend_clause? + ; + +redo_log_file_spec + : DATAFILE ( CHAR_STRING + | '(' ( ','? CHAR_STRING )+ ')' + )? + (SIZE size_clause)? + (BLOCKSIZE size_clause)? + REUSE? + ; + +autoextend_clause + : AUTOEXTEND (OFF | ON (NEXT size_clause)? maxsize_clause? ) + ; + +maxsize_clause + : MAXSIZE (UNLIMITED | size_clause) + ; + +build_clause + : BUILD (IMMEDIATE | DEFERRED) + ; + +parallel_clause + : NOPARALLEL + | PARALLEL parallel_count=UNSIGNED_INTEGER? + ; + +alter_materialized_view + : ALTER MATERIALIZED VIEW tableview_name + ( physical_attributes_clause + | modify_mv_column_clause + | table_compression + | (','? lob_storage_clause)+ + | (','? modify_lob_storage_clause)+ +//TODO | alter_table_partitioning + | parallel_clause + | logging_clause + | allocate_extent_clause + | deallocate_unused_clause + | shrink_clause + | (cache_or_nocache) + )? + alter_iot_clauses? + (USING INDEX physical_attributes_clause)? + alter_mv_option1? + ( enable_or_disable QUERY REWRITE + | COMPILE + | CONSIDER FRESH + )? + ';' + ; + +alter_mv_option1 + : alter_mv_refresh +//TODO | MODIFY scoped_table_ref_constraint + ; + +alter_mv_refresh + : REFRESH ( FAST + | COMPLETE + | FORCE + | ON (DEMAND | COMMIT) + | START WITH expression + | NEXT expression + | WITH PRIMARY KEY + | USING DEFAULT? MASTER ROLLBACK SEGMENT rollback_segment? + | USING (ENFORCED | TRUSTED) CONSTRAINTS + )+ + ; + +rollback_segment + : regular_id + ; + +modify_mv_column_clause + : MODIFY '(' column_name (ENCRYPT encryption_spec | DECRYPT)? ')' + ; + +alter_materialized_view_log + : ALTER MATERIALIZED VIEW LOG FORCE? ON tableview_name + ( physical_attributes_clause + | add_mv_log_column_clause +//TODO | alter_table_partitioning + | parallel_clause + | logging_clause + | allocate_extent_clause + | shrink_clause + | move_mv_log_clause + | cache_or_nocache + )? + mv_log_augmentation? mv_log_purge_clause? + ';' + ; +add_mv_log_column_clause + : ADD '(' column_name ')' + ; + +move_mv_log_clause + : MOVE segment_attributes_clause parallel_clause? + ; + +mv_log_augmentation + : ADD ( ( OBJECT ID + | PRIMARY KEY + | ROWID + | SEQUENCE + ) + ('(' (','? column_name)+ ')')? + + | '(' (','? column_name)+ ')' + ) + new_values_clause? + ; + +// Should bound this to just date/time expr +datetime_expr + : expression + ; + +// Should bound this to just interval expr +interval_expr + : expression + ; + +synchronous_or_asynchronous + : SYNCHRONOUS + | ASYNCHRONOUS + ; + +including_or_excluding + : INCLUDING + | EXCLUDING + ; + + +create_materialized_view_log + : CREATE MATERIALIZED VIEW LOG ON tableview_name + ( ( physical_attributes_clause + | TABLESPACE tablespace_name=id_expression + | logging_clause + | (CACHE | NOCACHE) + )+ + )? + parallel_clause? + // table_partitioning_clauses TODO + ( WITH + ( ','? + ( OBJECT ID + | PRIMARY KEY + | ROWID + | SEQUENCE + | COMMIT SCN + ) + )* + ('(' ( ','? regular_id )+ ')' new_values_clause? )? + mv_log_purge_clause? + )* + ; + +new_values_clause + : (INCLUDING | EXCLUDING ) NEW VALUES + ; + +mv_log_purge_clause + : PURGE + ( IMMEDIATE (SYNCHRONOUS | ASYNCHRONOUS)? + // |START WITH CLAUSES TODO + ) + ; + +create_materialized_view + : CREATE MATERIALIZED VIEW tableview_name + (OF type_name )? +//scoped_table_ref and column alias goes here TODO + ( ON PREBUILT TABLE ( (WITH | WITHOUT) REDUCED PRECISION)? + | physical_properties? (CACHE | NOCACHE)? parallel_clause? build_clause? + ) + ( USING INDEX ( (physical_attributes_clause | TABLESPACE mv_tablespace=id_expression)+ )* + | USING NO INDEX + )? + create_mv_refresh? + (FOR UPDATE)? + ( (DISABLE | ENABLE) QUERY REWRITE )? + AS subquery + ';' + ; + +create_mv_refresh + : ( NEVER REFRESH + | REFRESH + ( (FAST | COMPLETE | FORCE) + | ON (DEMAND | COMMIT) + | (START WITH | NEXT) //date goes here TODO + | WITH (PRIMARY KEY | ROWID) + | USING + ( DEFAULT (MASTER | LOCAL)? ROLLBACK SEGMENT + | (MASTER | LOCAL)? ROLLBACK SEGMENT rb_segment=REGULAR_ID + ) + | USING (ENFORCED | TRUSTED) CONSTRAINTS + )+ + ) + ; + +create_context + : CREATE (OR REPLACE)? CONTEXT oracle_namespace USING (schema_object_name '.')? package_name + (INITIALIZED (EXTERNALLY | GLOBALLY) + | ACCESSED GLOBALLY + )? + ';' + ; + +oracle_namespace + : id_expression + ; + +//https://docs.oracle.com/cd/E11882_01/server.112/e41084/statements_5001.htm#SQLRF01201 +create_cluster + : CREATE CLUSTER cluster_name '(' (','? column_name datatype SORT?)+ ')' + ( physical_attributes_clause + | SIZE size_clause + | TABLESPACE tablespace + | INDEX + | (SINGLE TABLE)? HASHKEYS UNSIGNED_INTEGER (HASH IS expression)? + )* + parallel_clause? (ROWDEPENDENCIES | NOROWDEPENDENCIES)? + (CACHE | NOCACHE)? + ';' + ; + +create_table + : CREATE (GLOBAL TEMPORARY)? TABLE tableview_name + (relational_table | object_table | xmltype_table) (AS select_statement)? + ';' + ; + +xmltype_table + : OF XMLTYPE ('(' object_properties ')')? + (XMLTYPE xmltype_storage)? xmlschema_spec? xmltype_virtual_columns? + (ON COMMIT (DELETE | PRESERVE) ROWS)? oid_clause? oid_index_clause? + physical_properties? column_properties? table_partitioning_clauses? + (CACHE | NOCACHE)? (RESULT_CACHE '(' MODE (DEFAULT | FORCE) ')')? + parallel_clause? (ROWDEPENDENCIES | NOROWDEPENDENCIES)? + (enable_disable_clause+)? row_movement_clause? + flashback_archive_clause? + ; + +xmltype_virtual_columns + : VIRTUAL COLUMNS '(' (','? column_name AS '(' expression ')')+ ')' + ; + +xmltype_column_properties + : XMLTYPE COLUMN? column_name xmltype_storage? xmlschema_spec? + ; + +xmltype_storage + : STORE AS (OBJECT RELATIONAL + | (SECUREFILE | BASICFILE)? (CLOB | BINARY XML) (lob_segname ('(' lob_parameters ')')? | '(' lob_parameters ')')? + ) + | STORE VARRAYS AS (LOBS | TABLES) + ; + +xmlschema_spec + : (XMLSCHEMA DELIMITED_ID)? ELEMENT DELIMITED_ID + (allow_or_disallow NONSCHEMA)? + (allow_or_disallow ANYSCHEMA)? + ; + +object_table + : OF type_name object_table_substitution? + ('(' (','? object_properties)+ ')')? + (ON COMMIT (DELETE | PRESERVE) ROWS)? oid_clause? oid_index_clause? + physical_properties? column_properties? table_partitioning_clauses? + (CACHE | NOCACHE)? (RESULT_CACHE '(' MODE (DEFAULT | FORCE) ')')? + parallel_clause? (ROWDEPENDENCIES | NOROWDEPENDENCIES)? + (enable_disable_clause+)? row_movement_clause? flashback_archive_clause? + ; + +oid_index_clause + : OIDINDEX index_name? '(' (physical_attributes_clause | TABLESPACE tablespace)+ ')' + ; + +oid_clause + : OBJECT IDENTIFIER IS (SYSTEM GENERATED | PRIMARY KEY) + ; + +object_properties + : (column_name | attribute_name) (DEFAULT expression)? ((','? inline_constraint)+ | inline_ref_constraint)? + | out_of_line_constraint + | out_of_line_ref_constraint + | supplemental_logging_props + ; + +object_table_substitution + : NOT? SUBSTITUTABLE AT ALL LEVELS + ; + +relational_table + : ('(' relational_properties ')')? + (ON COMMIT (DELETE | PRESERVE) ROWS)? + physical_properties? column_properties? table_partitioning_clauses? + (CACHE | NOCACHE)? (RESULT_CACHE '(' MODE (DEFAULT | FORCE) ')')? + parallel_clause? + (ROWDEPENDENCIES | NOROWDEPENDENCIES)? + (enable_disable_clause+)? row_movement_clause? flashback_archive_clause? + ; + +relational_properties + : (','? (column_definition + | virtual_column_definition + | out_of_line_constraint + | out_of_line_ref_constraint + | supplemental_logging_props + ) + )+ + ; + +table_partitioning_clauses + : range_partitions + | list_partitions + | hash_partitions + | composite_range_partitions + | composite_list_partitions + | composite_hash_partitions + | reference_partitioning + | system_partitioning + ; + +range_partitions + : PARTITION BY RANGE '(' (','? column_name)+ ')' + (INTERVAL '(' expression ')' (STORE IN '(' (','? tablespace)+ ')' )? )? + '(' (','? PARTITION partition_name? range_values_clause table_partition_description)+ ')' + ; + +list_partitions + : PARTITION BY LIST '(' column_name ')' + '(' (','? PARTITION partition_name? list_values_clause table_partition_description )+ ')' + ; + +hash_partitions + : PARTITION BY HASH '(' (','? column_name)+ ')' + (individual_hash_partitions | hash_partitions_by_quantity) + ; + +individual_hash_partitions + : '(' (','? PARTITION partition_name? partitioning_storage_clause?)+ ')' + ; + +hash_partitions_by_quantity + : PARTITIONS hash_partition_quantity + (STORE IN '(' (','? tablespace)+ ')')? + (table_compression | key_compression)? + (OVERFLOW STORE IN '(' (','? tablespace)+ ')' )? + ; + +hash_partition_quantity + : UNSIGNED_INTEGER + ; + +composite_range_partitions + : PARTITION BY RANGE '(' (','? column_name)+ ')' + (INTERVAL '(' expression ')' (STORE IN '(' (','? tablespace)+ ')' )? )? + (subpartition_by_range | subpartition_by_list | subpartition_by_hash) + '(' (','? range_partition_desc)+ ')' + ; + +composite_list_partitions + : PARTITION BY LIST '(' column_name ')' + (subpartition_by_range | subpartition_by_list | subpartition_by_hash) + '(' (','? list_partition_desc)+ ')' + ; + +composite_hash_partitions + : PARTITION BY HASH '(' (',' column_name)+ ')' + (subpartition_by_range | subpartition_by_list | subpartition_by_hash) + (individual_hash_partitions | hash_partitions_by_quantity) + ; + +reference_partitioning + : PARTITION BY REFERENCE '(' regular_id ')' + ('(' (','? reference_partition_desc)+ ')')? + ; + +reference_partition_desc + : PARTITION partition_name? table_partition_description + ; + +system_partitioning + : PARTITION BY SYSTEM + (PARTITIONS UNSIGNED_INTEGER | (','? reference_partition_desc)+)? + ; + +range_partition_desc + : PARTITION partition_name? range_values_clause table_partition_description + ( ( '(' ( (','? range_subpartition_desc)+ + | (','? list_subpartition_desc)+ + | (','? individual_hash_subparts)+ + ) + ')' + | hash_subparts_by_quantity + ) + )? + ; + +list_partition_desc + : PARTITION partition_name? list_values_clause table_partition_description + ( ( '(' ( (','? range_subpartition_desc)+ + | (','? list_subpartition_desc)+ + | (','? individual_hash_subparts)+ + ) + ')' + | hash_subparts_by_quantity + ) + )? + ; + +subpartition_template + : SUBPARTITION TEMPLATE + ( ( '(' ( (','? range_subpartition_desc)+ + | (','? list_subpartition_desc)+ + | (','? individual_hash_subparts)+ + ) + ')' + | hash_subpartition_quantity + ) + ) + ; + +hash_subpartition_quantity + : UNSIGNED_INTEGER + ; + +subpartition_by_range + : SUBPARTITION BY RANGE '(' (','? column_name)+ ')' subpartition_template? + ; + +subpartition_by_list + : SUBPARTITION BY LIST '(' column_name ')' subpartition_template? + ; + +subpartition_by_hash + : SUBPARTITION BY HASH '(' (','? column_name)+ ')' + (SUBPARTITIONS UNSIGNED_INTEGER (STORE IN '(' (','? tablespace)+ ')' )? + | subpartition_template + )? + ; + +subpartition_name + : partition_name + ; + +range_subpartition_desc + : SUBPARTITION subpartition_name? range_values_clause partitioning_storage_clause? + ; + +list_subpartition_desc + : SUBPARTITION subpartition_name? list_values_clause partitioning_storage_clause? + ; + +individual_hash_subparts + : SUBPARTITION subpartition_name? partitioning_storage_clause? + ; + +hash_subparts_by_quantity + : SUBPARTITIONS UNSIGNED_INTEGER (STORE IN '(' (','? tablespace)+ ')' )? + ; + +range_values_clause + : VALUES LESS THAN '(' (','? literal)+ ')' + ; + +list_values_clause + : VALUES '(' ((','? literal)+ | DEFAULT) ')' + ; + +table_partition_description + : deferred_segment_creation? segment_attributes_clause? + (table_compression | key_compression)? + (OVERFLOW segment_attributes_clause? )? + (lob_storage_clause | varray_col_properties | nested_table_col_properties)? + ; + +partitioning_storage_clause + : ( TABLESPACE tablespace + | OVERFLOW (TABLESPACE tablespace)? + | table_compression + | key_compression + | lob_partitioning_storage + | VARRAY varray_item STORE AS (BASICFILE | SECUREFILE)? LOB lob_segname + )+ + ; + +lob_partitioning_storage + : LOB '(' lob_item ')' + STORE AS (BASICFILE | SECUREFILE)? + (lob_segname ('(' TABLESPACE tablespace ')' )? + | '(' TABLESPACE tablespace ')' + ) + ; + +datatype_null_enable + : column_name datatype + SORT? (DEFAULT expression)? (ENCRYPT ( USING CHAR_STRING )? (IDENTIFIED BY REGULAR_ID)? CHAR_STRING? ( NO? SALT )? )? + (NOT NULL)? (ENABLE | DISABLE)? + ; + +//Technically, this should only allow 'K' | 'M' | 'G' | 'T' | 'P' | 'E' +// but having issues with examples/numbers01.sql line 11 "sysdate -1m" +size_clause + : UNSIGNED_INTEGER REGULAR_ID? + ; + + +table_compression + : COMPRESS + ( BASIC + | FOR ( OLTP + | (QUERY | ARCHIVE) (LOW | HIGH)? + ) + )? + | NOCOMPRESS + ; + +physical_attributes_clause + : (PCTFREE pctfree=UNSIGNED_INTEGER + | PCTUSED pctused=UNSIGNED_INTEGER + | INITRANS inittrans=UNSIGNED_INTEGER + | storage_clause + )+ + ; + +storage_clause + : STORAGE '(' + (INITIAL initial_size=size_clause + | NEXT next_size=size_clause + | MINEXTENTS minextents=(UNSIGNED_INTEGER | UNLIMITED) + | MAXEXTENTS minextents=(UNSIGNED_INTEGER | UNLIMITED) + | PCTINCREASE pctincrease=UNSIGNED_INTEGER + | FREELISTS freelists=UNSIGNED_INTEGER + | FREELIST GROUPS freelist_groups=UNSIGNED_INTEGER + | OPTIMAL (size_clause | NULL ) + | BUFFER_POOL (KEEP | RECYCLE | DEFAULT) + | FLASH_CACHE (KEEP | NONE | DEFAULT) + | ENCRYPT + )+ + ')' + ; + +deferred_segment_creation + : SEGMENT CREATION (IMMEDIATE | DEFERRED) + ; + +segment_attributes_clause + : ( physical_attributes_clause + | TABLESPACE tablespace_name=id_expression + | logging_clause + )+ + ; + +physical_properties + : deferred_segment_creation? segment_attributes_clause table_compression? + ; + +row_movement_clause + : (ENABLE | DISABLE)? ROW MOVEMENT + ; + +flashback_archive_clause + : FLASHBACK ARCHIVE flashback_archive=REGULAR_ID + | NO FLASHBACK ARCHIVE + ; + +log_grp + : UNSIGNED_INTEGER + ; + +supplemental_table_logging + : ADD + (','? SUPPLEMENTAL LOG (supplemental_log_grp_clause | supplemental_id_key_clause) )* + | DROP (','? SUPPLEMENTAL LOG (supplemental_id_key_clause | GROUP log_grp) )* + ; + +supplemental_log_grp_clause + : GROUP log_grp '(' (','? regular_id (NO LOG)?)+ ')' ALWAYS? + ; + +supplemental_id_key_clause + : DATA '('( ','? ( ALL + | PRIMARY KEY + | UNIQUE + | FOREIGN KEY + ) + )+ + ')' + COLUMNS + ; + +allocate_extent_clause + : ALLOCATE EXTENT + ( '(' ( SIZE size_clause + | DATAFILE datafile=CHAR_STRING + | INSTANCE inst_num=UNSIGNED_INTEGER + )+ + ')' + )? + ; + +deallocate_unused_clause + : DEALLOCATE UNUSED (KEEP size_clause)? + ; + +shrink_clause + : SHRINK SPACE_KEYWORD COMPACT? CASCADE? + ; + +records_per_block_clause + : (MINIMIZE | NOMINIMIZE)? RECORDS_PER_BLOCK + ; + +upgrade_table_clause + : UPGRADE (NOT? INCLUDING DATA) column_properties + ; + +drop_table + : DROP TABLE tableview_name PURGE? SEMICOLON + ; + +comment_on_column + : COMMENT ON COLUMN tableview_name PERIOD column_name IS quoted_string + ; + +enable_or_disable + : ENABLE + | DISABLE + ; +allow_or_disallow + : ALLOW + | DISALLOW + ; + +// Synonym DDL Clauses + +create_synonym + // Synonym's schema cannot be specified for public synonyms + : CREATE (OR REPLACE)? PUBLIC SYNONYM synonym_name FOR (schema_name PERIOD)? schema_object_name (AT_SIGN link_name)? + | CREATE (OR REPLACE)? SYNONYM (schema_name PERIOD)? synonym_name FOR (schema_name PERIOD)? schema_object_name (AT_SIGN link_name)? + ; + +comment_on_table + : COMMENT ON TABLE tableview_name IS quoted_string + ; + +alter_cluster + : ALTER CLUSTER cluster_name + ( physical_attributes_clause + | SIZE size_clause + | allocate_extent_clause + | deallocate_unused_clause + | cache_or_nocache + )+ + parallel_clause? + ';' + ; + +cache_or_nocache + : CACHE + | NOCACHE + ; + +database_name + : regular_id + ; + +alter_database + : ALTER DATABASE database_name? + ( startup_clauses + | recovery_clauses + | database_file_clauses + | logfile_clauses + | controlfile_clauses + | standby_database_clauses + | default_settings_clause + | instance_clauses + | security_clause + ) + ';' + ; + +startup_clauses + : MOUNT ((STANDBY | CLONE) DATABASE)? + | OPEN (READ WRITE)? resetlogs_or_noresetlogs? upgrade_or_downgrade? + | OPEN READ ONLY + ; + +resetlogs_or_noresetlogs + : RESETLOGS + | NORESETLOGS + ; + +upgrade_or_downgrade + : UPGRADE + | DOWNGRADE + ; + +recovery_clauses + : general_recovery + | managed_standby_recovery + | begin_or_end BACKUP + ; + +begin_or_end + : BEGIN + | END + ; + +general_recovery + : RECOVER AUTOMATIC? (FROM CHAR_STRING)? + ( (full_database_recovery | partial_database_recovery | LOGFILE CHAR_STRING )+ + ((TEST | ALLOW UNSIGNED_INTEGER CORRUPTION | parallel_clause)+ )? + | CONTINUE DEFAULT? + | CANCEL + ) + ; + +//Need to come back to +full_database_recovery + : STANDBY? DATABASE + ((UNTIL (CANCEL |TIME CHAR_STRING | CHANGE UNSIGNED_INTEGER | CONSISTENT) + | USING BACKUP CONTROLFILE + )+ + )? + ; + +partial_database_recovery + : TABLESPACE (','? tablespace)+ + | DATAFILE (','? CHAR_STRING | filenumber)+ + ; + +managed_standby_recovery + : RECOVER (MANAGED STANDBY DATABASE + ((USING CURRENT LOGFILE + | DISCONNECT (FROM SESSION)? + | NODELAY + | UNTIL CHANGE UNSIGNED_INTEGER + | UNTIL CONSISTENT + | parallel_clause + )+ + | FINISH + | CANCEL + )? + | TO LOGICAL STANDBY (db_name | KEEP IDENTITY) + ) + ; + +db_name + : regular_id + ; +database_file_clauses + : RENAME FILE (','? filename)+ TO filename + | create_datafile_clause + | alter_datafile_clause + | alter_tempfile_clause + ; + +create_datafile_clause + : CREATE DATAFILE (','? (filename | filenumber) )+ + (AS (//TODO (','? file_specification)+ | + NEW) )? + ; + +alter_datafile_clause + : DATAFILE (','? filename|filenumber)+ + ( ONLINE + | OFFLINE (FOR DROP)? + | RESIZE size_clause + | autoextend_clause + | END BACKUP + ) + ; + +alter_tempfile_clause + : TEMPFILE (','? filename|filenumber)+ + ( RESIZE size_clause + | autoextend_clause + | DROP (INCLUDING DATAFILES) + | ONLINE + | OFFLINE + ) + ; + +logfile_clauses + : (ARCHIVELOG MANUAL? | NOARCHIVELOG) + | NO? FORCE LOGGING + | RENAME FILE (','? filename)+ TO filename + | CLEAR UNARCHIVED LOGFILE (','? logfile_descriptor)+ (UNRECOVERABLE DATAFILE)? + | add_logfile_clauses + | drop_logfile_clauses + | switch_logfile_clause + | supplemental_db_logging + ; + +add_logfile_clauses + : ADD STANDBY? LOGFILE +//TODO ((INSTANCE CHAR_STRING | THREAD UNSIGNED_INTEGER)? +//TODO (','? (GROUP UNSIGNED_INTEGER)? //TODO redo_logfile_spec +//TODO )+ +//TODO | MEMBER (','? filename REUSE?)+ TO (','? logfile_descriptor)+ +//TODO ) + ; + +drop_logfile_clauses + : DROP STANDBY? + LOGFILE ((','? logfile_descriptor)+ + | MEMBER (','? filename)+ + ) + ; + +switch_logfile_clause + : SWITCH ALL LOGFILES TO BLOCKSIZE UNSIGNED_INTEGER + ; + +supplemental_db_logging + : add_or_drop + SUPPLEMENTAL LOG (DATA + | supplemental_id_key_clause + | supplemental_plsql_clause + ) + ; + +add_or_drop + : ADD + | DROP + ; + +supplemental_plsql_clause + : DATA FOR PROCEDURAL REPLICATION + ; + +logfile_descriptor + : GROUP UNSIGNED_INTEGER + | '(' (','? filename)+ ')' + | filename + ; + +controlfile_clauses + : CREATE (LOGICAL | PHYSICAL)? STANDBY CONTROLFILE AS filename REUSE? + | BACKUP CONTROLFILE TO (filename REUSE? | trace_file_clause) + ; + +trace_file_clause + : TRACE (AS filename REUSE?)? (RESETLOGS|NORESETLOGS)? + ; + +standby_database_clauses + : ( activate_standby_db_clause + | maximize_standby_db_clause + | register_logfile_clause + | commit_switchover_clause + | start_standby_clause + | stop_standby_clause + | convert_database_clause + ) + parallel_clause? + ; + +activate_standby_db_clause + : ACTIVATE (PHYSICAL | LOGICAL)? STANDBY DATABASE (FINISH APPLY)? + ; + +maximize_standby_db_clause + : SET STANDBY DATABASE TO MAXIMIZE (PROTECTION | AVAILABILITY | PERFORMANCE) + ; + +register_logfile_clause + : REGISTER (OR REPLACE)? (PHYSICAL | LOGICAL) LOGFILE //TODO (','? file_specification)+ + //TODO (FOR logminer_session_name)? + ; + +commit_switchover_clause + : (PREPARE | COMMIT) TO SWITCHOVER + ((TO (((PHYSICAL | LOGICAL)? PRIMARY | PHYSICAL? STANDBY) + ((WITH | WITHOUT)? SESSION SHUTDOWN (WAIT | NOWAIT) )? + | LOGICAL STANDBY + ) + | LOGICAL STANDBY + ) + | CANCEL + )? + ; + +start_standby_clause + : START LOGICAL STANDBY APPLY IMMEDIATE? NODELAY? + ( NEW PRIMARY regular_id + | INITIAL scn_value=UNSIGNED_INTEGER? + | SKIP_ FAILED TRANSACTION + | FINISH + )? + ; + +stop_standby_clause + : (STOP | ABORT) LOGICAL STANDBY APPLY + ; + +convert_database_clause + : CONVERT TO (PHYSICAL | SNAPSHOT) STANDBY + ; + +default_settings_clause + : DEFAULT EDITION EQUALS_OP edition_name + | SET DEFAULT (BIGFILE | SMALLFILE) TABLESPACE + | DEFAULT TABLESPACE tablespace + | DEFAULT TEMPORARY TABLESPACE (tablespace | tablespace_group_name) + | RENAME GLOBAL_NAME TO database ('.' domain)+ + | ENABLE BLOCK CHANGE TRACKING (USING FILE filename REUSE?)? + | DISABLE BLOCK CHANGE TRACKING + | flashback_mode_clause + | set_time_zone_clause + ; + +set_time_zone_clause + : SET TIMEZONE EQUALS_OP CHAR_STRING + ; + +instance_clauses + : enable_or_disable INSTANCE CHAR_STRING + ; + +security_clause + : GUARD (ALL | STANDBY | NONE) + ; + +domain + : regular_id + ; + +database + : regular_id + ; + +edition_name + : regular_id + ; + +filenumber + : UNSIGNED_INTEGER + ; + +filename + : CHAR_STRING + ; + +alter_table + : ALTER TABLE tableview_name + ( + | alter_table_properties + | constraint_clauses + | column_clauses +//TODO | alter_table_partitioning +//TODO | alter_external_table + | move_table_clause + ) + ((enable_disable_clause | enable_or_disable (TABLE LOCK | ALL TRIGGERS) )+)? + ';' + ; + +alter_table_properties + : alter_table_properties_1 + | RENAME TO tableview_name + | shrink_clause + | READ ONLY + | READ WRITE + | REKEY CHAR_STRING + ; + +alter_table_properties_1 + : ( physical_attributes_clause + | logging_clause + | table_compression + | supplemental_table_logging + | allocate_extent_clause + | deallocate_unused_clause + | (CACHE | NOCACHE) + | RESULT_CACHE '(' MODE (DEFAULT | FORCE) ')' + | upgrade_table_clause + | records_per_block_clause + | parallel_clause + | row_movement_clause + | flashback_archive_clause + )+ + alter_iot_clauses? + ; + +alter_iot_clauses + : index_org_table_clause + | alter_overflow_clause + | alter_mapping_table_clause + | COALESCE + ; + +alter_mapping_table_clause + : MAPPING TABLE (allocate_extent_clause | deallocate_unused_clause) + ; + +alter_overflow_clause + : add_overflow_clause + | OVERFLOW (segment_attributes_clause | allocate_extent_clause | shrink_clause | deallocate_unused_clause)+ + ; + +add_overflow_clause + : ADD OVERFLOW segment_attributes_clause? ('(' (','? PARTITION segment_attributes_clause?)+ ')' )? + ; + + +enable_disable_clause + : (ENABLE | DISABLE) (VALIDATE | NOVALIDATE)? + (UNIQUE '(' (','? column_name)+ ')' + | PRIMARY KEY + | CONSTRAINT constraint_name + ) using_index_clause? exceptions_clause? + CASCADE? ((KEEP | DROP) INDEX)? + ; + +using_index_clause + : USING INDEX (index_name | '(' create_index ')' | index_attributes )? + ; + +index_attributes + : ( physical_attributes_clause + | logging_clause + | TABLESPACE (tablespace | DEFAULT) + | key_compression + | sort_or_nosort + | REVERSE + | visible_or_invisible + | parallel_clause + )+ + ; + +sort_or_nosort + : SORT + | NOSORT + ; + +exceptions_clause + : EXCEPTIONS INTO tableview_name + ; + +move_table_clause + : MOVE ONLINE? segment_attributes_clause? table_compression? index_org_table_clause? ((lob_storage_clause | varray_col_properties)+)? parallel_clause? + ; + +index_org_table_clause + : (mapping_table_clause | PCTTHRESHOLD UNSIGNED_INTEGER | key_compression) index_org_overflow_clause? + ; + +mapping_table_clause + : MAPPING TABLE + | NOMAPPING + ; + +key_compression + : NOCOMPRESS + | COMPRESS UNSIGNED_INTEGER + ; + +index_org_overflow_clause + : (INCLUDING column_name)? OVERFLOW segment_attributes_clause? + ; + +column_clauses + : add_modify_drop_column_clauses + | rename_column_clause + | modify_collection_retrieval + | modify_lob_storage_clause + ; + +modify_collection_retrieval + : MODIFY NESTED TABLE collection_item RETURN AS (LOCATOR | VALUE) + ; + +collection_item + : tableview_name + ; + +rename_column_clause + : RENAME COLUMN old_column_name TO new_column_name + ; + +old_column_name + : column_name + ; + +new_column_name + : column_name + ; + +add_modify_drop_column_clauses + : (add_column_clause + |modify_column_clauses + |drop_column_clause + )+ + ; + +drop_column_clause + : SET UNUSED (COLUMN column_name| ('(' (','? column_name)+ ')' )) (CASCADE CONSTRAINTS | INVALIDATE)* + | DROP (COLUMN column_name | '(' (','? column_name)+ ')' ) (CASCADE CONSTRAINTS | INVALIDATE)* (CHECKPOINT UNSIGNED_INTEGER)? + | DROP (UNUSED COLUMNS | COLUMNS CONTINUE) (CHECKPOINT UNSIGNED_INTEGER) + ; + +modify_column_clauses + : MODIFY ('(' (','? modify_col_properties)+ ')' + | modify_col_substitutable + ) + ; + +modify_col_properties + : column_name datatype? (DEFAULT expression)? (ENCRYPT encryption_spec | DECRYPT)? inline_constraint* lob_storage_clause? //TODO alter_xmlschema_clause + ; + +modify_col_substitutable + : COLUMN column_name NOT? SUBSTITUTABLE AT ALL LEVELS FORCE? + ; + +add_column_clause + : ADD '(' (','? column_definition + |','? virtual_column_definition + )+ + ')' + column_properties? +//TODO (','? out_of_line_part_storage ) + ; + +alter_varray_col_properties + : MODIFY VARRAY varray_item '(' modify_lob_parameters ')' + ; + +varray_col_properties + : VARRAY varray_item ( substitutable_column_clause? varray_storage_clause + | substitutable_column_clause + ) + ; + +varray_storage_clause + : STORE AS (SECUREFILE|BASICFILE)? LOB ( lob_segname? '(' lob_storage_parameters ')' + | lob_segname + ) + ; + +lob_segname + : regular_id + ; + +lob_item + : regular_id + ; + +lob_storage_parameters + : TABLESPACE tablespace | (lob_parameters storage_clause? ) + | storage_clause + ; + +lob_storage_clause + : LOB ( '(' (','? lob_item)+ ')' STORE AS ( (SECUREFILE|BASICFILE) | '(' lob_storage_parameters ')' )+ + | '(' lob_item ')' STORE AS ( (SECUREFILE | BASICFILE) | lob_segname | '(' lob_storage_parameters ')' )+ + ) + ; + +modify_lob_storage_clause + : MODIFY LOB '(' lob_item ')' '(' modify_lob_parameters ')' + ; + +modify_lob_parameters + : ( storage_clause + | (PCTVERSION | FREEPOOLS) UNSIGNED_INTEGER + | REBUILD FREEPOOLS + | lob_retention_clause + | lob_deduplicate_clause + | lob_compression_clause + | ENCRYPT encryption_spec + | DECRYPT + | CACHE + | (CACHE | NOCACHE | CACHE READS) logging_clause? + | allocate_extent_clause + | shrink_clause + | deallocate_unused_clause + )+ + ; + +lob_parameters + : ( (ENABLE | DISABLE) STORAGE IN ROW + | CHUNK UNSIGNED_INTEGER + | PCTVERSION UNSIGNED_INTEGER + | FREEPOOLS UNSIGNED_INTEGER + | lob_retention_clause + | lob_deduplicate_clause + | lob_compression_clause + | ENCRYPT encryption_spec + | DECRYPT + | (CACHE | NOCACHE | CACHE READS) logging_clause? + )+ + ; + +lob_deduplicate_clause + : DEDUPLICATE + | KEEP_DUPLICATES + ; + +lob_compression_clause + : NOCOMPRESS + | COMPRESS (HIGH | MEDIUM | LOW)? + ; + +lob_retention_clause + : RETENTION (MAX | MIN UNSIGNED_INTEGER | AUTO | NONE)? + ; + +encryption_spec + : (USING CHAR_STRING)? (IDENTIFIED BY REGULAR_ID)? CHAR_STRING? (NO? SALT)? + ; +tablespace + : regular_id + ; + +varray_item + : (id_expression '.')? (id_expression '.')? id_expression + ; + +column_properties + : object_type_col_properties + | nested_table_col_properties + | (varray_col_properties | lob_storage_clause) //TODO '(' ( ','? lob_partition_storage)+ ')' + | xmltype_column_properties + ; + +period_definition + : {version12}? PERIOD FOR column_name + ( '(' start_time_column ',' end_time_column ')' )? + ; + +start_time_column + : column_name + ; + +end_time_column + : column_name + ; + +column_definition + : column_name (datatype | type_name) + SORT? (DEFAULT expression)? (ENCRYPT (USING CHAR_STRING)? (IDENTIFIED BY regular_id)? CHAR_STRING? (NO? SALT)? )? (inline_constraint* | inline_ref_constraint) + ; + +virtual_column_definition + : column_name datatype? (GENERATED ALWAYS)? AS '(' expression ')' + VIRTUAL? inline_constraint* + ; + +out_of_line_part_storage + : PARTITION partition_name + ; + +nested_table_col_properties + : NESTED TABLE (nested_item | COLUMN_VALUE) substitutable_column_clause? (LOCAL | GLOBAL)? + STORE AS tableview_name ( '(' ( '(' object_properties ')' + | physical_properties + | column_properties + )+ + ')' + )? + (RETURN AS? (LOCATOR | VALUE) )? + ; + +nested_item + : regular_id + ; + +substitutable_column_clause + : ELEMENT? IS OF TYPE? '(' type_name ')' + | NOT? SUBSTITUTABLE AT ALL LEVELS + ; + +partition_name + : regular_id + ; + +supplemental_logging_props + : SUPPLEMENTAL LOG (supplemental_log_grp_clause | supplemental_id_key_clause) + ; + +column_or_attribute + : regular_id + ; + +object_type_col_properties + : COLUMN column=regular_id substitutable_column_clause + ; + +constraint_clauses + : ADD '(' (out_of_line_constraint* | out_of_line_ref_constraint) ')' + | ADD (out_of_line_constraint* | out_of_line_ref_constraint) + | MODIFY (CONSTRAINT constraint_name | PRIMARY KEY | UNIQUE '(' (','? column_name)+ ')') constraint_state CASCADE? + | RENAME CONSTRAINT old_constraint_name TO new_constraint_name + | drop_constraint_clause+ + ; + +old_constraint_name + : constraint_name + ; + +new_constraint_name + : constraint_name + ; + +drop_constraint_clause + : DROP drop_primary_key_or_unique_or_generic_clause + ; + +drop_primary_key_or_unique_or_generic_clause + : (PRIMARY KEY | UNIQUE '(' (','? column_name)+ ')') CASCADE? (KEEP | DROP)? + | CONSTRAINT constraint_name CASCADE? + ; + +add_constraint + : ADD (','? (CONSTRAINT constraint_name)? + ( primary_key_clause + | foreign_key_clause + | unique_key_clause + | check_constraint + ) )+ + ; + +check_constraint + : CHECK '(' condition ')' DISABLE? + ; + +drop_constraint + : DROP CONSTRAINT constraint_name + ; + +enable_constraint + : ENABLE CONSTRAINT constraint_name + ; + +disable_constraint + : DISABLE CONSTRAINT constraint_name + ; + +foreign_key_clause + : FOREIGN KEY paren_column_list references_clause on_delete_clause? + ; + +references_clause + : REFERENCES tableview_name paren_column_list + ; + +on_delete_clause + : ON DELETE (CASCADE | SET NULL) + ; + +unique_key_clause + : UNIQUE paren_column_list using_index_clause? + ; + +primary_key_clause + : PRIMARY KEY paren_column_list using_index_clause? + ; + +// Anonymous PL/SQL code block + +anonymous_block + : (DECLARE seq_of_declare_specs)? BEGIN seq_of_statements (EXCEPTION exception_handler+)? END SEMICOLON + ; + +// Common DDL Clauses + +invoker_rights_clause + : AUTHID (CURRENT_USER | DEFINER) + ; + +call_spec + : LANGUAGE (java_spec | c_spec) + ; + +// Call Spec Specific Clauses + +java_spec + : JAVA NAME CHAR_STRING + ; + +c_spec + : C_LETTER (NAME CHAR_STRING)? LIBRARY identifier c_agent_in_clause? (WITH CONTEXT)? c_parameters_clause? + ; + +c_agent_in_clause + : AGENT IN '(' expressions ')' + ; + +c_parameters_clause + : PARAMETERS '(' (expressions | '.' '.' '.') ')' + ; + +parameter + : parameter_name (IN | OUT | INOUT | NOCOPY)* type_spec? default_value_part? + ; + +default_value_part + : (ASSIGN_OP | DEFAULT) expression + ; + +// Elements Declarations + +seq_of_declare_specs + : declare_spec+ + ; + +declare_spec + : pragma_declaration + | variable_declaration + | subtype_declaration + | cursor_declaration + | exception_declaration + | type_declaration + | procedure_spec + | function_spec + | procedure_body + | function_body + ; + +// incorporates constant_declaration +variable_declaration + : identifier CONSTANT? type_spec (NOT NULL)? default_value_part? ';' + ; + +subtype_declaration + : SUBTYPE identifier IS type_spec (RANGE expression '..' expression)? (NOT NULL)? ';' + ; + +// cursor_declaration incorportates curscursor_body and cursor_spec + +cursor_declaration + : CURSOR identifier ('(' (','? parameter_spec)+ ')' )? (RETURN type_spec)? (IS select_statement)? ';' + ; + +parameter_spec + : parameter_name (IN? type_spec)? default_value_part? + ; + +exception_declaration + : identifier EXCEPTION ';' + ; + +pragma_declaration + : PRAGMA (SERIALLY_REUSABLE + | AUTONOMOUS_TRANSACTION + | EXCEPTION_INIT '(' exception_name ',' numeric_negative ')' + | INLINE '(' id1=identifier ',' expression ')' + | RESTRICT_REFERENCES '(' (identifier | DEFAULT) (',' identifier)+ ')') ';' + ; + +// Record Declaration Specific Clauses + +// incorporates ref_cursor_type_definition + +record_type_def + : RECORD '(' (','? field_spec)+ ')' + ; + +field_spec + : column_name type_spec? (NOT NULL)? default_value_part? + ; + +ref_cursor_type_def + : REF CURSOR (RETURN type_spec)? + ; + +type_declaration + : TYPE identifier IS (table_type_def | varray_type_def | record_type_def | ref_cursor_type_def) ';' + ; + +table_type_def + : TABLE OF type_spec table_indexed_by_part? (NOT NULL)? + ; + +table_indexed_by_part + : (idx1=INDEXED | idx2=INDEX) BY type_spec + ; + +varray_type_def + : (VARRAY | VARYING ARRAY) '(' expression ')' OF type_spec (NOT NULL)? + ; + +// Statements + +seq_of_statements + : (statement (';' | EOF) | label_declaration)+ + ; + +label_declaration + : ltp1= '<' '<' label_name '>' '>' + ; + +statement + : CREATE swallow_to_semi + | TRUNCATE swallow_to_semi + | body + | block + | assignment_statement + | continue_statement + | exit_statement + | goto_statement + | if_statement + | loop_statement + | forall_statement + | null_statement + | raise_statement + | return_statement + | case_statement/*[true]*/ + | sql_statement + | function_call + | pipe_row_statement + ; + +swallow_to_semi + : ~';'+ + ; + +assignment_statement + : (general_element | bind_variable) ASSIGN_OP expression + ; + +continue_statement + : CONTINUE label_name? (WHEN condition)? + ; + +exit_statement + : EXIT label_name? (WHEN condition)? + ; + +goto_statement + : GOTO label_name + ; + +if_statement + : IF condition THEN seq_of_statements elsif_part* else_part? END IF + ; + +elsif_part + : ELSIF condition THEN seq_of_statements + ; + +else_part + : ELSE seq_of_statements + ; + +loop_statement + : label_declaration? (WHILE condition | FOR cursor_loop_param)? LOOP seq_of_statements END LOOP label_name? + ; + +// Loop Specific Clause + +cursor_loop_param + : index_name IN REVERSE? lower_bound range_separator='..' upper_bound + | record_name IN (cursor_name ('(' expressions? ')')? | '(' select_statement ')') + ; + +forall_statement + : FORALL index_name IN bounds_clause sql_statement (SAVE EXCEPTIONS)? + ; + +bounds_clause + : lower_bound '..' upper_bound + | INDICES OF collection_name between_bound? + | VALUES OF index_name + ; + +between_bound + : BETWEEN lower_bound AND upper_bound + ; + +lower_bound + : concatenation + ; + +upper_bound + : concatenation + ; + +null_statement + : NULL + ; + +raise_statement + : RAISE exception_name? + ; + +return_statement + : RETURN expression? + ; + +function_call + : CALL? routine_name function_argument? + ; + +pipe_row_statement + : PIPE ROW '(' expression ')'; + +body + : BEGIN seq_of_statements (EXCEPTION exception_handler+)? END label_name? + ; + +// Body Specific Clause + +exception_handler + : WHEN exception_name (OR exception_name)* THEN seq_of_statements + ; + +trigger_block + : (DECLARE? declare_spec+)? body + ; + +block + : DECLARE? declare_spec+ body + ; + +// SQL Statements + +sql_statement + : execute_immediate + | data_manipulation_language_statements + | cursor_manipulation_statements + | transaction_control_statements + ; + +execute_immediate + : EXECUTE IMMEDIATE expression (into_clause using_clause? | using_clause dynamic_returning_clause? | dynamic_returning_clause)? + ; + +// Execute Immediate Specific Clause + +dynamic_returning_clause + : (RETURNING | RETURN) into_clause + ; + +// DML Statements + +data_manipulation_language_statements + : merge_statement + | lock_table_statement + | select_statement + | update_statement + | delete_statement + | insert_statement + | explain_statement + ; + +// Cursor Manipulation Statements + +cursor_manipulation_statements + : close_statement + | open_statement + | fetch_statement + | open_for_statement + ; + +close_statement + : CLOSE cursor_name + ; + +open_statement + : OPEN cursor_name ('(' expressions? ')')? + ; + +fetch_statement + : FETCH cursor_name (it1=INTO (','? variable_name)+ | BULK COLLECT INTO (','? variable_name)+) + ; + +open_for_statement + : OPEN variable_name FOR (select_statement | expression) using_clause? + ; + +// Transaction Control SQL Statements + +transaction_control_statements + : set_transaction_command + | set_constraint_command + | commit_statement + | rollback_statement + | savepoint_statement + ; + +set_transaction_command + : SET TRANSACTION + (READ (ONLY | WRITE) | ISOLATION LEVEL (SERIALIZABLE | READ COMMITTED) | USE ROLLBACK SEGMENT rollback_segment_name)? + (NAME quoted_string)? + ; + +set_constraint_command + : SET (CONSTRAINT | CONSTRAINTS) (ALL | (','? constraint_name)+) (IMMEDIATE | DEFERRED) + ; + +commit_statement + : COMMIT WORK? + (COMMENT expression | FORCE (CORRUPT_XID expression | CORRUPT_XID_ALL | expression (',' expression)?))? + write_clause? + ; + +write_clause + : WRITE (WAIT | NOWAIT)? (IMMEDIATE | BATCH)? + ; + +rollback_statement + : ROLLBACK WORK? (TO SAVEPOINT? savepoint_name | FORCE quoted_string)? + ; + +savepoint_statement + : SAVEPOINT savepoint_name + ; + +// Dml + +/* TODO +//SHOULD BE OVERRIDEN! +compilation_unit + : seq_of_statements* EOF + ; + +//SHOULD BE OVERRIDEN! +seq_of_statements + : select_statement + | update_statement + | delete_statement + | insert_statement + | lock_table_statement + | merge_statement + | explain_statement +// | case_statement[true] + ; +*/ + +explain_statement + : EXPLAIN PLAN (SET STATEMENT_ID '=' quoted_string)? (INTO tableview_name)? + FOR (select_statement | update_statement | delete_statement | insert_statement | merge_statement) + ; + +select_statement + : subquery_factoring_clause? subquery (for_update_clause | order_by_clause | offset_clause | fetch_clause)* + ; + +// Select Specific Clauses + +subquery_factoring_clause + : WITH (','? factoring_element)+ + ; + +factoring_element + : query_name paren_column_list? AS '(' subquery order_by_clause? ')' + search_clause? cycle_clause? + ; + +search_clause + : SEARCH (DEPTH | BREADTH) FIRST BY column_name ASC? DESC? (NULLS FIRST)? (NULLS LAST)? + (',' column_name ASC? DESC? (NULLS FIRST)? (NULLS LAST)?)* SET column_name + ; + +cycle_clause + : CYCLE column_list SET column_name TO expression DEFAULT expression + ; + +subquery + : subquery_basic_elements subquery_operation_part* + ; + +subquery_basic_elements + : query_block + | '(' subquery ')' + ; + +subquery_operation_part + : (UNION ALL? | INTERSECT | MINUS) subquery_basic_elements + ; + +query_block + : SELECT (DISTINCT | UNIQUE | ALL)? ('*' | (','? selected_element)+) + into_clause? from_clause where_clause? hierarchical_query_clause? group_by_clause? model_clause? + ; + +selected_element + : select_list_elements column_alias? + ; + +from_clause + : FROM table_ref_list + ; + +select_list_elements + : tableview_name '.' '*' + | (regular_id '.')? expressions + ; + +table_ref_list + : (','? table_ref)+ + ; + +// NOTE to PIVOT clause +// according the SQL reference this should not be possible +// according to he reality it is. Here we probably apply pivot/unpivot onto whole join clause +// eventhough it is not enclosed in parenthesis. See pivot examples 09,10,11 + +table_ref + : table_ref_aux join_clause* (pivot_clause | unpivot_clause)? + ; + +table_ref_aux + : table_ref_aux_internal flashback_query_clause* (/*{isTableAlias()}?*/ table_alias)? + ; + +table_ref_aux_internal + : dml_table_expression_clause (pivot_clause | unpivot_clause)? # table_ref_aux_internal_one + | '(' table_ref subquery_operation_part* ')' (pivot_clause | unpivot_clause)? # table_ref_aux_internal_two + | ONLY '(' dml_table_expression_clause ')' # table_ref_aux_internal_three + ; + +join_clause + : query_partition_clause? (CROSS | NATURAL)? (INNER | outer_join_type)? + JOIN table_ref_aux query_partition_clause? (join_on_part | join_using_part)* + ; + +join_on_part + : ON condition + ; + +join_using_part + : USING paren_column_list + ; + +outer_join_type + : (FULL | LEFT | RIGHT) OUTER? + ; + +query_partition_clause + : PARTITION BY (('(' (subquery | expressions)? ')') | expressions) + ; + +flashback_query_clause + : VERSIONS BETWEEN (SCN | TIMESTAMP) expression + | AS OF (SCN | TIMESTAMP | SNAPSHOT) expression + ; + +pivot_clause + : PIVOT XML? '(' (','? pivot_element)+ pivot_for_clause pivot_in_clause ')' + ; + +pivot_element + : aggregate_function_name '(' expression ')' column_alias? + ; + +pivot_for_clause + : FOR (column_name | paren_column_list) + ; + +pivot_in_clause + : IN '(' (subquery | (','? ANY)+ | (','? pivot_in_clause_element)+) ')' + ; + +pivot_in_clause_element + : pivot_in_clause_elements column_alias? + ; + +pivot_in_clause_elements + : expression + | '(' expressions? ')' + ; + +unpivot_clause + : UNPIVOT ((INCLUDE | EXCLUDE) NULLS)? + '(' (column_name | paren_column_list) pivot_for_clause unpivot_in_clause ')' + ; + +unpivot_in_clause + : IN '(' (','? unpivot_in_elements)+ ')' + ; + +unpivot_in_elements + : (column_name | paren_column_list) + (AS (constant | '(' (','? constant)+ ')'))? + ; + +hierarchical_query_clause + : CONNECT BY NOCYCLE? condition start_part? + | start_part CONNECT BY NOCYCLE? condition + ; + +start_part + : START WITH condition + ; + +group_by_clause + : GROUP BY (','? group_by_elements)+ having_clause? + | having_clause (GROUP BY (','? group_by_elements)+)? + ; + +group_by_elements + : grouping_sets_clause + | rollup_cube_clause + | expression + ; + +rollup_cube_clause + : (ROLLUP | CUBE) '(' (','? grouping_sets_elements)+ ')' + ; + +grouping_sets_clause + : GROUPING SETS '(' (','? grouping_sets_elements)+ ')' + ; + +grouping_sets_elements + : rollup_cube_clause + | '(' expressions? ')' + | expression + ; + +having_clause + : HAVING condition + ; + +model_clause + : MODEL cell_reference_options* return_rows_clause? reference_model* main_model + ; + +cell_reference_options + : (IGNORE | KEEP) NAV + | UNIQUE (DIMENSION | SINGLE REFERENCE) + ; + +return_rows_clause + : RETURN (UPDATED | ALL) ROWS + ; + +reference_model + : REFERENCE reference_model_name ON '(' subquery ')' model_column_clauses cell_reference_options* + ; + +main_model + : (MAIN main_model_name)? model_column_clauses cell_reference_options* model_rules_clause + ; + +model_column_clauses + : model_column_partition_part? DIMENSION BY model_column_list MEASURES model_column_list + ; + +model_column_partition_part + : PARTITION BY model_column_list + ; + +model_column_list + : '(' (','? model_column)+ ')' + ; + +model_column + : (expression | query_block) column_alias? + ; + +model_rules_clause + : model_rules_part? '(' (','? model_rules_element)* ')' + ; + +model_rules_part + : RULES (UPDATE | UPSERT ALL?)? ((AUTOMATIC | SEQUENTIAL) ORDER)? model_iterate_clause? + ; + +model_rules_element + : (UPDATE | UPSERT ALL?)? cell_assignment order_by_clause? '=' expression + ; + +cell_assignment + : model_expression + ; + +model_iterate_clause + : ITERATE '(' expression ')' until_part? + ; + +until_part + : UNTIL '(' condition ')' + ; + +order_by_clause + : ORDER SIBLINGS? BY (','? order_by_elements)+ + ; + +order_by_elements + : expression (ASC | DESC)? (NULLS (FIRST | LAST))? + ; + +offset_clause + : OFFSET expression (ROW | ROWS) + ; + +fetch_clause + : FETCH (FIRST | NEXT) (expression PERCENT_KEYWORD?)? (ROW | ROWS) (ONLY | WITH TIES) + ; + +for_update_clause + : FOR UPDATE for_update_of_part? for_update_options? + ; + +for_update_of_part + : OF column_list + ; + +for_update_options + : SKIP_ LOCKED + | NOWAIT + | WAIT expression + ; + +update_statement + : UPDATE general_table_ref update_set_clause where_clause? static_returning_clause? error_logging_clause? + ; + +// Update Specific Clauses + +update_set_clause + : SET + ((','? column_based_update_set_clause)+ | VALUE '(' identifier ')' '=' expression) + ; + +column_based_update_set_clause + : column_name '=' expression + | paren_column_list '=' subquery + ; + +delete_statement + : DELETE FROM? general_table_ref where_clause? static_returning_clause? error_logging_clause? + ; + +insert_statement + : INSERT (single_table_insert | multi_table_insert) + ; + +// Insert Specific Clauses + +single_table_insert + : insert_into_clause (values_clause static_returning_clause? | select_statement) error_logging_clause? + ; + +multi_table_insert + : (ALL multi_table_element+ | conditional_insert_clause) select_statement + ; + +multi_table_element + : insert_into_clause values_clause? error_logging_clause? + ; + +conditional_insert_clause + : (ALL | FIRST)? conditional_insert_when_part+ conditional_insert_else_part? + ; + +conditional_insert_when_part + : WHEN condition THEN multi_table_element+ + ; + +conditional_insert_else_part + : ELSE multi_table_element+ + ; + +insert_into_clause + : INTO general_table_ref paren_column_list? + ; + +values_clause + : VALUES '(' expressions? ')' + ; + +merge_statement + : MERGE INTO tableview_name table_alias? USING selected_tableview ON '(' condition ')' + (merge_update_clause merge_insert_clause? | merge_insert_clause merge_update_clause?)? + error_logging_clause? + ; + +// Merge Specific Clauses + +merge_update_clause + : WHEN MATCHED THEN UPDATE SET merge_element (',' merge_element)* where_clause? merge_update_delete_part? + ; + +merge_element + : column_name '=' expression + ; + +merge_update_delete_part + : DELETE where_clause + ; + +merge_insert_clause + : WHEN NOT MATCHED THEN INSERT paren_column_list? + VALUES '(' expressions? ')' where_clause? + ; + +selected_tableview + : (tableview_name | '(' select_statement ')') table_alias? + ; + +lock_table_statement + : LOCK TABLE lock_table_element (',' lock_table_element)* IN lock_mode MODE wait_nowait_part? + ; + +wait_nowait_part + : WAIT expression + | NOWAIT + ; + +// Lock Specific Clauses + +lock_table_element + : tableview_name partition_extension_clause? + ; + +lock_mode + : ROW SHARE + | ROW EXCLUSIVE + | SHARE UPDATE? + | SHARE ROW EXCLUSIVE + | EXCLUSIVE + ; + +// Common DDL Clauses + +general_table_ref + : (dml_table_expression_clause | ONLY '(' dml_table_expression_clause ')') table_alias? + ; + +static_returning_clause + : (RETURNING | RETURN) expressions into_clause + ; + +error_logging_clause + : LOG ERRORS error_logging_into_part? expression? error_logging_reject_part? + ; + +error_logging_into_part + : INTO tableview_name + ; + +error_logging_reject_part + : REJECT LIMIT (UNLIMITED | expression) + ; + +dml_table_expression_clause + : table_collection_expression + | '(' select_statement subquery_restriction_clause? ')' + | tableview_name sample_clause? + ; + +table_collection_expression + : (TABLE | THE) ('(' subquery ')' | '(' expression ')' ('(' '+' ')')?) + ; + +subquery_restriction_clause + : WITH (READ ONLY | CHECK OPTION (CONSTRAINT constraint_name)?) + ; + +sample_clause + : SAMPLE BLOCK? '(' expression (',' expression)? ')' seed_part? + ; + +seed_part + : SEED '(' expression ')' + ; + +// Expression & Condition + +condition + : expression + ; + +expressions + : expression (',' expression)* + ; + +expression + : cursor_expression + | logical_expression + ; + +cursor_expression + : CURSOR '(' subquery ')' + ; + +logical_expression + : multiset_expression (IS NOT? + (NULL | NAN | PRESENT | INFINITE | A_LETTER SET | EMPTY | OF TYPE? + '(' ONLY? type_spec (',' type_spec)* ')'))* + | NOT logical_expression + | logical_expression AND logical_expression + | logical_expression OR logical_expression + ; + +multiset_expression + : relational_expression (multiset_type=(MEMBER | SUBMULTISET) OF? concatenation)? + ; + +relational_expression + : relational_expression relational_operator relational_expression + | compound_expression + ; + +compound_expression + : concatenation + (NOT? ( IN in_elements + | BETWEEN between_elements + | like_type=(LIKE | LIKEC | LIKE2 | LIKE4) concatenation (ESCAPE concatenation)?))? + ; + +relational_operator + : '=' + | (NOT_EQUAL_OP | '<' '>' | '!' '=' | '^' '=') + | ('<' | '>') '='? + ; + +in_elements + : '(' subquery ')' + | '(' concatenation (',' concatenation)* ')' + | constant + | bind_variable + | general_element + ; + +between_elements + : concatenation AND concatenation + ; + +concatenation + : model_expression + (AT (LOCAL | TIME ZONE concatenation) | interval_expression)? + | concatenation op=(ASTERISK | SOLIDUS) concatenation + | concatenation op=(PLUS_SIGN | MINUS_SIGN) concatenation + | concatenation BAR BAR concatenation + ; + +interval_expression + : DAY ('(' concatenation ')')? TO SECOND ('(' concatenation ')')? + | YEAR ('(' concatenation ')')? TO MONTH + ; + +model_expression + : unary_expression ('[' model_expression_element ']')? + ; + +model_expression_element + : (ANY | expression) (',' (ANY | expression))* + | single_column_for_loop (',' single_column_for_loop)* + | multi_column_for_loop + ; + +single_column_for_loop + : FOR column_name + ( IN '(' expressions? ')' + | (LIKE expression)? FROM fromExpr=expression TO toExpr=expression + action_type=(INCREMENT | DECREMENT) action_expr=expression) + ; + +multi_column_for_loop + : FOR paren_column_list + IN '(' (subquery | '(' expressions? ')') ')' + ; + +unary_expression + : ('-' | '+') unary_expression + | PRIOR unary_expression + | CONNECT_BY_ROOT unary_expression + | /*TODO {input.LT(1).getText().equalsIgnoreCase("new") && !input.LT(2).getText().equals(".")}?*/ NEW unary_expression + | DISTINCT unary_expression + | ALL unary_expression + | /*TODO{(input.LA(1) == CASE || input.LA(2) == CASE)}?*/ case_statement/*[false]*/ + | quantified_expression + | standard_function + | atom + ; + +case_statement /*TODO [boolean isStatementParameter] +TODO scope { + boolean isStatement; +} +@init {$case_statement::isStatement = $isStatementParameter;}*/ + : searched_case_statement + | simple_case_statement + ; + +// CASE + +simple_case_statement + : label_name? ck1=CASE expression simple_case_when_part+ case_else_part? END CASE? label_name? + ; + +simple_case_when_part + : WHEN expression THEN (/*TODO{$case_statement::isStatement}?*/ seq_of_statements | expression) + ; + +searched_case_statement + : label_name? ck1=CASE searched_case_when_part+ case_else_part? END CASE? label_name? + ; + +searched_case_when_part + : WHEN expression THEN (/*TODO{$case_statement::isStatement}?*/ seq_of_statements | expression) + ; + +case_else_part + : ELSE (/*{$case_statement::isStatement}?*/ seq_of_statements | expression) + ; + +atom + : table_element outer_join_sign + | bind_variable + | constant + | general_element + | '(' subquery ')' subquery_operation_part* + | '(' expressions ')' + ; + +quantified_expression + : (SOME | EXISTS | ALL | ANY) ('(' subquery ')' | '(' expression ')') + ; + +string_function + : SUBSTR '(' expression ',' expression (',' expression)? ')' + | TO_CHAR '(' (table_element | standard_function | expression) + (',' quoted_string)? (',' quoted_string)? ')' + | DECODE '(' expressions ')' + | CHR '(' concatenation USING NCHAR_CS ')' + | NVL '(' expression ',' expression ')' + | TRIM '(' ((LEADING | TRAILING | BOTH)? quoted_string? FROM)? concatenation ')' + | TO_DATE '(' expression (',' quoted_string)? ')' + ; + +standard_function + : string_function + | numeric_function_wrapper + | other_function + ; + +literal + : CHAR_STRING + | string_function + | numeric + | MAXVALUE + ; + +numeric_function_wrapper + : numeric_function (single_column_for_loop | multi_column_for_loop)? + ; + +numeric_function + : SUM '(' (DISTINCT | ALL)? expression ')' + | COUNT '(' ( '*' | ((DISTINCT | UNIQUE | ALL)? concatenation)? ) ')' over_clause? + | ROUND '(' expression (',' UNSIGNED_INTEGER)? ')' + | AVG '(' (DISTINCT | ALL)? expression ')' + | MAX '(' (DISTINCT | ALL)? expression ')' + | LEAST '(' expressions ')' + | GREATEST '(' expressions ')' + ; + +other_function + : over_clause_keyword function_argument_analytic over_clause? + | /*TODO stantard_function_enabling_using*/ regular_id function_argument_modeling using_clause? + | COUNT '(' ( '*' | (DISTINCT | UNIQUE | ALL)? concatenation) ')' over_clause? + | (CAST | XMLCAST) '(' (MULTISET '(' subquery ')' | concatenation) AS type_spec ')' + | COALESCE '(' table_element (',' (numeric | quoted_string))? ')' + | COLLECT '(' (DISTINCT | UNIQUE)? concatenation collect_order_by_part? ')' + | within_or_over_clause_keyword function_argument within_or_over_part+ + | cursor_name ( PERCENT_ISOPEN | PERCENT_FOUND | PERCENT_NOTFOUND | PERCENT_ROWCOUNT ) + | DECOMPOSE '(' concatenation (CANONICAL | COMPATIBILITY)? ')' + | EXTRACT '(' regular_id FROM concatenation ')' + | (FIRST_VALUE | LAST_VALUE) function_argument_analytic respect_or_ignore_nulls? over_clause + | standard_prediction_function_keyword + '(' expressions cost_matrix_clause? using_clause? ')' + | TRANSLATE '(' expression (USING (CHAR_CS | NCHAR_CS))? (',' expression)* ')' + | TREAT '(' expression AS REF? type_spec ')' + | TRIM '(' ((LEADING | TRAILING | BOTH)? quoted_string? FROM)? concatenation ')' + | XMLAGG '(' expression order_by_clause? ')' ('.' general_element_part)? + | (XMLCOLATTVAL | XMLFOREST) + '(' (','? xml_multiuse_expression_element)+ ')' ('.' general_element_part)? + | XMLELEMENT + '(' (ENTITYESCAPING | NOENTITYESCAPING)? (NAME | EVALNAME)? expression + (/*TODO{input.LT(2).getText().equalsIgnoreCase("xmlattributes")}?*/ ',' xml_attributes_clause)? + (',' expression column_alias?)* ')' ('.' general_element_part)? + | XMLEXISTS '(' expression xml_passing_clause? ')' + | XMLPARSE '(' (DOCUMENT | CONTENT) concatenation WELLFORMED? ')' ('.' general_element_part)? + | XMLPI + '(' (NAME identifier | EVALNAME concatenation) (',' concatenation)? ')' ('.' general_element_part)? + | XMLQUERY + '(' concatenation xml_passing_clause? RETURNING CONTENT (NULL ON EMPTY)? ')' ('.' general_element_part)? + | XMLROOT + '(' concatenation (',' xmlroot_param_version_part)? (',' xmlroot_param_standalone_part)? ')' ('.' general_element_part)? + | XMLSERIALIZE + '(' (DOCUMENT | CONTENT) concatenation (AS type_spec)? + xmlserialize_param_enconding_part? xmlserialize_param_version_part? xmlserialize_param_ident_part? ((HIDE | SHOW) DEFAULTS)? ')' + ('.' general_element_part)? + | XMLTABLE + '(' xml_namespaces_clause? concatenation xml_passing_clause? (COLUMNS xml_table_column (',' xml_table_column))? ')' ('.' general_element_part)? + ; + +over_clause_keyword + : AVG + | CORR + | LAG + | LEAD + | MAX + | MEDIAN + | MIN + | NTILE + | RATIO_TO_REPORT + | ROW_NUMBER + | SUM + | VARIANCE + | REGR_ + | STDDEV + | VAR_ + | COVAR_ + ; + +within_or_over_clause_keyword + : CUME_DIST + | DENSE_RANK + | LISTAGG + | PERCENT_RANK + | PERCENTILE_CONT + | PERCENTILE_DISC + | RANK + ; + +standard_prediction_function_keyword + : PREDICTION + | PREDICTION_BOUNDS + | PREDICTION_COST + | PREDICTION_DETAILS + | PREDICTION_PROBABILITY + | PREDICTION_SET + ; + +over_clause + : OVER '(' query_partition_clause? (order_by_clause windowing_clause?)? ')' + ; + +windowing_clause + : windowing_type + (BETWEEN windowing_elements AND windowing_elements | windowing_elements) + ; + +windowing_type + : ROWS + | RANGE + ; + +windowing_elements + : UNBOUNDED PRECEDING + | CURRENT ROW + | concatenation (PRECEDING | FOLLOWING) + ; + +using_clause + : USING ('*' | (','? using_element)+) + ; + +using_element + : (IN OUT? | OUT)? select_list_elements column_alias? + ; + +collect_order_by_part + : ORDER BY concatenation + ; + +within_or_over_part + : WITHIN GROUP '(' order_by_clause ')' + | over_clause + ; + +cost_matrix_clause + : COST (MODEL AUTO? | '(' (','? cost_class_name)+ ')' VALUES '(' expressions? ')') + ; + +xml_passing_clause + : PASSING (BY VALUE)? expression column_alias? (',' expression column_alias?) + ; + +xml_attributes_clause + : XMLATTRIBUTES + '(' (ENTITYESCAPING | NOENTITYESCAPING)? (SCHEMACHECK | NOSCHEMACHECK)? + (','? xml_multiuse_expression_element)+ ')' + ; + +xml_namespaces_clause + : XMLNAMESPACES + '(' (concatenation column_alias)? (',' concatenation column_alias)* + xml_general_default_part? ')' + ; + +xml_table_column + : xml_column_name + (FOR ORDINALITY | type_spec (PATH concatenation)? xml_general_default_part?) + ; + +xml_general_default_part + : DEFAULT concatenation + ; + +xml_multiuse_expression_element + : expression (AS (id_expression | EVALNAME concatenation))? + ; + +xmlroot_param_version_part + : VERSION (NO VALUE | expression) + ; + +xmlroot_param_standalone_part + : STANDALONE (YES | NO VALUE?) + ; + +xmlserialize_param_enconding_part + : ENCODING concatenation + ; + +xmlserialize_param_version_part + : VERSION concatenation + ; + +xmlserialize_param_ident_part + : NO INDENT + | INDENT (SIZE '=' concatenation)? + ; + +// SqlPlus + +sql_plus_command + : '/' + | EXIT + | PROMPT + | SHOW (ERR | ERRORS) + | START_CMD + | whenever_command + | set_command + ; + +whenever_command + : WHENEVER (SQLERROR | OSERROR) + ( EXIT (SUCCESS | FAILURE | WARNING) (COMMIT | ROLLBACK) + | CONTINUE (COMMIT | ROLLBACK | NONE)) + ; + +set_command + : SET regular_id (CHAR_STRING | ON | OFF | /*EXACT_NUM_LIT*/numeric | regular_id) + ; + +// Common + +partition_extension_clause + : (SUBPARTITION | PARTITION) FOR? '(' expressions? ')' + ; + +column_alias + : AS? (identifier | quoted_string) + | AS + ; + +table_alias + : identifier + | quoted_string + ; + +where_clause + : WHERE (CURRENT OF cursor_name | expression) + ; + +into_clause + : (BULK COLLECT)? INTO (','? variable_name)+ + ; + +// Common Named Elements + +xml_column_name + : identifier + | quoted_string + ; + +cost_class_name + : identifier + ; + +attribute_name + : identifier + ; + +savepoint_name + : identifier + ; + +rollback_segment_name + : identifier + ; + +table_var_name + : identifier + ; + +schema_name + : identifier + ; + +routine_name + : identifier ('.' id_expression)* ('@' link_name)? + ; + +package_name + : identifier + ; + +implementation_type_name + : identifier ('.' id_expression)? + ; + +parameter_name + : identifier + ; + +reference_model_name + : identifier + ; + +main_model_name + : identifier + ; + +container_tableview_name + : identifier ('.' id_expression)? + ; + +aggregate_function_name + : identifier ('.' id_expression)* + ; + +query_name + : identifier + ; + +grantee_name + : id_expression identified_by? + ; + +role_name + : id_expression + | CONNECT + ; + +constraint_name + : identifier ('.' id_expression)* ('@' link_name)? + ; + +label_name + : id_expression + ; + +type_name + : id_expression ('.' id_expression)* + ; + +sequence_name + : id_expression ('.' id_expression)* + ; + +exception_name + : identifier ('.' id_expression)* + ; + +function_name + : identifier ('.' id_expression)? + ; + +procedure_name + : identifier ('.' id_expression)? + ; + +trigger_name + : identifier ('.' id_expression)? + ; + +variable_name + : (INTRODUCER char_set_name)? id_expression ('.' id_expression)? + | bind_variable + ; + +index_name + : identifier ('.' id_expression)? + ; + +cursor_name + : general_element + | bind_variable + ; + +record_name + : identifier + | bind_variable + ; + +collection_name + : identifier ('.' id_expression)? + ; + +link_name + : identifier + ; + +column_name + : identifier ('.' id_expression)* + ; + +tableview_name + : identifier ('.' id_expression)? + ('@' link_name | /*TODO{!(input.LA(2) == BY)}?*/ partition_extension_clause)? + ; + +char_set_name + : id_expression ('.' id_expression)* + ; + +synonym_name + : identifier + ; + +// Represents a valid DB object name in DDL commands which are valid for several DB (or schema) objects. +// For instance, create synonym ... for , or rename to . +// Both are valid for sequences, tables, views, etc. +schema_object_name + : id_expression + ; + +dir_object_name + : id_expression + ; + +user_object_name + : id_expression + ; + +grant_object_name + : tableview_name + | USER (','? user_object_name)+ + | DIRECTORY dir_object_name + | EDITION schema_object_name + | MINING MODEL schema_object_name + | JAVA (SOURCE | RESOURCE) schema_object_name + | SQL TRANSLATION PROFILE schema_object_name + ; + +column_list + : (','? column_name)+ + ; + +paren_column_list + : LEFT_PAREN column_list RIGHT_PAREN + ; + +// PL/SQL Specs + +// NOTE: In reality this applies to aggregate functions only +keep_clause + : KEEP '(' DENSE_RANK (FIRST | LAST) order_by_clause ')' over_clause? + ; + +function_argument + : '(' (','? argument)* ')' keep_clause? + ; + +function_argument_analytic + : '(' (','? argument respect_or_ignore_nulls?)* ')' keep_clause? + ; + +function_argument_modeling + : '(' column_name (',' (numeric | NULL) (',' (numeric | NULL))?)? + USING (tableview_name '.' '*' | '*' | (','? expression column_alias?)+) + ')' keep_clause? + ; + +respect_or_ignore_nulls + : (RESPECT | IGNORE) NULLS + ; + +argument + : (identifier '=' '>')? expression + ; + +type_spec + : datatype + | REF? type_name (PERCENT_ROWTYPE | PERCENT_TYPE)? + ; + +datatype + : native_datatype_element precision_part? (WITH LOCAL? TIME ZONE | CHARACTER SET char_set_name)? + | INTERVAL (YEAR | DAY) ('(' expression ')')? TO (MONTH | SECOND) ('(' expression ')')? + ; + +precision_part + : '(' numeric (',' numeric)? (CHAR | BYTE)? ')' + ; + +native_datatype_element + : BINARY_INTEGER + | PLS_INTEGER + | NATURAL + | BINARY_FLOAT + | BINARY_DOUBLE + | NATURALN + | POSITIVE + | POSITIVEN + | SIGNTYPE + | SIMPLE_INTEGER + | NVARCHAR2 + | DEC + | INTEGER + | INT + | NUMERIC + | SMALLINT + | NUMBER + | DECIMAL + | DOUBLE PRECISION? + | FLOAT + | REAL + | NCHAR + | LONG RAW? + | CHAR + | CHARACTER + | VARCHAR2 + | VARCHAR + | STRING + | RAW + | BOOLEAN + | DATE + | ROWID + | UROWID + | YEAR + | MONTH + | DAY + | HOUR + | MINUTE + | SECOND + | TIMEZONE_HOUR + | TIMEZONE_MINUTE + | TIMEZONE_REGION + | TIMEZONE_ABBR + | TIMESTAMP + | TIMESTAMP_UNCONSTRAINED + | TIMESTAMP_TZ_UNCONSTRAINED + | TIMESTAMP_LTZ_UNCONSTRAINED + | YMINTERVAL_UNCONSTRAINED + | DSINTERVAL_UNCONSTRAINED + | BFILE + | BLOB + | CLOB + | NCLOB + | MLSLABEL + ; + +bind_variable + : (BINDVAR | ':' UNSIGNED_INTEGER) + // Pro*C/C++ indicator variables + (INDICATOR? (BINDVAR | ':' UNSIGNED_INTEGER))? + ('.' general_element_part)* + ; + +general_element + : general_element_part ('.' general_element_part)* + ; + +general_element_part + : (INTRODUCER char_set_name)? id_expression ('.' id_expression)* ('@' link_name)? function_argument? + ; + +table_element + : (INTRODUCER char_set_name)? id_expression ('.' id_expression)* + ; + +object_privilege + : ALL PRIVILEGES? + | ALTER + | DEBUG + | DELETE + | EXECUTE + | FLASHBACK ARCHIVE + | INDEX + | INHERIT PRIVILEGES + | INSERT + | KEEP SEQUENCE + | MERGE VIEW + | ON COMMIT REFRESH + | QUERY REWRITE + | READ + | REFERENCES + | SELECT + | TRANSLATE SQL + | UNDER + | UPDATE + | USE + | WRITE + ; + +//Ordered by type rather than alphabetically +system_privilege + : ALL PRIVILEGES + | ADVISOR + | ADMINISTER ANY? SQL TUNING SET + | (ALTER | CREATE | DROP) ANY SQL PROFILE + | ADMINISTER SQL MANAGEMENT OBJECT + | CREATE ANY? CLUSTER + | (ALTER | DROP) ANY CLUSTER + | (CREATE | DROP) ANY CONTEXT + | EXEMPT REDACTION POLICY + | ALTER DATABASE + | (ALTER | CREATE) PUBLIC? DATABASE LINK + | DROP PUBLIC DATABASE LINK + | DEBUG CONNECT SESSION + | DEBUG ANY PROCEDURE + | ANALYZE ANY DICTIONARY + | CREATE ANY? DIMENSION + | (ALTER | DROP) ANY DIMENSION + | (CREATE | DROP) ANY DIRECTORY + | (CREATE | DROP) ANY EDITION + | FLASHBACK (ARCHIVE ADMINISTER | ANY TABLE) + | (ALTER | CREATE | DROP) ANY INDEX + | CREATE ANY? INDEXTYPE + | (ALTER | DROP | EXECUTE) ANY INDEXTYPE + | CREATE (ANY | EXTERNAL)? JOB + | EXECUTE ANY (CLASS | PROGRAM) + | MANAGE SCHEDULER + | ADMINISTER KEY MANAGEMENT + | CREATE ANY? LIBRARY + | (ALTER | DROP | EXECUTE) ANY LIBRARY + | LOGMINING + | CREATE ANY? MATERIALIZED VIEW + | (ALTER | DROP) ANY MATERIALIZED VIEW + | GLOBAL? QUERY REWRITE + | ON COMMIT REFRESH + | CREATE ANY? MINING MODEL + | (ALTER | DROP | SELECT | COMMENT) ANY MINING MODEL + | CREATE ANY? CUBE + | (ALTER | DROP | SELECT | UPDATE) ANY CUBE + | CREATE ANY? MEASURE FOLDER + | (DELETE | DROP | INSERT) ANY MEASURE FOLDER + | CREATE ANY? CUBE DIMENSION + | (ALTER | DELETE | DROP | INSERT | SELECT | UPDATE) ANY CUBE DIMENSION + | CREATE ANY? CUBE BUILD PROCESS + | (DROP | UPDATE) ANY CUBE BUILD PROCESS + | CREATE ANY? OPERATOR + | (ALTER | DROP | EXECUTE) ANY OPERATOR + | (CREATE | ALTER | DROP) ANY OUTLINE + | CREATE PLUGGABLE DATABASE + | SET CONTAINER + | CREATE ANY? PROCEDURE + | (ALTER | DROP | EXECUTE) ANY PROCEDURE + | (CREATE | ALTER | DROP ) PROFILE + | CREATE ROLE + | (ALTER | DROP | GRANT) ANY ROLE + | (CREATE | ALTER | DROP) ROLLBACK SEGMENT + | CREATE ANY? SEQUENCE + | (ALTER | DROP | SELECT) ANY SEQUENCE + | (ALTER | CREATE | RESTRICTED) SESSION + | ALTER RESOURCE COST + | CREATE ANY? SQL TRANSLATION PROFILE + | (ALTER | DROP | USE) ANY SQL TRANSLATION PROFILE + | TRANSLATE ANY SQL + | CREATE ANY? SYNONYM + | DROP ANY SYNONYM + | (CREATE | DROP) PUBLIC SYNONYM + | CREATE ANY? TABLE + | (ALTER | BACKUP | COMMENT | DELETE | DROP | INSERT | LOCK | READ | SELECT | UPDATE) ANY TABLE + | (CREATE | ALTER | DROP | MANAGE | UNLIMITED) TABLESPACE + | CREATE ANY? TRIGGER + | (ALTER | DROP) ANY TRIGGER + | ADMINISTER DATABASE TRIGGER + | CREATE ANY? TYPE + | (ALTER | DROP | EXECUTE | UNDER) ANY TYPE + | (CREATE | ALTER | DROP) USER + | CREATE ANY? VIEW + | (DROP | UNDER | MERGE) ANY VIEW + | (ANALYZE | AUDIT) ANY + | BECOME USER + | CHANGE NOTIFICATION + | EXEMPT ACCESS POLICY + | FORCE ANY? TRANSACTION + | GRANT ANY OBJECT? PRIVILEGE + | INHERIT ANY PRIVILEGES + | KEEP DATE TIME + | KEEP SYSGUID + | PURGE DBA_RECYCLEBIN + | RESUMABLE + | SELECT ANY (DICTIONARY | TRANSACTION) + | SYSBACKUP + | SYSDBA + | SYSDG + | SYSKM + | SYSOPER + ; + +// $> + +// $= 'A' and ch <= 'Z') or (ch>= 'a' and ch<= 'z') or (ch == ' ')) then + newSubs2 = newSubs2 + ch + else + newSubs2 = newSubs2 + '\'' + ch + '\'' + end + end + newLine = line[0..start-2] + newSubs2 + ';' + file.puts(newLine) + end + end +} diff --git a/runtime-linux/antlr4-runtime/ANTLRErrorListener.cpp b/runtime-linux/antlr4-runtime/ANTLRErrorListener.cpp new file mode 100644 index 0000000..6ceadb8 --- /dev/null +++ b/runtime-linux/antlr4-runtime/ANTLRErrorListener.cpp @@ -0,0 +1,10 @@ +/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved. + * Use of this file is governed by the BSD 3-clause license that + * can be found in the LICENSE.txt file in the project root. + */ + +#include "ANTLRErrorListener.h" + +antlr4::ANTLRErrorListener::~ANTLRErrorListener() +{ +} diff --git a/runtime-linux/antlr4-runtime/ANTLRErrorListener.h b/runtime-linux/antlr4-runtime/ANTLRErrorListener.h new file mode 100755 index 0000000..d6efad1 --- /dev/null +++ b/runtime-linux/antlr4-runtime/ANTLRErrorListener.h @@ -0,0 +1,167 @@ +/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved. + * Use of this file is governed by the BSD 3-clause license that + * can be found in the LICENSE.txt file in the project root. + */ + +#pragma once + +#include "RecognitionException.h" + +namespace antlrcpp { + class BitSet; +} + +namespace antlr4 { + + /// How to emit recognition errors (an interface in Java). + class ANTLR4CPP_PUBLIC ANTLRErrorListener { + public: + virtual ~ANTLRErrorListener(); + + /// + /// Upon syntax error, notify any interested parties. This is not how to + /// recover from errors or compute error messages. + /// specifies how to recover from syntax errors and how to compute error + /// messages. This listener's job is simply to emit a computed message, + /// though it has enough information to create its own message in many cases. + ///

+ /// The is non-null for all syntax errors except + /// when we discover mismatched token errors that we can recover from + /// in-line, without returning from the surrounding rule (via the single + /// token insertion and deletion mechanism). + ///

+ /// + /// What parser got the error. From this + /// object, you can access the context as well + /// as the input stream. + /// + /// The offending token in the input token + /// stream, unless recognizer is a lexer (then it's null). If + /// no viable alternative error, {@code e} has token at which we + /// started production for the decision. + /// + /// The line number in the input where the error occurred. + /// + /// The character position within that line where the error occurred. + /// + /// The message to emit. + /// + /// The exception generated by the parser that led to + /// the reporting of an error. It is null in the case where + /// the parser was able to recover in line without exiting the + /// surrounding rule. + virtual void syntaxError(Recognizer *recognizer, Token *offendingSymbol, size_t line, + size_t charPositionInLine, const std::string &msg, std::exception_ptr e) = 0; + + /** + * This method is called by the parser when a full-context prediction + * results in an ambiguity. + * + *

Each full-context prediction which does not result in a syntax error + * will call either {@link #reportContextSensitivity} or + * {@link #reportAmbiguity}.

+ * + *

When {@code ambigAlts} is not null, it contains the set of potentially + * viable alternatives identified by the prediction algorithm. When + * {@code ambigAlts} is null, use {@link ATNConfigSet#getAlts} to obtain the + * represented alternatives from the {@code configs} argument.

+ * + *

When {@code exact} is {@code true}, all of the potentially + * viable alternatives are truly viable, i.e. this is reporting an exact + * ambiguity. When {@code exact} is {@code false}, at least two of + * the potentially viable alternatives are viable for the current input, but + * the prediction algorithm terminated as soon as it determined that at + * least the minimum potentially viable alternative is truly + * viable.

+ * + *

When the {@link PredictionMode#LL_EXACT_AMBIG_DETECTION} prediction + * mode is used, the parser is required to identify exact ambiguities so + * {@code exact} will always be {@code true}.

+ * + *

This method is not used by lexers.

+ * + * @param recognizer the parser instance + * @param dfa the DFA for the current decision + * @param startIndex the input index where the decision started + * @param stopIndex the input input where the ambiguity was identified + * @param exact {@code true} if the ambiguity is exactly known, otherwise + * {@code false}. This is always {@code true} when + * {@link PredictionMode#LL_EXACT_AMBIG_DETECTION} is used. + * @param ambigAlts the potentially ambiguous alternatives, or {@code null} + * to indicate that the potentially ambiguous alternatives are the complete + * set of represented alternatives in {@code configs} + * @param configs the ATN configuration set where the ambiguity was + * identified + */ + virtual void reportAmbiguity(Parser *recognizer, const dfa::DFA &dfa, size_t startIndex, size_t stopIndex, bool exact, + const antlrcpp::BitSet &ambigAlts, atn::ATNConfigSet *configs) = 0; + + /** + * This method is called when an SLL conflict occurs and the parser is about + * to use the full context information to make an LL decision. + * + *

If one or more configurations in {@code configs} contains a semantic + * predicate, the predicates are evaluated before this method is called. The + * subset of alternatives which are still viable after predicates are + * evaluated is reported in {@code conflictingAlts}.

+ * + *

This method is not used by lexers.

+ * + * @param recognizer the parser instance + * @param dfa the DFA for the current decision + * @param startIndex the input index where the decision started + * @param stopIndex the input index where the SLL conflict occurred + * @param conflictingAlts The specific conflicting alternatives. If this is + * {@code null}, the conflicting alternatives are all alternatives + * represented in {@code configs}. At the moment, conflictingAlts is non-null + * (for the reference implementation, but Sam's optimized version can see this + * as null). + * @param configs the ATN configuration set where the SLL conflict was + * detected + */ + virtual void reportAttemptingFullContext(Parser *recognizer, const dfa::DFA &dfa, size_t startIndex, size_t stopIndex, + const antlrcpp::BitSet &conflictingAlts, atn::ATNConfigSet *configs) = 0; + + /** + * This method is called by the parser when a full-context prediction has a + * unique result. + * + *

Each full-context prediction which does not result in a syntax error + * will call either {@link #reportContextSensitivity} or + * {@link #reportAmbiguity}.

+ * + *

For prediction implementations that only evaluate full-context + * predictions when an SLL conflict is found (including the default + * {@link ParserATNSimulator} implementation), this method reports cases + * where SLL conflicts were resolved to unique full-context predictions, + * i.e. the decision was context-sensitive. This report does not necessarily + * indicate a problem, and it may appear even in completely unambiguous + * grammars.

+ * + *

{@code configs} may have more than one represented alternative if the + * full-context prediction algorithm does not evaluate predicates before + * beginning the full-context prediction. In all cases, the final prediction + * is passed as the {@code prediction} argument.

+ * + *

Note that the definition of "context sensitivity" in this method + * differs from the concept in {@link DecisionInfo#contextSensitivities}. + * This method reports all instances where an SLL conflict occurred but LL + * parsing produced a unique result, whether or not that unique result + * matches the minimum alternative in the SLL conflicting set.

+ * + *

This method is not used by lexers.

+ * + * @param recognizer the parser instance + * @param dfa the DFA for the current decision + * @param startIndex the input index where the decision started + * @param stopIndex the input index where the context sensitivity was + * finally determined + * @param prediction the unambiguous result of the full-context prediction + * @param configs the ATN configuration set where the unambiguous prediction + * was determined + */ + virtual void reportContextSensitivity(Parser *recognizer, const dfa::DFA &dfa, size_t startIndex, size_t stopIndex, + size_t prediction, atn::ATNConfigSet *configs) = 0; + }; + +} // namespace antlr4 diff --git a/runtime-linux/antlr4-runtime/ANTLRErrorStrategy.cpp b/runtime-linux/antlr4-runtime/ANTLRErrorStrategy.cpp new file mode 100644 index 0000000..1655a57 --- /dev/null +++ b/runtime-linux/antlr4-runtime/ANTLRErrorStrategy.cpp @@ -0,0 +1,10 @@ +/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved. + * Use of this file is governed by the BSD 3-clause license that + * can be found in the LICENSE.txt file in the project root. + */ + +#include "ANTLRErrorStrategy.h" + +antlr4::ANTLRErrorStrategy::~ANTLRErrorStrategy() +{ +} diff --git a/runtime-linux/antlr4-runtime/ANTLRErrorStrategy.h b/runtime-linux/antlr4-runtime/ANTLRErrorStrategy.h new file mode 100755 index 0000000..67576c6 --- /dev/null +++ b/runtime-linux/antlr4-runtime/ANTLRErrorStrategy.h @@ -0,0 +1,121 @@ +/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved. + * Use of this file is governed by the BSD 3-clause license that + * can be found in the LICENSE.txt file in the project root. + */ + +#pragma once + +#include "Token.h" + +namespace antlr4 { + + /// + /// The interface for defining strategies to deal with syntax errors encountered + /// during a parse by ANTLR-generated parsers. We distinguish between three + /// different kinds of errors: + /// + ///
    + ///
  • The parser could not figure out which path to take in the ATN (none of + /// the available alternatives could possibly match)
  • + ///
  • The current input does not match what we were looking for
  • + ///
  • A predicate evaluated to false
  • + ///
+ /// + /// Implementations of this interface report syntax errors by calling + /// . + ///

+ /// TO_DO: what to do about lexers + ///

+ class ANTLR4CPP_PUBLIC ANTLRErrorStrategy { + public: + + /// + /// Reset the error handler state for the specified {@code recognizer}. + /// the parser instance + virtual ~ANTLRErrorStrategy(); + + virtual void reset(Parser *recognizer) = 0; + + /** + * This method is called when an unexpected symbol is encountered during an + * inline match operation, such as {@link Parser#match}. If the error + * strategy successfully recovers from the match failure, this method + * returns the {@link Token} instance which should be treated as the + * successful result of the match. + * + *

This method handles the consumption of any tokens - the caller should + * not call {@link Parser#consume} after a successful recovery.

+ * + *

Note that the calling code will not report an error if this method + * returns successfully. The error strategy implementation is responsible + * for calling {@link Parser#notifyErrorListeners} as appropriate.

+ * + * @param recognizer the parser instance + * @throws RecognitionException if the error strategy was not able to + * recover from the unexpected input symbol + */ + virtual Token* recoverInline(Parser *recognizer) = 0; + + /// + /// This method is called to recover from exception {@code e}. This method is + /// called after by the default exception handler + /// generated for a rule method. + /// + /// + /// the parser instance + /// the recognition exception to recover from + /// if the error strategy could not recover from + /// the recognition exception + virtual void recover(Parser *recognizer, std::exception_ptr e) = 0; + + /// + /// This method provides the error handler with an opportunity to handle + /// syntactic or semantic errors in the input stream before they result in a + /// . + ///

+ /// The generated code currently contains calls to after + /// entering the decision state of a closure block ({@code (...)*} or + /// {@code (...)+}). + ///

+ /// For an implementation based on Jim Idle's "magic sync" mechanism, see + /// . + ///

+ /// + /// the parser instance + /// if an error is detected by the error + /// strategy but cannot be automatically recovered at the current state in + /// the parsing process + virtual void sync(Parser *recognizer) = 0; + + /// + /// Tests whether or not {@code recognizer} is in the process of recovering + /// from an error. In error recovery mode, adds + /// symbols to the parse tree by calling + /// {@link Parser#createErrorNode(ParserRuleContext, Token)} then + /// {@link ParserRuleContext#addErrorNode(ErrorNode)} instead of + /// {@link Parser#createTerminalNode(ParserRuleContext, Token)}. + /// + /// the parser instance + /// {@code true} if the parser is currently recovering from a parse + /// error, otherwise {@code false} + virtual bool inErrorRecoveryMode(Parser *recognizer) = 0; + + /// + /// This method is called by when the parser successfully matches an input + /// symbol. + /// + /// the parser instance + virtual void reportMatch(Parser *recognizer) = 0; + + /// + /// Report any kind of . This method is called by + /// the default exception handler generated for a rule method. + /// + /// the parser instance + /// the recognition exception to report + virtual void reportError(Parser *recognizer, const RecognitionException &e) = 0; + }; + +} // namespace antlr4 diff --git a/runtime-linux/antlr4-runtime/ANTLRFileStream.cpp b/runtime-linux/antlr4-runtime/ANTLRFileStream.cpp new file mode 100755 index 0000000..64b0b11 --- /dev/null +++ b/runtime-linux/antlr4-runtime/ANTLRFileStream.cpp @@ -0,0 +1,34 @@ +/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved. + * Use of this file is governed by the BSD 3-clause license that + * can be found in the LICENSE.txt file in the project root. + */ + +#include "support/StringUtils.h" + +#include "ANTLRFileStream.h" + +using namespace antlr4; + +ANTLRFileStream::ANTLRFileStream(const std::string &fileName) { + _fileName = fileName; + loadFromFile(fileName); +} + +void ANTLRFileStream::loadFromFile(const std::string &fileName) { + _fileName = fileName; + if (_fileName.empty()) { + return; + } + +#ifdef _MSC_VER + std::ifstream stream(antlrcpp::s2ws(fileName), std::ios::binary); +#else + std::ifstream stream(fileName, std::ios::binary); +#endif + + ANTLRInputStream::load(stream); +} + +std::string ANTLRFileStream::getSourceName() const { + return _fileName; +} diff --git a/runtime-linux/antlr4-runtime/ANTLRFileStream.h b/runtime-linux/antlr4-runtime/ANTLRFileStream.h new file mode 100755 index 0000000..10c8550 --- /dev/null +++ b/runtime-linux/antlr4-runtime/ANTLRFileStream.h @@ -0,0 +1,27 @@ +/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved. + * Use of this file is governed by the BSD 3-clause license that + * can be found in the LICENSE.txt file in the project root. + */ + +#pragma once + +#include "ANTLRInputStream.h" + +namespace antlr4 { + + /// This is an ANTLRInputStream that is loaded from a file all at once + /// when you construct the object (or call load()). + // TODO: this class needs testing. + class ANTLR4CPP_PUBLIC ANTLRFileStream : public ANTLRInputStream { + protected: + std::string _fileName; // UTF-8 encoded file name. + + public: + // Assumes a file name encoded in UTF-8 and file content in the same encoding (with or w/o BOM). + ANTLRFileStream(const std::string &fileName); + + virtual void loadFromFile(const std::string &fileName); + virtual std::string getSourceName() const override; + }; + +} // namespace antlr4 diff --git a/runtime-linux/antlr4-runtime/ANTLRInputStream.cpp b/runtime-linux/antlr4-runtime/ANTLRInputStream.cpp new file mode 100755 index 0000000..a5e2161 --- /dev/null +++ b/runtime-linux/antlr4-runtime/ANTLRInputStream.cpp @@ -0,0 +1,155 @@ +/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved. + * Use of this file is governed by the BSD 3-clause license that + * can be found in the LICENSE.txt file in the project root. + */ + +#include "Exceptions.h" +#include "misc/Interval.h" +#include "IntStream.h" + +#include "support/StringUtils.h" +#include "support/CPPUtils.h" + +#include "ANTLRInputStream.h" + +using namespace antlr4; +using namespace antlrcpp; + +using misc::Interval; + +ANTLRInputStream::ANTLRInputStream(const std::string &input) { + InitializeInstanceFields(); + load(input); +} + +ANTLRInputStream::ANTLRInputStream(const char data_[], size_t numberOfActualCharsInArray) + : ANTLRInputStream(std::string(data_, numberOfActualCharsInArray)) { +} + +ANTLRInputStream::ANTLRInputStream(std::istream &stream) { + InitializeInstanceFields(); + load(stream); +} + +void ANTLRInputStream::load(const std::string &input) { + // Remove the UTF-8 BOM if present. + const char bom[4] = "\xef\xbb\xbf"; + if (input.compare(0, 3, bom, 3) == 0) + _data = antlrcpp::utf8_to_utf32(input.data() + 3, input.data() + input.size()); + else + _data = antlrcpp::utf8_to_utf32(input.data(), input.data() + input.size()); + p = 0; +} + +void ANTLRInputStream::load(std::istream &stream) { + if (!stream.good() || stream.eof()) // No fail, bad or EOF. + return; + + _data.clear(); + + std::string s((std::istreambuf_iterator(stream)), std::istreambuf_iterator()); + load(s); +} + +void ANTLRInputStream::reset() { + p = 0; +} + +void ANTLRInputStream::consume() { + if (p >= _data.size()) { + assert(LA(1) == IntStream::EOF); + throw IllegalStateException("cannot consume EOF"); + } + + if (p < _data.size()) { + p++; + } +} + +size_t ANTLRInputStream::LA(ssize_t i) { + if (i == 0) { + return 0; // undefined + } + + ssize_t position = static_cast(p); + if (i < 0) { + i++; // e.g., translate LA(-1) to use offset i=0; then _data[p+0-1] + if ((position + i - 1) < 0) { + return IntStream::EOF; // invalid; no char before first char + } + } + + if ((position + i - 1) >= static_cast(_data.size())) { + return IntStream::EOF; + } + + return _data[static_cast((position + i - 1))]; +} + +size_t ANTLRInputStream::LT(ssize_t i) { + return LA(i); +} + +size_t ANTLRInputStream::index() { + return p; +} + +size_t ANTLRInputStream::size() { + return _data.size(); +} + +// Mark/release do nothing. We have entire buffer. +ssize_t ANTLRInputStream::mark() { + return -1; +} + +void ANTLRInputStream::release(ssize_t /* marker */) { +} + +void ANTLRInputStream::seek(size_t index) { + if (index <= p) { + p = index; // just jump; don't update stream state (line, ...) + return; + } + // seek forward, consume until p hits index or n (whichever comes first) + index = std::min(index, _data.size()); + while (p < index) { + consume(); + } +} + +std::string ANTLRInputStream::getText(const Interval &interval) { + if (interval.a < 0 || interval.b < 0) { + return ""; + } + + size_t start = static_cast(interval.a); + size_t stop = static_cast(interval.b); + + + if (stop >= _data.size()) { + stop = _data.size() - 1; + } + + size_t count = stop - start + 1; + if (start >= _data.size()) { + return ""; + } + + return antlrcpp::utf32_to_utf8(_data.substr(start, count)); +} + +std::string ANTLRInputStream::getSourceName() const { + if (name.empty()) { + return IntStream::UNKNOWN_SOURCE_NAME; + } + return name; +} + +std::string ANTLRInputStream::toString() const { + return antlrcpp::utf32_to_utf8(_data); +} + +void ANTLRInputStream::InitializeInstanceFields() { + p = 0; +} diff --git a/runtime-linux/antlr4-runtime/ANTLRInputStream.h b/runtime-linux/antlr4-runtime/ANTLRInputStream.h new file mode 100755 index 0000000..e985050 --- /dev/null +++ b/runtime-linux/antlr4-runtime/ANTLRInputStream.h @@ -0,0 +1,69 @@ +/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved. + * Use of this file is governed by the BSD 3-clause license that + * can be found in the LICENSE.txt file in the project root. + */ + +#pragma once + +#include "CharStream.h" + +namespace antlr4 { + + // Vacuum all input from a stream and then treat it + // like a string. Can also pass in a string or char[] to use. + // Input is expected to be encoded in UTF-8 and converted to UTF-32 internally. + class ANTLR4CPP_PUBLIC ANTLRInputStream : public CharStream { + protected: + /// The data being scanned. + // UTF-32 + UTF32String _data; + + /// 0..n-1 index into string of next char + size_t p; + + public: + /// What is name or source of this char stream? + std::string name; + + ANTLRInputStream(const std::string &input = ""); + ANTLRInputStream(const char data_[], size_t numberOfActualCharsInArray); + ANTLRInputStream(std::istream &stream); + + virtual void load(const std::string &input); + virtual void load(std::istream &stream); + + /// Reset the stream so that it's in the same state it was + /// when the object was created *except* the data array is not + /// touched. + virtual void reset(); + virtual void consume() override; + virtual size_t LA(ssize_t i) override; + virtual size_t LT(ssize_t i); + + /// + /// Return the current input symbol index 0..n where n indicates the + /// last symbol has been read. The index is the index of char to + /// be returned from LA(1). + /// + virtual size_t index() override; + virtual size_t size() override; + + /// + /// mark/release do nothing; we have entire buffer + virtual ssize_t mark() override; + virtual void release(ssize_t marker) override; + + /// + /// consume() ahead until p==index; can't just set p=index as we must + /// update line and charPositionInLine. If we seek backwards, just set p + /// + virtual void seek(size_t index) override; + virtual std::string getText(const misc::Interval &interval) override; + virtual std::string getSourceName() const override; + virtual std::string toString() const override; + + private: + void InitializeInstanceFields(); + }; + +} // namespace antlr4 diff --git a/runtime-linux/antlr4-runtime/BailErrorStrategy.cpp b/runtime-linux/antlr4-runtime/BailErrorStrategy.cpp new file mode 100755 index 0000000..5fbc011 --- /dev/null +++ b/runtime-linux/antlr4-runtime/BailErrorStrategy.cpp @@ -0,0 +1,61 @@ +/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved. + * Use of this file is governed by the BSD 3-clause license that + * can be found in the LICENSE.txt file in the project root. + */ + +#include "Exceptions.h" +#include "ParserRuleContext.h" +#include "InputMismatchException.h" +#include "Parser.h" + +#include "BailErrorStrategy.h" + +using namespace antlr4; + +void BailErrorStrategy::recover(Parser *recognizer, std::exception_ptr e) { + ParserRuleContext *context = recognizer->getContext(); + do { + context->exception = e; + if (context->parent == nullptr) + break; + context = static_cast(context->parent); + } while (true); + + try { + std::rethrow_exception(e); // Throw the exception to be able to catch and rethrow nested. +#if defined(_MSC_FULL_VER) && _MSC_FULL_VER < 190023026 + } catch (RecognitionException &inner) { + throw ParseCancellationException(inner.what()); +#else + } catch (RecognitionException & /*inner*/) { + std::throw_with_nested(ParseCancellationException()); +#endif + } +} + +Token* BailErrorStrategy::recoverInline(Parser *recognizer) { + InputMismatchException e(recognizer); + std::exception_ptr exception = std::make_exception_ptr(e); + + ParserRuleContext *context = recognizer->getContext(); + do { + context->exception = exception; + if (context->parent == nullptr) + break; + context = static_cast(context->parent); + } while (true); + + try { + throw e; +#if defined(_MSC_FULL_VER) && _MSC_FULL_VER < 190023026 + } catch (InputMismatchException &inner) { + throw ParseCancellationException(inner.what()); +#else + } catch (InputMismatchException & /*inner*/) { + std::throw_with_nested(ParseCancellationException()); +#endif + } +} + +void BailErrorStrategy::sync(Parser * /*recognizer*/) { +} diff --git a/runtime-linux/antlr4-runtime/BailErrorStrategy.h b/runtime-linux/antlr4-runtime/BailErrorStrategy.h new file mode 100755 index 0000000..2a8c36f --- /dev/null +++ b/runtime-linux/antlr4-runtime/BailErrorStrategy.h @@ -0,0 +1,59 @@ +/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved. + * Use of this file is governed by the BSD 3-clause license that + * can be found in the LICENSE.txt file in the project root. + */ + +#pragma once + +#include "DefaultErrorStrategy.h" + +namespace antlr4 { + + /** + * This implementation of {@link ANTLRErrorStrategy} responds to syntax errors + * by immediately canceling the parse operation with a + * {@link ParseCancellationException}. The implementation ensures that the + * {@link ParserRuleContext#exception} field is set for all parse tree nodes + * that were not completed prior to encountering the error. + * + *

+ * This error strategy is useful in the following scenarios.

+ * + *
    + *
  • Two-stage parsing: This error strategy allows the first + * stage of two-stage parsing to immediately terminate if an error is + * encountered, and immediately fall back to the second stage. In addition to + * avoiding wasted work by attempting to recover from errors here, the empty + * implementation of {@link BailErrorStrategy#sync} improves the performance of + * the first stage.
  • + *
  • Silent validation: When syntax errors are not being + * reported or logged, and the parse result is simply ignored if errors occur, + * the {@link BailErrorStrategy} avoids wasting work on recovering from errors + * when the result will be ignored either way.
  • + *
+ * + *

+ * {@code myparser.setErrorHandler(new BailErrorStrategy());}

+ * + * @see Parser#setErrorHandler(ANTLRErrorStrategy) + */ + class ANTLR4CPP_PUBLIC BailErrorStrategy : public DefaultErrorStrategy { + /// + /// Instead of recovering from exception {@code e}, re-throw it wrapped + /// in a so it is not caught by the + /// rule function catches. Use to get the + /// original . + /// + public: + virtual void recover(Parser *recognizer, std::exception_ptr e) override; + + /// Make sure we don't attempt to recover inline; if the parser + /// successfully recovers, it won't throw an exception. + virtual Token* recoverInline(Parser *recognizer) override; + + /// + /// Make sure we don't attempt to recover from problems in subrules. + virtual void sync(Parser *recognizer) override; + }; + +} // namespace antlr4 diff --git a/runtime-linux/antlr4-runtime/BaseErrorListener.cpp b/runtime-linux/antlr4-runtime/BaseErrorListener.cpp new file mode 100755 index 0000000..c035f09 --- /dev/null +++ b/runtime-linux/antlr4-runtime/BaseErrorListener.cpp @@ -0,0 +1,25 @@ +/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved. + * Use of this file is governed by the BSD 3-clause license that + * can be found in the LICENSE.txt file in the project root. + */ + +#include "BaseErrorListener.h" +#include "RecognitionException.h" + +using namespace antlr4; + +void BaseErrorListener::syntaxError(Recognizer * /*recognizer*/, Token * /*offendingSymbol*/, size_t /*line*/, + size_t /*charPositionInLine*/, const std::string &/*msg*/, std::exception_ptr /*e*/) { +} + +void BaseErrorListener::reportAmbiguity(Parser * /*recognizer*/, const dfa::DFA &/*dfa*/, size_t /*startIndex*/, + size_t /*stopIndex*/, bool /*exact*/, const antlrcpp::BitSet &/*ambigAlts*/, atn::ATNConfigSet * /*configs*/) { +} + +void BaseErrorListener::reportAttemptingFullContext(Parser * /*recognizer*/, const dfa::DFA &/*dfa*/, size_t /*startIndex*/, + size_t /*stopIndex*/, const antlrcpp::BitSet &/*conflictingAlts*/, atn::ATNConfigSet * /*configs*/) { +} + +void BaseErrorListener::reportContextSensitivity(Parser * /*recognizer*/, const dfa::DFA &/*dfa*/, size_t /*startIndex*/, + size_t /*stopIndex*/, size_t /*prediction*/, atn::ATNConfigSet * /*configs*/) { +} diff --git a/runtime-linux/antlr4-runtime/BaseErrorListener.h b/runtime-linux/antlr4-runtime/BaseErrorListener.h new file mode 100755 index 0000000..aad2e5d --- /dev/null +++ b/runtime-linux/antlr4-runtime/BaseErrorListener.h @@ -0,0 +1,36 @@ +/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved. + * Use of this file is governed by the BSD 3-clause license that + * can be found in the LICENSE.txt file in the project root. + */ + +#pragma once + +#include "ANTLRErrorListener.h" + +namespace antlrcpp { + class BitSet; +} + +namespace antlr4 { + + /** + * Provides an empty default implementation of {@link ANTLRErrorListener}. The + * default implementation of each method does nothing, but can be overridden as + * necessary. + */ + class ANTLR4CPP_PUBLIC BaseErrorListener : public ANTLRErrorListener { + + virtual void syntaxError(Recognizer *recognizer, Token * offendingSymbol, size_t line, size_t charPositionInLine, + const std::string &msg, std::exception_ptr e) override; + + virtual void reportAmbiguity(Parser *recognizer, const dfa::DFA &dfa, size_t startIndex, size_t stopIndex, bool exact, + const antlrcpp::BitSet &ambigAlts, atn::ATNConfigSet *configs) override; + + virtual void reportAttemptingFullContext(Parser *recognizer, const dfa::DFA &dfa, size_t startIndex, size_t stopIndex, + const antlrcpp::BitSet &conflictingAlts, atn::ATNConfigSet *configs) override; + + virtual void reportContextSensitivity(Parser *recognizer, const dfa::DFA &dfa, size_t startIndex, size_t stopIndex, + size_t prediction, atn::ATNConfigSet *configs) override; + }; + +} // namespace antlr4 diff --git a/runtime-linux/antlr4-runtime/BufferedTokenStream.cpp b/runtime-linux/antlr4-runtime/BufferedTokenStream.cpp new file mode 100755 index 0000000..d2a88dd --- /dev/null +++ b/runtime-linux/antlr4-runtime/BufferedTokenStream.cpp @@ -0,0 +1,413 @@ +/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved. + * Use of this file is governed by the BSD 3-clause license that + * can be found in the LICENSE.txt file in the project root. + */ + +#include "WritableToken.h" +#include "Lexer.h" +#include "RuleContext.h" +#include "misc/Interval.h" +#include "Exceptions.h" +#include "support/CPPUtils.h" + +#include "BufferedTokenStream.h" + +using namespace antlr4; +using namespace antlrcpp; + +BufferedTokenStream::BufferedTokenStream(TokenSource *tokenSource) : _tokenSource(tokenSource){ + InitializeInstanceFields(); +} + +TokenSource* BufferedTokenStream::getTokenSource() const { + return _tokenSource; +} + +size_t BufferedTokenStream::index() { + return _p; +} + +ssize_t BufferedTokenStream::mark() { + return 0; +} + +void BufferedTokenStream::release(ssize_t /*marker*/) { + // no resources to release +} + +void BufferedTokenStream::reset() { + seek(0); +} + +void BufferedTokenStream::seek(size_t index) { + lazyInit(); + _p = adjustSeekIndex(index); +} + +size_t BufferedTokenStream::size() { + return _tokens.size(); +} + +void BufferedTokenStream::consume() { + bool skipEofCheck = false; + if (!_needSetup) { + if (_fetchedEOF) { + // the last token in tokens is EOF. skip check if p indexes any + // fetched token except the last. + skipEofCheck = _p < _tokens.size() - 1; + } else { + // no EOF token in tokens. skip check if p indexes a fetched token. + skipEofCheck = _p < _tokens.size(); + } + } else { + // not yet initialized + skipEofCheck = false; + } + + if (!skipEofCheck && LA(1) == Token::EOF) { + throw IllegalStateException("cannot consume EOF"); + } + + if (sync(_p + 1)) { + _p = adjustSeekIndex(_p + 1); + } +} + +bool BufferedTokenStream::sync(size_t i) { + if (i + 1 < _tokens.size()) + return true; + size_t n = i - _tokens.size() + 1; // how many more elements we need? + + if (n > 0) { + size_t fetched = fetch(n); + return fetched >= n; + } + + return true; +} + +size_t BufferedTokenStream::fetch(size_t n) { + if (_fetchedEOF) { + return 0; + } + + size_t i = 0; + while (i < n) { + std::unique_ptr t(_tokenSource->nextToken()); + + if (is(t.get())) { + (static_cast(t.get()))->setTokenIndex(_tokens.size()); + } + + _tokens.push_back(std::move(t)); + ++i; + + if (_tokens.back()->getType() == Token::EOF) { + _fetchedEOF = true; + break; + } + } + + return i; +} + +Token* BufferedTokenStream::get(size_t i) const { + if (i >= _tokens.size()) { + throw IndexOutOfBoundsException(std::string("token index ") + + std::to_string(i) + + std::string(" out of range 0..") + + std::to_string(_tokens.size() - 1)); + } + return _tokens[i].get(); +} + +std::vector BufferedTokenStream::get(size_t start, size_t stop) { + std::vector subset; + + lazyInit(); + + if (_tokens.empty()) { + return subset; + } + + if (stop >= _tokens.size()) { + stop = _tokens.size() - 1; + } + for (size_t i = start; i <= stop; i++) { + Token *t = _tokens[i].get(); + if (t->getType() == Token::EOF) { + break; + } + subset.push_back(t); + } + return subset; +} + +size_t BufferedTokenStream::LA(ssize_t i) { + return LT(i)->getType(); +} + +Token* BufferedTokenStream::LB(size_t k) { + if (k > _p) { + return nullptr; + } + return _tokens[_p - k].get(); +} + +Token* BufferedTokenStream::LT(ssize_t k) { + lazyInit(); + if (k == 0) { + return nullptr; + } + if (k < 0) { + return LB(-k); + } + + size_t i = _p + k - 1; + sync(i); + if (i >= _tokens.size()) { // return EOF token + // EOF must be last token + return _tokens.back().get(); + } + + return _tokens[i].get(); +} + +ssize_t BufferedTokenStream::adjustSeekIndex(size_t i) { + return i; +} + +void BufferedTokenStream::lazyInit() { + if (_needSetup) { + setup(); + } +} + +void BufferedTokenStream::setup() { + _needSetup = false; + sync(0); + _p = adjustSeekIndex(0); +} + +void BufferedTokenStream::setTokenSource(TokenSource *tokenSource) { + _tokenSource = tokenSource; + _tokens.clear(); + _fetchedEOF = false; + _needSetup = true; +} + +std::vector BufferedTokenStream::getTokens() { + std::vector result; + for (auto &t : _tokens) + result.push_back(t.get()); + return result; +} + +std::vector BufferedTokenStream::getTokens(size_t start, size_t stop) { + return getTokens(start, stop, std::vector()); +} + +std::vector BufferedTokenStream::getTokens(size_t start, size_t stop, const std::vector &types) { + lazyInit(); + if (stop >= _tokens.size() || start >= _tokens.size()) { + throw IndexOutOfBoundsException(std::string("start ") + + std::to_string(start) + + std::string(" or stop ") + + std::to_string(stop) + + std::string(" not in 0..") + + std::to_string(_tokens.size() - 1)); + } + + std::vector filteredTokens; + + if (start > stop) { + return filteredTokens; + } + + for (size_t i = start; i <= stop; i++) { + Token *tok = _tokens[i].get(); + + if (types.empty() || std::find(types.begin(), types.end(), tok->getType()) != types.end()) { + filteredTokens.push_back(tok); + } + } + return filteredTokens; +} + +std::vector BufferedTokenStream::getTokens(size_t start, size_t stop, size_t ttype) { + std::vector s; + s.push_back(ttype); + return getTokens(start, stop, s); +} + +ssize_t BufferedTokenStream::nextTokenOnChannel(size_t i, size_t channel) { + sync(i); + if (i >= size()) { + return size() - 1; + } + + Token *token = _tokens[i].get(); + while (token->getChannel() != channel) { + if (token->getType() == Token::EOF) { + return i; + } + i++; + sync(i); + token = _tokens[i].get(); + } + return i; +} + +ssize_t BufferedTokenStream::previousTokenOnChannel(size_t i, size_t channel) { + sync(i); + if (i >= size()) { + // the EOF token is on every channel + return size() - 1; + } + + while (true) { + Token *token = _tokens[i].get(); + if (token->getType() == Token::EOF || token->getChannel() == channel) { + return i; + } + + if (i == 0) + break; + i--; + } + return i; +} + +std::vector BufferedTokenStream::getHiddenTokensToRight(size_t tokenIndex, ssize_t channel) { + lazyInit(); + if (tokenIndex >= _tokens.size()) { + throw IndexOutOfBoundsException(std::to_string(tokenIndex) + " not in 0.." + std::to_string(_tokens.size() - 1)); + } + + ssize_t nextOnChannel = nextTokenOnChannel(tokenIndex + 1, Lexer::DEFAULT_TOKEN_CHANNEL); + size_t to; + size_t from = tokenIndex + 1; + // if none onchannel to right, nextOnChannel=-1 so set to = last token + if (nextOnChannel == -1) { + to = static_cast(size() - 1); + } else { + to = nextOnChannel; + } + + return filterForChannel(from, to, channel); +} + +std::vector BufferedTokenStream::getHiddenTokensToRight(size_t tokenIndex) { + return getHiddenTokensToRight(tokenIndex, -1); +} + +std::vector BufferedTokenStream::getHiddenTokensToLeft(size_t tokenIndex, ssize_t channel) { + lazyInit(); + if (tokenIndex >= _tokens.size()) { + throw IndexOutOfBoundsException(std::to_string(tokenIndex) + " not in 0.." + std::to_string(_tokens.size() - 1)); + } + + if (tokenIndex == 0) { + // Obviously no tokens can appear before the first token. + return { }; + } + + ssize_t prevOnChannel = previousTokenOnChannel(tokenIndex - 1, Lexer::DEFAULT_TOKEN_CHANNEL); + if (prevOnChannel == static_cast(tokenIndex - 1)) { + return { }; + } + // if none onchannel to left, prevOnChannel=-1 then from=0 + size_t from = static_cast(prevOnChannel + 1); + size_t to = tokenIndex - 1; + + return filterForChannel(from, to, channel); +} + +std::vector BufferedTokenStream::getHiddenTokensToLeft(size_t tokenIndex) { + return getHiddenTokensToLeft(tokenIndex, -1); +} + +std::vector BufferedTokenStream::filterForChannel(size_t from, size_t to, ssize_t channel) { + std::vector hidden; + for (size_t i = from; i <= to; i++) { + Token *t = _tokens[i].get(); + if (channel == -1) { + if (t->getChannel() != Lexer::DEFAULT_TOKEN_CHANNEL) { + hidden.push_back(t); + } + } else { + if (t->getChannel() == static_cast(channel)) { + hidden.push_back(t); + } + } + } + + return hidden; +} + +bool BufferedTokenStream::isInitialized() const { + return !_needSetup; +} + +/** + * Get the text of all tokens in this buffer. + */ +std::string BufferedTokenStream::getSourceName() const +{ + return _tokenSource->getSourceName(); +} + +std::string BufferedTokenStream::getText() { + return getText(misc::Interval(0U, size() - 1)); +} + +std::string BufferedTokenStream::getText(const misc::Interval &interval) { + lazyInit(); + fill(); + size_t start = interval.a; + size_t stop = interval.b; + if (start == INVALID_INDEX || stop == INVALID_INDEX) { + return ""; + } + if (stop >= _tokens.size()) { + stop = _tokens.size() - 1; + } + + std::stringstream ss; + for (size_t i = start; i <= stop; i++) { + Token *t = _tokens[i].get(); + if (t->getType() == Token::EOF) { + break; + } + ss << t->getText(); + } + return ss.str(); +} + +std::string BufferedTokenStream::getText(RuleContext *ctx) { + return getText(ctx->getSourceInterval()); +} + +std::string BufferedTokenStream::getText(Token *start, Token *stop) { + if (start != nullptr && stop != nullptr) { + return getText(misc::Interval(start->getTokenIndex(), stop->getTokenIndex())); + } + + return ""; +} + +void BufferedTokenStream::fill() { + lazyInit(); + const size_t blockSize = 1000; + while (true) { + size_t fetched = fetch(blockSize); + if (fetched < blockSize) { + return; + } + } +} + +void BufferedTokenStream::InitializeInstanceFields() { + _needSetup = true; + _fetchedEOF = false; +} diff --git a/runtime-linux/antlr4-runtime/BufferedTokenStream.h b/runtime-linux/antlr4-runtime/BufferedTokenStream.h new file mode 100755 index 0000000..fab74d2 --- /dev/null +++ b/runtime-linux/antlr4-runtime/BufferedTokenStream.h @@ -0,0 +1,200 @@ +/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved. + * Use of this file is governed by the BSD 3-clause license that + * can be found in the LICENSE.txt file in the project root. + */ + +#pragma once + +#include "TokenStream.h" + +namespace antlr4 { + + /** + * This implementation of {@link TokenStream} loads tokens from a + * {@link TokenSource} on-demand, and places the tokens in a buffer to provide + * access to any previous token by index. + * + *

+ * This token stream ignores the value of {@link Token#getChannel}. If your + * parser requires the token stream filter tokens to only those on a particular + * channel, such as {@link Token#DEFAULT_CHANNEL} or + * {@link Token#HIDDEN_CHANNEL}, use a filtering token stream such a + * {@link CommonTokenStream}.

+ */ + class ANTLR4CPP_PUBLIC BufferedTokenStream : public TokenStream { + public: + BufferedTokenStream(TokenSource *tokenSource); + BufferedTokenStream(const BufferedTokenStream& other) = delete; + + BufferedTokenStream& operator = (const BufferedTokenStream& other) = delete; + + virtual TokenSource* getTokenSource() const override; + virtual size_t index() override; + virtual ssize_t mark() override; + + virtual void release(ssize_t marker) override; + virtual void reset(); + virtual void seek(size_t index) override; + + virtual size_t size() override; + virtual void consume() override; + + virtual Token* get(size_t i) const override; + + /// Get all tokens from start..stop inclusively. + virtual std::vector get(size_t start, size_t stop); + + virtual size_t LA(ssize_t i) override; + virtual Token* LT(ssize_t k) override; + + /// Reset this token stream by setting its token source. + virtual void setTokenSource(TokenSource *tokenSource); + virtual std::vector getTokens(); + virtual std::vector getTokens(size_t start, size_t stop); + + /// + /// Given a start and stop index, return a List of all tokens in + /// the token type BitSet. Return null if no tokens were found. This + /// method looks at both on and off channel tokens. + /// + virtual std::vector getTokens(size_t start, size_t stop, const std::vector &types); + virtual std::vector getTokens(size_t start, size_t stop, size_t ttype); + + /// Collect all tokens on specified channel to the right of + /// the current token up until we see a token on DEFAULT_TOKEN_CHANNEL or + /// EOF. If channel is -1, find any non default channel token. + virtual std::vector getHiddenTokensToRight(size_t tokenIndex, ssize_t channel); + + /// + /// Collect all hidden tokens (any off-default channel) to the right of + /// the current token up until we see a token on DEFAULT_TOKEN_CHANNEL + /// or EOF. + /// + virtual std::vector getHiddenTokensToRight(size_t tokenIndex); + + /// + /// Collect all tokens on specified channel to the left of + /// the current token up until we see a token on DEFAULT_TOKEN_CHANNEL. + /// If channel is -1, find any non default channel token. + /// + virtual std::vector getHiddenTokensToLeft(size_t tokenIndex, ssize_t channel); + + /// + /// Collect all hidden tokens (any off-default channel) to the left of + /// the current token up until we see a token on DEFAULT_TOKEN_CHANNEL. + /// + virtual std::vector getHiddenTokensToLeft(size_t tokenIndex); + + virtual std::string getSourceName() const override; + virtual std::string getText() override; + virtual std::string getText(const misc::Interval &interval) override; + virtual std::string getText(RuleContext *ctx) override; + virtual std::string getText(Token *start, Token *stop) override; + + /// Get all tokens from lexer until EOF. + virtual void fill(); + + protected: + /** + * The {@link TokenSource} from which tokens for this stream are fetched. + */ + TokenSource *_tokenSource; + + /** + * A collection of all tokens fetched from the token source. The list is + * considered a complete view of the input once {@link #fetchedEOF} is set + * to {@code true}. + */ + std::vector> _tokens; + + /** + * The index into {@link #tokens} of the current token (next token to + * {@link #consume}). {@link #tokens}{@code [}{@link #p}{@code ]} should be + * {@link #LT LT(1)}. + * + *

This field is set to -1 when the stream is first constructed or when + * {@link #setTokenSource} is called, indicating that the first token has + * not yet been fetched from the token source. For additional information, + * see the documentation of {@link IntStream} for a description of + * Initializing Methods.

+ */ + // ml: since -1 requires to make this member signed for just this single aspect we use a member _needSetup instead. + // Use bool isInitialized() to find out if this stream has started reading. + size_t _p; + + /** + * Indicates whether the {@link Token#EOF} token has been fetched from + * {@link #tokenSource} and added to {@link #tokens}. This field improves + * performance for the following cases: + * + *