Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- grammar PLSQL3c;
- options {
- language=C;
- backtrack=true;
- memoize=true;
- output=AST;
- }
- @members {
- // there is no strcasecmp() on Windows, map it to _strcmpi instead
- #include <stdlib.h>
- #define strcasecmp _strcmpi
- #define _BOOL int
- #define _TRUE 1
- #define _FALSE 0
- _BOOL PLSQL3c_is_sql = _FALSE;
- // this method will check the table name against the configuration from the connector
- extern int CheckTable(char *TestString);
- // this method will add an alias name to a temporary list
- extern void AddAlias(char *Alias);
- // this method adds columns to the StatementChecker for blocking statements based on table fields
- // (not used at the moment)
- //extern void AddColumn(char *column);
- // our logging callback method
- extern void P_LOG(const char* prefix, const char* str);
- }
- /*
- @parser::context
- {
- pMY = myDisplayRecognitionError;
- }
- @parser::apifuncs {
- RECOGNIZER->displayRecognitionError = myDisplayRecognitionError;
- }
- */
- start_rule
- : (create_package)* EOF
- ;
- create_package
- : 'CREATE' ( 'OR' keyREPLACE )?
- ( package_spec | package_body )
- ;
- package_spec
- : keyPACKAGE package_name ( 'IS' | 'AS' )
- ( package_obj_spec )*
- 'END' (package_name)? SEMI
- ;
- package_body
- : keyPACKAGE ( keyBODY ) package_name ( 'IS' | 'AS' )
- ( package_obj_body )*
- ( 'BEGIN' seq_of_statements )?
- 'END' ( package_name )? SEMI
- ;
- package_name
- : ( schema_name DOT )? identifier
- ;
- package_obj_spec
- : variable_declaration
- | type_declaration
- | subtype_declaration
- | record_declaration
- | plsql_table_declaration
- | varray_declaration
- | cursor_declaration
- | cursor_spec
- | procedure_spec
- | function_spec
- | exception_declaration
- | pragma_declaration
- ;
- variable_declaration
- : variable_name ('CONSTANT')?
- type_spec ('NOT' 'NULL')?
- ( ( ASSIGN | 'DEFAULT' ) plsql_expression)? SEMI
- ;
- type_declaration
- : keyTYPE type_spec 'IS' ( keyNEW )? ( type_spec ( 'NOT' 'NULL' )? | LPAREN plsql_expressions RPAREN ) SEMI
- ;
- subtype_declaration
- : keySUBTYPE type_spec 'IS' type_spec ( 'NOT' 'NULL' | keyRANGE literal DOUBLEDOT literal )? SEMI
- ;
- cursor_declaration
- : keyCURSOR cursor_name
- ( LPAREN parameter_specs RPAREN )?
- 'IS' select_command SEMI
- ;
- package_obj_body
- : variable_declaration
- | subtype_declaration
- | cursor_declaration
- | exception_declaration
- | record_declaration
- | plsql_table_declaration
- | varray_declaration
- | procedure_body
- | function_body
- | pragma_declaration
- ;
- parse_statements
- : statement (SEMI statement)* SEMI? EOF
- ;
- seq_of_statements
- : statement SEMI ( statement SEMI )*
- ;
- statement
- : assignment_statement
- | exit_statement
- | goto_statement
- | case_statement
- | if_statement
- | loop_statement
- | null_statement
- | raise_statement
- | return_statement
- | sql_statement
- | plsql_block
- // | begin_block
- | function_call
- ;
- plsql_block
- : ( LLABEL label_name RLABEL )?
- ( ( 'DECLARE' )? (declare_spec)+ )?
- ( 'BEGIN' )
- seq_of_statements
- ( 'EXCEPTION' ( exception_handler )+ )?
- ( 'END' ( label_name )? )
- ;
- declare_spec
- : variable_declaration
- | subtype_declaration
- | cursor_declaration
- | exception_declaration
- | record_declaration
- | plsql_table_declaration
- | varray_declaration
- | procedure_declaration
- | function_declaration
- | type_declaration
- | pragma_declaration
- ;
- pragma_declaration
- : keyPRAGMA
- ( keyRESTRICT_REFERENCES LPAREN ( 'DEFAULT' | function_name ) ( COMMA pragma_param )+ RPAREN
- | keyEXCEPTION_INIT LPAREN exception_name COMMA literal RPAREN
- | keyAUTONOMOUS_TRANSACTION
- | keySERIALLY_REUSABLE
- | keyBUILTIN LPAREN pragma_params RPAREN
- | keyFIPSFLAG LPAREN pragma_params RPAREN
- | keyINTERFACE LPAREN pragma_params RPAREN
- | keyNEW_NAMES LPAREN pragma_params RPAREN
- | keyTIMESTAMP LPAREN pragma_params RPAREN
- )
- SEMI
- ;
- pragma_params
- : pragma_param ( COMMA pragma_param )*
- ;
- pragma_param
- : ( PLUS | MINUS )? NUMBER
- | QUOTED_STRING
- | identifier
- ;
- assignment_statement
- : //(lvalue ASSIGN function_call) => (lvalue ASSIGN function_call)
- // | (lvalue ASSIGN plsql_expression) =>
- (lvalue ASSIGN plsql_expression)
- // | function_call
- ;
- lvalues
- : lvalue ( COMMA lvalue )*
- ;
- lvalue
- : variable_name
- | record_name DOT field_name
- | plsql_table_name LPAREN subscript RPAREN ( DOT field_name )*
- | COLON host_variable ( COLON host_variable )?
- ;
- field_name
- : identifier
- ;
- subscript
- : plsql_expression
- ;
- host_variable
- : identifier
- ;
- goto_statement
- : 'GOTO' label_name
- ;
- label_name
- : identifier
- ;
- exit_statement
- : keyEXIT ( label_name )? ( 'WHEN' plsql_condition )?
- ;
- datatype
- : 'BINARY_INTEGER'
- | 'BINARY_FLOAT'
- | 'BINARY_DOUBLE'
- | 'NATURAL'
- | 'POSITIVE'
- | ( 'NUMBER' | 'NUMERIC' | 'DECIMAL' | 'DEC' ) ( LPAREN NUMBER ( COMMA NUMBER )? RPAREN )?
- | 'LONG' ( 'RAW')? ( LPAREN NUMBER RPAREN )?
- | 'RAW' ( LPAREN NUMBER RPAREN )?
- | 'BOOLEAN'
- | 'DATE'
- | keyINTERVAL keyDAY ( LPAREN NUMBER RPAREN )? 'TO' keySECOND ( LPAREN NUMBER RPAREN )?
- | keyINTERVAL keyYEAR ( LPAREN NUMBER RPAREN )? 'TO' keyMONTH
- | ( keyTIME | keyTIMESTAMP ) ( LPAREN NUMBER RPAREN )? ( 'WITH' ( keyLOCAL )? keyTIME keyZONE)?
- | 'INTEGER'
- | 'INT'
- | 'SMALLINT'
- | 'FLOAT' ( LPAREN NUMBER RPAREN )?
- | 'REAL'
- | 'DOUBLE' keyPRECISION
- | 'CHAR' ( keyVARYING )? ( LPAREN NUMBER ( keyBYTE | 'CHAR' )? RPAREN )? ( 'CHARACTER' 'SET' ( identifier | column_spec CHARSET_ATTR ) )?
- | 'VARCHAR' ( LPAREN NUMBER ( keyBYTE | 'CHAR' )? RPAREN )? ( 'CHARACTER' 'SET' ( identifier | column_spec CHARSET_ATTR ) )?
- | 'VARCHAR2' ( LPAREN NUMBER ( keyBYTE | 'CHAR' )? RPAREN )? ( 'CHARACTER' 'SET' ( identifier | column_spec CHARSET_ATTR ) )?
- | 'CHARACTER' ( keyVARYING )? ( LPAREN NUMBER RPAREN )?
- | 'NCHAR' ( keyVARYING )? ( LPAREN NUMBER RPAREN )?
- | 'NVARCHAR' ( LPAREN NUMBER RPAREN )?
- | 'NVARCHAR2' ( LPAREN NUMBER RPAREN )?
- | 'NATIONAL' ( 'CHARACTER' | 'CHAR' ) ( keyVARYING )? ( LPAREN NUMBER RPAREN )?
- | 'MLSLABEL'
- | 'PLS_INTEGER'
- | 'BLOB'
- | 'CLOB' ( 'CHARACTER' 'SET' ( identifier | column_spec CHARSET_ATTR ) )?
- | 'NCLOB'
- | 'BFILE'
- | 'ROWID'
- | 'UROWID' ( LPAREN NUMBER RPAREN )?
- ;
- type_spec
- : datatype
- // | variable_name TYPE_ATTR
- | column_spec TYPE_ATTR
- // | package_name DOT variable_name
- | table_spec ROWTYPE_ATTR
- // | keyREF ( keyCURSOR | type_name )
- | type_name ( LPAREN NUMBER RPAREN )?
- ;
- type_name
- : identifier ( DOT identifier )*
- ;
- parameter_specs
- : parameter_spec ( COMMA parameter_spec )*
- ;
- parameter_spec
- : parameter_name ( 'IN' )? ( type_spec )?
- ;
- parameter_name
- : identifier
- ;
- cursor_spec
- : keyCURSOR cursor_name
- ( LPAREN parameter_specs RPAREN )?
- keyRETURN return_type SEMI!
- ;
- procedure_spec:
- 'PROCEDURE' procedure_name
- ( LPAREN arguments RPAREN )? SEMI
- ;
- function_spec
- : 'FUNCTION' function_name
- ( LPAREN arguments RPAREN )?
- keyRETURN return_type SEMI
- ;
- exception_declaration
- : exception_name 'EXCEPTION' SEMI
- ;
- exception_names
- : exception_name ( 'OR' exception_name )*
- ;
- exception_name
- : ( exception_package_name DOT )? identifier
- ;
- exception_package_name
- : identifier
- ;
- //oracle_err_number
- // : ( PLUS | MINUS )? NUMBER
- // | QUOTED_STRING
- // ;
- record_declaration
- : record_type_dec
- // | record_var_dec
- ;
- record_type_dec
- : keyTYPE type_name 'IS' keyRECORD
- LPAREN field_specs RPAREN SEMI
- ;
- //record_var_dec
- // : record_name type_name ROWTYPE_ATTR SEMI
- // ;
- field_specs
- : field_spec ( COMMA field_spec )*
- ;
- field_spec
- : column_name type_spec
- ('NOT' 'NULL')?
- ( ( ASSIGN | 'DEFAULT' ) plsql_expression)?
- ;
- plsql_table_declaration
- : table_type_dec
- // | table_var_dec
- ;
- table_type_dec
- : keyTYPE type_name 'IS' 'TABLE'
- 'OF' type_spec ( 'NOT' 'NULL' )?
- ( 'INDEX' 'BY'
- ( 'BINARY_INTEGER'
- | 'PLS_INTEGER'
- | 'VARCHAR2' LPAREN integer RPAREN
- )
- )?
- SEMI
- ;
- table_var_dec
- : plsql_table_name type_name SEMI
- ;
- plsql_table_name
- : identifier ( DOT identifier )*
- ;
- varray_declaration
- : keyTYPE type_name 'IS'
- ( keyVARRAY | keyVARYING keyARRAY ) LPAREN integer RPAREN
- 'OF' type_spec ( 'NOT' 'NULL' )?
- ;
- procedure_declaration
- : procedure_body
- ;
- procedure_body
- : ( proc_fun_start )? 'PROCEDURE'^ procedure_name
- ( LPAREN argument ( COMMA argument )* RPAREN )?
- ( 'IS' | 'AS' )
- //( keyPRAGMA keyAUTONOMOUS_TRANSACTION )?
- ( ( declare_spec ) => ( declare_spec )* )
- ( 'BEGIN' )
- ( seq_of_statements )
- ( 'EXCEPTION' ( exception_handler )* )?
- 'END' ( procedure_name )? SEMI
- ;
- begin_block
- : 'BEGIN'
- ( seq_of_statements )
- ( 'EXCEPTION' ( exception_handler )+ )?
- 'END'
- ;
- //Exception handler needs to be defined
- exception_handler
- : 'WHEN' exception_names 'THEN'
- seq_of_statements
- ;
- proc_fun_start
- : 'CREATE' ( 'OR' keyREPLACE )?
- ;
- function_body
- : ( proc_fun_start )? 'FUNCTION'^ function_name
- ( LPAREN arguments RPAREN )?
- keyRETURN return_type ( 'IS' | 'AS' )
- //( keyPRAGMA keyAUTONOMOUS_TRANSACTION )?
- ( ( declare_spec ) => ( declare_spec )* )
- ( 'BEGIN' )
- ( seq_of_statements )
- ( 'EXCEPTION' ( exception_handler )+ )?
- 'END' ( function_name )? SEMI
- ;
- function_name
- : identifier | QUOTED_STRING //( schema_name DOT )? identifier
- ;
- procedure_name
- : identifier | QUOTED_STRING //( schema_name DOT )? identifier
- ;
- arguments
- : argument ( COMMA argument )*
- ;
- argument
- : argument_name ( keyOUT | 'IN' keyOUT | 'IN' )? (argument_type )?
- ( ( ASSIGN | 'DEFAULT' ) plsql_expression )?
- ;
- argument_name
- : identifier
- ;
- argument_type
- : type_spec
- ;
- value
- : ( PLUS | MINUS )? NUMBER
- | quoted_string
- | 'TRUE' | 'FALSE'
- | 'NULL'
- ;
- return_type
- : type_spec
- ;
- function_declaration
- : function_body
- ;
- function_call
- : user_defined_function ( { LA(1) != LPAREN || LA(2) != PLUS || LA(3) != RPAREN }? LPAREN ( call_parameters )? RPAREN )?
- // | //{ input.LA(1) == ID && input.LA(2) == LPAREN && input.LA(3) == ASTERISK && input.LA(4) == RPAREN }?
- // { PLSQL3c_is_sql }?
- // keyCOUNT LPAREN ( ASTERISK | sql_expression ) RPAREN
- // | { PLSQL3c_is_sql }?
- // 'DISTINCT' LPAREN call_parameters RPAREN
- ;
- collection_function_call
- : plsql_table_name
- ;
- variable_names
- : variable_name ( COMMA variable_name )*
- ;
- variable_name
- : identifier
- ;
- null_statement
- : 'NULL'
- ;
- raise_statement
- : keyRAISE ( exception_name )?
- ;
- return_statement
- : keyRETURN ( plsql_expression )?
- ;
- loop_statement
- : ( LLABEL label_name RLABEL )?
- ( keyWHILE^ plsql_condition
- | ( 'FOR'^
- ( ( numeric_loop_param ) => numeric_loop_param
- | ( cursor_loop_param ) => cursor_loop_param
- )
- )
- )?
- keyLOOP
- seq_of_statements
- 'END' keyLOOP
- ( label_name )?
- ;
- numeric_loop_param
- : index_name 'IN' ( keyREVERSE )? integer_expr DOUBLEDOT integer_expr
- ;
- index_name
- : identifier
- ;
- //Added typespec to handle packagename.variablename for loop statement
- integer_expr
- : sql_expression
- ;
- cursor_name
- : identifier
- ;
- cursor_loop_param
- : record_name 'IN'
- ( cursor_name ( LPAREN plsql_expressions RPAREN )?
- | LPAREN select_statement RPAREN
- )
- ;
- record_name
- : identifier
- ;
- commit_statement
- : 'COMMIT'
- ;
- if_statement
- : 'IF'^ plsql_condition 'THEN' seq_of_statements
- ( //{ input.LA(1) != ELSE }?
- keyELSIF plsql_condition 'THEN' seq_of_statements
- )*
- ( 'ELSE' seq_of_statements )?
- 'END' 'IF'
- ;
- sql_statement
- : sql_command
- ;
- sql_command
- : to_modify_data
- | to_control_data
- ;
- to_modify_data
- : select_command
- | insert_command
- //| update_command
- | update_statement
- | delete_command
- | set_transaction_command
- ;
- to_control_data
- : close_statement
- | commit_statement
- | fetch_statement
- | lock_table_statement
- | open_statement
- | rollback_statement
- | savepoint_statement
- | create_user_statement
- | create_table_statement
- | alter_user_statement
- | alter_table_statement
- | create_materialized_view_statement
- | create_materialized_view_log_statement
- | create_view_statement
- | create_synonym_statement
- | drop_table_statement
- | drop_view_statement
- | drop_materialized_view_statement
- | drop_synonym_statement
- | alter_session_statement
- | alter_materialized_view_statement
- | alter_view_statement
- | analyze_table_statement
- | create_index_statement
- | create_schema_statement
- ;
- create_schema_statement
- : 'CREATE' 'SCHEMA' 'AUTHORIZATION' table_spec
- (create_table_statement | create_view_statement | ('GRANT' .*))+
- ;
- create_index_statement
- : 'CREATE'
- ('UNIQUE' | 'BITMAP')?
- 'INDEX' index_spec 'ON' table_spec .*
- ;
- analyze_table_statement
- : 'ANALYZE' 'TABLE' table_spec .*
- ;
- alter_materialized_view_statement
- : 'ALTER' 'MATERIALIZED' 'VIEW'
- ('LOG' 'FORCE'? 'ON')? table_spec .*
- ;
- alter_view_statement
- : 'ALTER' 'VIEW' table_spec
- ('ADD' | 'MODIFY' | 'DROP' | 'COMPILE') .*
- ;
- select_command
- : select_statement// ( 'UNION' select_statement )*
- ;
- select_statement
- : //( LPAREN select_command RPAREN ) => LPAREN select_command RPAREN |
- subquery_factoring_clause?
- (select_expression | (LPAREN select_expression RPAREN))
- ;
- create_user_statement
- : 'CREATE' 'USER' identifier 'INDENTIFIED' .*
- ;
- create_table_statement
- : 'CREATE' ('GLOBAL' 'TEMPORARY')? 'TABLE'
- table_spec
- (LPAREN
- identifier datatype (COMMA identifier datatype)*
- RPAREN)? .*
- ;
- alter_user_statement
- : 'ALTER' 'USER' identifier .*
- ;
- alter_table_statement
- : 'ALTER' 'TABLE' table_spec .*
- ;
- create_view_statement
- : 'CREATE' ( 'OR' 'REPLACE' )? ('NO'? 'FORCE')? 'VIEW'
- view_name
- ( '(' alias (',' alias )* ')' )?
- 'AS' subquery subquery_restriction_clause?
- ;
- create_materialized_view_log_statement
- : 'CREATE' 'MATERIALIZED' 'VIEW' 'LOG' 'ON' table_spec .*
- ;
- create_materialized_view_statement
- : 'CREATE' 'MATERIALIZED' 'VIEW'
- table_spec
- ( '(' alias (',' alias )* ')' )?
- ('FOR' 'UPDATE')?
- ( ('ENABLE' | 'DISABLE') 'QUERY' 'REWRITE' )?
- 'AS' subquery subquery_restriction_clause?
- ;
- create_synonym_statement
- : 'CREATE' ( 'OR' 'REPLACE' )? ( 'PUBLIC' )? 'SYNONYM'
- table_spec
- 'FOR' table_spec
- ;
- drop_table_statement
- : 'DROP' 'TABLE'
- table_spec ('CASCADE' 'CONSTRAINTS')? 'PURGE'?
- ;
- drop_view_statement
- : 'DROP' 'VIEW'
- table_spec ('CASCADE' 'CONSTRAINTS')?
- ;
- drop_materialized_view_statement
- : 'DROP' 'MATERIALIZED' 'VIEW'
- table_spec ('PRESERVE' 'TABLE')?
- ;
- drop_synonym_statement
- : 'DROP' ('PUBLIC')? 'SYNONYM'
- table_spec ('FORCE')?
- ;
- alter_session_statement
- : 'ALTER' 'SESSION'
- (
- ( 'ADVISE' ( 'COMMIT' | 'ROLLBACK' | 'NOTHING' ) )
- | ( 'CLOSE' 'DATABASE' 'LINK' identifier )
- | ( 'ENABLE' | 'DISABLE' 'COMMIT' 'IN' 'PROCEDURE' )
- | ( 'ENABLE' | 'DISABLE' 'GUARD' )
- | (
- ('ENABLE' | 'DISABLE' | 'FORCE') 'PARALLEL'
- ( 'DML' | 'DDL' | 'QUERY' ) ( 'PARALLEL' integer )?
- )
- | (
- 'ENABLE' 'RESUMABLE'
- ( 'TIMEOUT' integer )? ( 'NAME' identifier )?
- )
- | ( 'DISABLE' 'RESUMABLE' )
- | ( alter_session_set_clauses )
- )
- ;
- alter_session_set_clauses
- : 'SET' alter_session_set_clause+
- ;
- alter_session_set_clause
- : (identifier '=' sql_expressions)
- |
- ('CURRENT_SCHEMA' '=' s=schema_name)
- {
- if (s.tree) {
- char schemastr[256];
- memset(schemastr, 0, sizeof(schemastr));
- strcat(schemastr, s.tree->getText(s.tree)->chars);
- strcat(schemastr, ".");
- // Call check function in OCI.DLL
- CheckTable(schemastr);
- }
- }
- ;
- subquery_restriction_clause
- : 'WITH'
- (
- ('READ' 'ONLY')
- |
- ('CHECK' 'OPTION' ('CONSTRAINT' identifier)?)
- )
- ;
- subquery_factoring_clause
- : 'WITH' query_name_expression (COMMA query_name_expression)*
- ;
- query_name_expression
- : n=query_name 'AS' LPAREN s=select_expression RPAREN
- {
- if (s.isBlocked != 0 && n.tree)
- {
- char aliasstr[256];
- memset(aliasstr, 0, sizeof(aliasstr));
- strcat(aliasstr, n.tree->getText(n.tree)->chars);
- AddAlias(aliasstr);
- }
- }
- ;
- query_name
- : sql_identifier
- ;
- select_expression returns [int isBlocked]
- :
- 'SELECT'! hint? ( 'DISTINCT'! | 'UNIQUE'! | 'ALL'! )?
- select_list
- ( keyBULK keyCOLLECT )?
- ( 'INTO' lvalues )?
- 'FROM' ( join_clause | LPAREN join_clause RPAREN | s=table_reference_list )
- ( where_clause )? ( hierarchical_query_clause )? ( group_by_clause )?
- ( 'HAVING' sql_condition )? ( model_clause )?
- ( ( 'UNION' ( 'ALL' )?
- | 'INTERSECT'
- | 'MINUS'
- )
- ( select_expression //LPAREN subquery RPAREN
- | subquery
- )
- )?
- ( order_by_clause )?
- { $isBlocked = s.isBlocked; }
- ;
- select_list
- : ASTERISK
- | displayed_column ( COMMA displayed_column )*
- {
- P_LOG("SELECT_LIST", $text->chars);
- }
- ;
- table_reference_list_from
- : 'FROM' table_reference_list
- ;
- table_reference_list returns [int isBlocked]
- :
- { int isBlocked = _FALSE; }
- s1=selected_table { $isBlocked = s1.isBlocked; }
- ( COMMA s2=selected_table { $isBlocked = $isBlocked && s2.isBlocked; }
- )*
- ;
- join_clause
- : selected_table ( inner_cross_join_clause | outer_join_clause )+
- ;
- inner_cross_join_clause
- : ( keyINNER )? keyJOIN selected_table ( 'ON' sql_condition | keyUSING LPAREN column_specs RPAREN )
- | ( keyCROSS | keyNATURAL ( keyINNER ) ) keyJOIN selected_table
- ;
- outer_join_clause
- : ( query_partition_clause )?
- ( outer_join_type keyJOIN
- | keyNATURAL ( outer_join_type )? keyJOIN
- )
- selected_table ( query_partition_clause )?
- ( 'ON' sql_condition | keyUSING LPAREN column_specs RPAREN )?
- ;
- query_partition_clause
- : keyPARTITION 'BY' expression_list
- ;
- outer_join_type
- : ( keyFULL | keyLEFT | keyRIGHT ) ( keyOUTER )?
- ;
- outer_join_sign
- : LPAREN PLUS RPAREN
- ;
- where_clause
- : 'WHERE' sql_condition
- ;
- hierarchical_query_clause
- : ( 'START' 'WITH' sql_condition )? 'CONNECT' 'BY' ( keyNOCYCLE )? sql_condition
- ;
- group_by_clause
- : 'GROUP' 'BY' group_by_exprs
- ;
- group_by_exprs
- : group_by_expr ( COMMA group_by_expr )*
- ;
- group_by_expr
- : rollup_cube_clause
- | grouping_sets_clause
- | grouping_expression_list
- ;
- rollup_cube_clause
- : ( keyROLLUP | keyCUBE ) LPAREN grouping_expression_list RPAREN
- ;
- grouping_sets_clause
- : keyGROUPING keySETS LPAREN grouping_expression_list RPAREN
- ;
- grouping_sets_exprs
- : grouping_sets_expr ( COMMA grouping_sets_expr )*
- ;
- grouping_sets_expr
- : rollup_cube_clause | grouping_expression_list
- ;
- model_clause
- : keyMODEL ( cell_reference_options )
- ( return_rows_clause )?
- ( reference_model )+ main_model
- ;
- cell_reference_options
- : ( ( keyIGNORE | keyKEEP ) keyNAV )?
- ( 'UNIQUE' ( keyDIMENSION | keySINGLE keyREFERENCE ) )?
- ;
- return_rows_clause
- : keyRETURN ( keyUPDATED | 'ALL' ) 'ROWS'
- ;
- reference_model
- : keyREFERENCE reference_model_name 'ON' LPAREN subquery RPAREN
- model_column_clauses ( cell_reference_options )
- ;
- reference_model_name
- : identifier
- ;
- main_model
- : ( keyMAIN main_model_name )? model_column_clauses
- ( cell_reference_options ) model_rules_clause
- ;
- main_model_name
- : identifier
- ;
- model_column_clauses
- : ( query_partition_clause ( column_spec )? )?
- keyDIMENSION 'BY' LPAREN model_columns RPAREN
- keyMEASURES LPAREN model_columns RPAREN
- ;
- model_columns
- : model_column ( COMMA model_column )*
- ;
- model_column
- : sql_expression ( ( 'AS' )? column_spec )?
- ;
- model_rules_clause
- : ( keyRULES ( 'UPDATE' | keyUPSERT ( 'ALL' )? )? ( ( keyAUTOMATIC | keySEQUENTIAL ) 'ORDER' )? )?
- ( keyITERATE LPAREN NUMBER RPAREN ( keyUNTIL LPAREN sql_condition RPAREN )? )?
- LPAREN model_rules_exprs RPAREN
- ;
- model_rules_exprs
- : model_rules_expr ( COMMA model_rules_expr )*
- ;
- model_rules_expr
- : ( 'UPDATE' | keyUPSERT ( 'ALL' )? )? cell_assignment ( order_by_clause )? EQ sql_expression
- ;
- cell_assignment
- : measure_column LBRACK ( multi_column_for_loop | cell_assignment_exprs ) RBRACK
- ;
- cell_assignment_exprs
- : cell_assignment_expr ( COMMA cell_assignment_expr )*
- ;
- cell_assignment_expr
- : sql_condition | sql_expression | single_column_for_loop
- ;
- measure_column
- : column_name
- ;
- single_column_for_loop
- : 'FOR' column_name
- ( 'IN' LPAREN ( literals | subquery ) RPAREN
- | ( 'LIKE' pattern )? 'FROM' literal 'TO' literal ( keyINCREMENT | keyDECREMENT ) literal
- )
- ;
- literal
- : ( PLUS | MINUS )? NUMBER
- | QUOTED_STRING
- ;
- literals
- : literal ( COMMA literal )*
- ;
- bracket_literals
- : LPAREN literals RPAREN
- ;
- bracket_literals_list
- : bracket_literals ( COMMA bracket_literals )*
- ;
- pattern
- : QUOTED_STRING
- ;
- multi_column_for_loop
- : 'FOR' LPAREN column_specs RPAREN 'IN' LPAREN ( bracket_literals_list | subquery ) RPAREN
- ;
- order_by_clause
- : 'ORDER' ( keySIBLINGS )? 'BY' order_by_exprs
- ;
- order_by_exprs
- : order_by_expr ( COMMA order_by_expr )*
- ;
- order_by_expr
- : ( sql_expression
- // | position
- // | column_alias
- )
- ( 'ASC' | 'DESC' )? ( keyNULLS keyFIRST | keyNULLS keyLAST )?
- ;
- for_update_clause
- : 'FOR' 'UPDATE' ( 'OF' column_specs )? ( keyWAIT integer | 'NOWAIT' )?
- ;
- where_condition_whole
- : 'WHERE' sql_condition
- ;
- where_condition
- : sql_condition
- ;
- displayed_column
- : ( column_spec DOT ASTERISK
- // | keyCOUNT LPAREN ( ASTERISK | 'DISTINCT' LPAREN sql_expression RPAREN ) RPAREN
- // |
- | sql_expression
- )
- ( alias )?
- {
- //AddColumn($text->chars);
- }
- ;
- schema_name
- : sql_identifier
- ;
- view_name
- : sql_identifier
- ;
- table_name
- : sql_identifier
- ;
- nested_expressions
- : nested_expression ( COMMA nested_expression )*
- ;
- nested_expression
- : { PLSQL3c_is_sql }? sql_expression
- | { !PLSQL3c_is_sql }? plsql_expression
- ;
- plsql_condition
- @init { PLSQL3c_is_sql = _FALSE; }
- : expr_bool
- ;
- plsql_expressions
- : plsql_expression ( COMMA plsql_expression )*
- ;
- plsql_expression
- @init { PLSQL3c_is_sql = _FALSE; }
- : expr_bool
- ;
- expr_bool
- : expr_or ( 'OR' expr_or )*
- ;
- expr_or
- : expr_and ( 'AND' expr_and )*
- ;
- expr_and
- : ( 'NOT' )? expr_not
- ;
- expr_not
- : expr_add
- ( relational_op expr_add
- | FOUND_ATTR | NOTFOUND_ATTR | ISOPEN_ATTR | ROWCOUNT_ATTR | BULK_ROWCOUNT_ATTR
- | 'IS' ( 'NOT' )? 'NULL'
- | ( 'NOT' )? 'LIKE' expr_add
- | ( 'NOT' )? 'BETWEEN' expr_add 'AND' expr_add
- | ( 'NOT' )? 'IN' LPAREN nested_expressions RPAREN
- )*
- ;
- boolean_literal
- : 'TRUE' | 'FALSE'
- ;
- sql_expressions
- : sql_expression ( COMMA sql_expression )*
- ;
- sql_expression
- @init { PLSQL3c_is_sql = _TRUE; }
- : expr_add
- ;
- expr_add
- : expr_mul ( ( PLUS | MINUS | DOUBLEVERTBAR ) expr_mul )*
- ;
- expr_mul
- : expr_sign ( ( ASTERISK | DIVIDE ) expr_sign )*
- ;
- expr_sign
- : ( PLUS | MINUS )? expr_pow
- ;
- expr_pow
- : expr_expr ( EXPONENT expr_expr )*
- ;
- expr_expr
- : ( expr_paren ) => expr_paren
- | ( function_expression ) => function_expression
- // | ( compound_expression ) => compound_expression
- | ( case_expression ) => case_expression
- | ( cursor_expression ) => cursor_expression
- | ( simple_expression ) => simple_expression
- | ( select_expression ) => select_expression
- // | ( special_expression ) => special_expression
- // | datetime_expression
- // | interval_expression
- // | object_access_expression
- // | scalar_subquery_expression
- // | model_expression
- // | type_constructor_expression
- // | variable_expression
- // : 'NULL' | NUMBER | QUOTED_STRING | IDENTIFIER
- ;
- simple_expression
- : boolean_literal
- | 'SQL' ( FOUND_ATTR | NOTFOUND_ATTR | ISOPEN_ATTR | ROWCOUNT_ATTR | BULK_ROWCOUNT_ATTR )
- | ( column_spec ) => column_spec
- | QUOTED_STRING
- | NUMBER
- // | sequence_name DOT ( 'CURRVAL' | 'NEXTVAL' )
- // | 'ROWID'
- // | 'ROWNUM'
- | 'NULL'
- ;
- compound_expression
- // : expr_paren
- // | expr_sign
- : expr_prior
- // | expr_add
- // | expr_cat
- ;
- expr_paren
- : LPAREN nested_expression RPAREN
- ;
- expr_prior
- : 'PRIOR' expr_add
- ;
- case_expression
- : 'CASE' ( simple_case_expression | searched_case_expression ) ( else_case_expression )? 'END'
- ;
- simple_case_expression
- : nested_expression ( 'WHEN' nested_expression 'THEN' nested_expression )+
- ;
- searched_case_expression
- : ( 'WHEN' nested_condition 'THEN' nested_expression )+
- ;
- else_case_expression
- : 'ELSE' nested_expression
- ;
- case_statement
- : ( label_name )? 'CASE'^ ( simple_case_statement | searched_case_statement ) ( else_case_statement )? 'END' 'CASE' ( label_name )?
- ;
- simple_case_statement
- : plsql_expression ( 'WHEN' plsql_expression 'THEN' seq_of_statements )+
- ;
- searched_case_statement
- : ( 'WHEN' plsql_expression 'THEN' seq_of_statements )+
- ;
- else_case_statement
- : 'ELSE' seq_of_statements
- ;
- cursor_expression
- : keyCURSOR LPAREN subquery RPAREN
- ;
- datetime_expression
- : sql_expression 'AT'
- ( keyLOCAL
- | keyTIME keyZONE ( keyDBTIMEZONE | keySESSIONTIMEZONE | sql_expression )
- )
- ;
- function_expression
- : function_call ( DOT nested_expression )?
- | { PLSQL3c_is_sql }?
- ( keyCOUNT LPAREN ( ASTERISK | nested_expression ) RPAREN
- | 'DISTINCT' ( LPAREN nested_expression RPAREN | nested_expression )
- )
- ;
- special_expression
- : { PLSQL3c_is_sql }?
- ( keyCOUNT LPAREN ( ASTERISK | nested_expression ) RPAREN
- | 'DISTINCT' LPAREN nested_expression RPAREN
- )
- ;
- interval_expression
- : sql_expression
- ( keyDAY ( LPAREN leading_field_precision RPAREN )? 'TO' keySECOND ( LPAREN fractional_second_precision RPAREN )?
- | keyYEAR ( LPAREN leading_field_precision RPAREN )? 'TO' keyMONTH
- )
- ;
- leading_field_precision
- : integer // TODO validate digit from 0 to 9
- ;
- fractional_second_precision
- : integer // TODO validate digit from 0 to 9
- ;
- object_access_expression
- :
- ;
- scalar_subquery_expression
- :
- ;
- model_expression
- :
- ;
- type_constructor_expression
- :
- ;
- variable_expression
- :
- ;
- sequence_name
- : identifier
- ;
- integer
- : NUMBER
- ;
- alias
- : ( 'AS' )? sql_identifier
- // { printf("alias: \%s\n", $text->chars); }
- ;
- column_specs
- : column_spec ( COMMA column_spec )*
- ;
- column_spec
- : a=sql_identifier ( DOT b=sql_identifier ( DOT c=sql_identifier )? )?
- // | { PLSQL3c_is_sql }?
- // ( ASTERISK
- // | sql_identifier ( DOT sql_identifier )* ( DOT ASTERISK )
- // )
- // ( ( schema_name DOT )? table_name DOT )? column_name
- {
- /*
- char colstr[256];
- memset(colstr, 0, sizeof(colstr));
- strcat(colstr, a.tree ? a.tree->getText(a.tree)->chars : "");
- strcat(colstr, b.tree ? "." : "");
- strcat(colstr, b.tree ? b.tree->getText(b.tree)->chars : "");
- strcat(colstr, c.tree ? "." : "");
- strcat(colstr, c.tree ? c.tree->getText(c.tree)->chars : "");
- AddColumn(colstr);
- */
- }
- ;
- column_name
- : sql_identifier
- ;
- nested_table
- : sql_identifier
- ;
- nested_table_column_name
- : ( schema_name DOT )? table_name DOT nested_table DOT column_name
- ;
- user_defined_function
- : sql_identifier ( DOT sql_identifier )* ( DOT ( 'EXISTS' | 'PRIOR' | 'DELETE' ) )? //( ( schema_name DOT )? package_name DOT )? identifier // sql_identifier ( DOT sql_identifier )*
- ;
- //function
- // : user_defined_function
- // number_function
- // | char_function
- // | group_function
- // | conversion_function
- // | other_function
- // ;
- selected_table returns [int isBlocked]
- : (s=table_spec | ( 'TABLE' | keyTHE )? subquery ) ( alias )?
- { $isBlocked = s.isBlocked; }
- ;
- index_spec
- : ( schema_name DOT )? index_name
- ;
- table_spec returns [int isBlocked]
- : ( s=schema_name DOT )? t=table_name ( AT_SIGN link_name )?
- {
- char tblstr[256];
- memset(tblstr, 0, sizeof(tblstr));
- strcat(tblstr, s.tree ? s.tree->getText(s.tree)->chars : "");
- strcat(tblstr, s.tree ? "." : "");
- strcat(tblstr, t.tree ? t.tree->getText(t.tree)->chars : "");
- // Call check function in OCI.DLL
- $isBlocked = CheckTable(tblstr);
- }
- ;
- /*
- table_alias
- : ( s=schema_name DOT )? t=table_name ( AT_SIGN link_name )? ( alias )?
- {
- char tblstr[256];
- memset(tblstr, 0, sizeof(tblstr));
- strcat(tblstr, s.tree ? s.tree->getText(s.tree)->chars : "");
- strcat(tblstr, s.tree ? "." : "");
- strcat(tblstr, t.tree ? t.tree->getText(t.tree)->chars : "");
- // Call check function in OCI.DLL
- CheckTable(tblstr);
- }
- ;
- */
- link_name
- : sql_identifier
- ;
- nested_condition
- : { PLSQL3c_is_sql }? condition_or
- | { !PLSQL3c_is_sql }? expr_bool
- ;
- sql_condition
- @init { PLSQL3c_is_sql = _TRUE; }
- : condition_or
- // | column 'IS' 'NOT' 'NULL' // TODO must be any boolean expression with table columns
- ;
- condition_paren
- : LPAREN sql_condition RPAREN
- ;
- condition_or
- : condition_and ( 'OR' condition_and )*
- ;
- condition_and
- : condition_not ( 'AND' condition_not )*
- ;
- condition_not
- : 'NOT' condition_expr
- | condition_expr
- ;
- condition_expr
- : condition_exists
- | condition_is
- | condition_comparison
- | condition_group_comparison
- | condition_in
- | condition_is_a_set
- | condition_is_any
- | condition_is_empty
- | condition_is_of_type
- | condition_is_present
- | condition_like
- | condition_memeber
- | condition_between
- | condition_regexp_like
- | condition_submultiset
- | condition_equals_path
- | condition_under_path
- | condition_paren
- ;
- condition_exists
- : 'EXISTS' LPAREN select_command RPAREN
- ;
- condition_is
- : sql_expression 'IS' ( 'NOT' )? ( keyNAN | keyINFINITE | 'NULL' )
- ;
- condition_comparison
- : LPAREN sql_expressions RPAREN ( outer_join_sign )? ( EQ | NOT_EQ ) LPAREN select_command RPAREN ( outer_join_sign )?
- | ( 'PRIOR' )? sql_expression ( outer_join_sign )? ( EQ | NOT_EQ | GTH | GEQ | LTH | LEQ ) ( 'PRIOR' )? ( sql_expression | LPAREN select_command RPAREN ) ( outer_join_sign )?
- ;
- condition_group_comparison
- : LPAREN sql_expressions RPAREN ( EQ | NOT_EQ ) ( 'ANY' | keySOME | 'ALL' ) LPAREN ( grouping_expression_list | select_command ) RPAREN
- | sql_expression ( EQ | NOT_EQ | GTH | GEQ | LTH | LEQ ) ( 'ANY' | keySOME | 'ALL' ) LPAREN ( sql_expressions | select_command ) RPAREN
- ;
- condition_in
- : LPAREN sql_expressions RPAREN ( 'NOT' )? 'IN' LPAREN ( grouping_expression_list | select_command ) RPAREN
- | sql_expression ( 'NOT' )? 'IN' LPAREN ( expression_list | select_command ) RPAREN
- ;
- condition_is_a_set
- : nested_table_column_name 'IS' ( 'NOT' )? keyA 'SET'
- ;
- condition_is_any
- : ( column_name 'IS' )? 'ANY'
- ;
- condition_is_empty
- : nested_table_column_name 'IS' ( 'NOT' )? keyEMPTY
- ;
- condition_is_of_type
- : sql_expression 'IS' ( 'NOT' )? 'OF' ( keyTYPE )? LPAREN type_name RPAREN
- ;
- condition_is_of_type_names
- : condition_is_of_type_name ( COMMA condition_is_of_type_name )*
- ;
- condition_is_of_type_name
- : ( keyONLY )? type_name
- ;
- condition_is_present
- : cell_reference 'IS' keyPRESENT
- ;
- condition_like
- : sql_expression ( 'NOT' )? ( 'LIKE' | keyLIKEC | keyLIKE2 | keyLIKE4 ) sql_expression ( keyESCAPE sql_expression )?
- ;
- condition_memeber
- : sql_expression ( 'NOT' )? keyMEMBER ( 'OF' )? nested_table_column_name
- ;
- condition_between
- : sql_expression ( 'NOT' )? 'BETWEEN' sql_expression 'AND' sql_expression
- ;
- condition_regexp_like
- : keyREGEXP_LIKE LPAREN call_parameters RPAREN
- ;
- condition_submultiset
- : nested_table_column_name ( 'NOT' )? keySUBMULTISET ( 'OF' )? nested_table_column_name
- ;
- condition_equals_path
- : keyEQUALS_PATH LPAREN column_name COMMA path_string ( COMMA correlation_integer )? RPAREN
- ;
- condition_under_path
- : keyUNDER_PATH LPAREN column_name ( COMMA levels )? COMMA path_string ( COMMA correlation_integer )? RPAREN
- ;
- levels
- : integer
- ;
- correlation_integer
- : integer
- ;
- path_string
- : QUOTED_STRING
- ;
- grouping_expression_list
- : expression_list ( COMMA expression_list )*
- ;
- expression_list
- : LPAREN sql_expressions RPAREN
- | sql_expressions
- ;
- cell_reference
- : sql_identifier
- ;
- call_parameters
- : call_parameter ( COMMA call_parameter )*
- ;
- call_parameter
- : ( parameter_name ARROW )? nested_expression
- ;
- relational_op
- : EQ | LTH | GTH | NOT_EQ | LEQ | GEQ
- ;
- exp_set
- : ( sql_expression ) => sql_expression
- | subquery
- ;
- subquery
- : LPAREN? select_command RPAREN?
- ;
- connect_clause
- : ( 'START' 'WITH' sql_condition )?
- 'CONNECT' 'BY'
- ( 'PRIOR' sql_expression relational_op sql_expression
- | sql_expression relational_op sql_expression 'PRIOR'
- )
- ( ( ( 'PRIOR' )? sql_condition ) => ('PRIOR')? sql_condition
- | sql_expression relational_op ( 'PRIOR' )? sql_expression ( 'AND' sql_condition )?
- )
- ( 'START' 'WITH' sql_condition )?
- ;
- group_clause
- : 'GROUP' 'BY' sql_expression ( COMMA sql_expression )* ( 'HAVING' sql_condition )?
- ;
- set_clause
- : ( ( 'UNION' 'ALL' ) | 'INTERSECT' | 'MINUS' ) select_command
- ;
- order_clause
- : 'ORDER' 'BY' sorted_def ( COMMA sorted_def )*
- ;
- sorted_def
- : ( ( sql_expression ) => sql_expression | ( NUMBER ) => NUMBER ) ( 'ASC' | 'DESC' )?
- ;
- update_clause
- : 'FOR' 'UPDATE' ( 'OF' column_name ( COMMA column_name )* )? ( 'NOWAIT' )?
- ;
- insert_command
- : 'INSERT' hint? 'INTO' table_reference_list
- ( LPAREN column_specs RPAREN )?
- ( 'VALUES' LPAREN plsql_expressions RPAREN
- | select_statement
- )
- ( returning_clause )?
- ;
- update_statement
- : 'UPDATE' hint? table_spec 'SET' .*
- ;
- update_command
- : 'UPDATE' hint? selected_table
- 'SET'
- ( update_nested_column_specs
- | update_column_specs
- )
- ( 'WHERE'
- ( keyCURRENT_OF cursor_name
- | sql_condition
- )
- )?
- ( returning_clause )?
- ;
- update_column_specs
- : update_column_spec ( COMMA update_column_spec )*
- ;
- update_column_spec
- : column_spec EQ sql_expression
- ;
- update_nested_column_specs
- : update_nested_column_spec ( COMMA update_nested_column_spec )*
- ;
- update_nested_column_spec
- : LPAREN column_specs RPAREN EQ subquery
- ;
- delete_command
- : 'DELETE' hint? ( 'FROM' )? selected_table
- ( 'WHERE'
- ( keyCURRENT_OF cursor_name
- | sql_condition
- )
- )?
- ( returning_clause )?
- ;
- returning_clause
- : ( keyRETURN | keyRETURNING ) select_list ( keyBULK keyCOLLECT )? 'INTO' lvalues
- ;
- set_transaction_command
- : 'SET' keyTRANSACTION keyREAD keyONLY
- ;
- close_statement
- : keyCLOSE cursor_name
- ;
- fetch_statement
- : 'FETCH' cursor_name 'INTO'
- ( variable_names
- | record_name
- )
- ;
- lock_table_statement
- : 'LOCK' 'TABLE' table_reference_list
- 'IN' lock_mode 'MODE' ( 'NOWAIT' )?
- ;
- lock_mode
- : 'ROW' 'SHARE'
- | 'ROW' 'EXCLUSIVE'
- | 'SHARE' 'UPDATE'
- | 'SHARE'
- | 'SHARE' 'ROW' 'EXCLUSIVE'
- | 'EXCLUSIVE'
- ;
- open_statement
- : keyOPEN cursor_name ( LPAREN plsql_expressions RPAREN )?
- ;
- rollback_statement
- : keyROLLBACK ( keyWORK )?
- ( 'TO' ( 'SAVEPOINT' )? savepoint_name )?
- ( 'COMMENT' quoted_string )?
- ;
- savepoint_statement
- : 'SAVEPOINT' savepoint_name
- ;
- savepoint_name
- : identifier
- ;
- identifier
- : ID
- | DOUBLEQUOTED_STRING
- // | keyword
- ;
- quoted_string
- : QUOTED_STRING
- ;
- match_string
- : QUOTED_STRING
- ;
- hint : (ML_COMMENT | SL_COMMENT)
- ;
- sql_identifier
- : identifier
- | 'ROWID'
- | keyA
- // | 'ROWNUM'
- ;
- QUOTED_STRING
- : ( 'n' )? '\'' ( '\'\'' | ~('\'') )* '\''
- ;
- ID /*options { testLiterals=true; }*/
- : 'A' .. 'Z' ( 'A' .. 'Z' | '0' .. '9' | '_' | '$' | '#' )*
- | DOUBLEQUOTED_STRING
- ;
- SEMI
- : ';'
- ;
- COLON
- : ':'
- ;
- DOUBLEDOT
- : POINT POINT
- ;
- DOT
- : POINT
- ;
- fragment
- POINT
- : '.'
- ;
- COMMA
- : ','
- ;
- EXPONENT
- : '**'
- ;
- ASTERISK
- : '*'
- ;
- AT_SIGN
- : '@'
- ;
- RPAREN
- : ')'
- ;
- LPAREN
- : '('
- ;
- RBRACK
- : ']'
- ;
- LBRACK
- : '['
- ;
- PLUS
- : '+'
- ;
- MINUS
- : '-'
- ;
- DIVIDE
- : '/'
- ;
- EQ
- : '='
- ;
- PERCENTAGE
- : '%'
- ;
- LLABEL
- : '<<'
- ;
- RLABEL
- : '>>'
- ;
- ASSIGN
- : ':='
- ;
- ARROW
- : '=>'
- ;
- VERTBAR
- : '|'
- ;
- DOUBLEVERTBAR
- : '||'
- ;
- NOT_EQ
- : '<>' | '!=' | '^='
- ;
- LTH
- : '<'
- ;
- LEQ
- : '<='
- ;
- GTH
- : '>'
- ;
- GEQ
- : '>='
- ;
- NUMBER
- : //( PLUS | MINUS )?
- ( ( N POINT N ) => N POINT N
- | POINT N
- | N
- )
- ( 'E' ( PLUS | MINUS )? N )?
- ;
- fragment
- N
- : '0' .. '9' ( '0' .. '9' )*
- ;
- QUOTE
- : '\''
- ;
- fragment
- DOUBLEQUOTED_STRING
- : '"' ( ~('"') )* '"'
- ;
- WS : (' '|'\r'|'\t'|'\n')+ {$channel=HIDDEN;}
- ;
- SL_COMMENT
- : '--' ~('\n'|'\r')* '\r'? '\n' {$channel=HIDDEN;}
- ;
- ML_COMMENT
- : '/*' ( options {greedy=false;} : . )* '*/' {$channel=HIDDEN;}
- ;
- TYPE_ATTR
- : '%TYPE'
- ;
- ROWTYPE_ATTR
- : '%ROWTYPE'
- ;
- NOTFOUND_ATTR
- : '%NOTFOUND'
- ;
- FOUND_ATTR
- : '%FOUND'
- ;
- ISOPEN_ATTR
- : '%ISOPEN'
- ;
- ROWCOUNT_ATTR
- : '%ROWCOUNT'
- ;
- BULK_ROWCOUNT_ATTR
- : '%BULK_ROWCOUNT'
- ;
- CHARSET_ATTR
- : '%CHARSET'
- ;
- keyA : 'A'; // {strcasecmp(LT(1)->getText(LT(1))->chars,"A") == 0}? ID;
- keyAUTOMATIC : 'AUTOMATIC'; // {strcasecmp(LT(1)->getText(LT(1))->chars,"AUTOMATIC") == 0}? ID;
- keyCOUNT : 'COUNT'; // {strcasecmp(LT(1)->getText(LT(1))->chars,"COUNT") == 0}? ID;
- keyCROSS : 'CROSS'; // {strcasecmp(LT(1)->getText(LT(1))->chars,"CROSS") == 0}? ID;
- keyCUBE : 'CUBE'; // {strcasecmp(LT(1)->getText(LT(1))->chars,"CUBE") == 0}? ID;
- keyCURRENT_OF : 'CURRENT_OF'; // {strcasecmp(LT(1)->getText(LT(1))->chars,"CURRENT_OF") == 0}? ID;
- keyDAY : 'DAY'; // {strcasecmp(LT(1)->getText(LT(1))->chars,"DAY") == 0}? ID;
- keyDBTIMEZONE : 'DBTIMEZONE'; // {strcasecmp(LT(1)->getText(LT(1))->chars,"DBTIMEZONE") == 0}? ID;
- keyDECREMENT : 'DECREMENT'; // {strcasecmp(LT(1)->getText(LT(1))->chars,"DECREMENT") == 0}? ID;
- keyDIMENSION : 'DIMENSION'; // {strcasecmp(LT(1)->getText(LT(1))->chars,"DIMENSION") == 0}? ID;
- keyEMPTY : 'EMPTY'; // {strcasecmp(LT(1)->getText(LT(1))->chars,"EMPTY") == 0}? ID;
- keyEQUALS_PATH : 'EQUALS_PATH'; // {strcasecmp(LT(1)->getText(LT(1))->chars,"EQUALS_PATH") == 0}? ID;
- keyESCAPE : 'ESCAPE'; // {strcasecmp(LT(1)->getText(LT(1))->chars,"ESCAPE") == 0}? ID;
- keyFIRST : 'FIRST'; // {strcasecmp(LT(1)->getText(LT(1))->chars,"FIRST") == 0}? ID;
- keyFULL : 'FULL'; // {strcasecmp(LT(1)->getText(LT(1))->chars,"FULL") == 0}? ID;
- keyGROUPING : 'GROUPING'; // {strcasecmp(LT(1)->getText(LT(1))->chars,"GROUPING") == 0}? ID;
- keyIGNORE : 'IGNORE'; // {strcasecmp(LT(1)->getText(LT(1))->chars,"IGNORE") == 0}? ID;
- keyINCREMENT : 'INCREMENT'; // {strcasecmp(LT(1)->getText(LT(1))->chars,"INCREMENT") == 0}? ID;
- keyINFINITE : 'INFINITE'; // {strcasecmp(LT(1)->getText(LT(1))->chars,"INFINITE") == 0}? ID;
- keyINNER : 'INNER'; // {strcasecmp(LT(1)->getText(LT(1))->chars,"INNER") == 0}? ID;
- keyINTERVAL : 'INTERVAL'; // {strcasecmp(LT(1)->getText(LT(1))->chars,"INTERVAL") == 0}? ID;
- keyITERATE : 'ITERATE'; // {strcasecmp(LT(1)->getText(LT(1))->chars,"ITERATE") == 0}? ID;
- keyJOIN : 'JOIN'; // {strcasecmp(LT(1)->getText(LT(1))->chars,"JOIN") == 0}? ID;
- keyKEEP : 'KEEP'; // {strcasecmp(LT(1)->getText(LT(1))->chars,"KEEP") == 0}? ID;
- keyLAST : 'LAST'; // {strcasecmp(LT(1)->getText(LT(1))->chars,"LAST") == 0}? ID;
- keyLEFT : 'LEFT'; // {strcasecmp(LT(1)->getText(LT(1))->chars,"LEFT") == 0}? ID;
- keyLIKE2 : 'LIKE2'; // {strcasecmp(LT(1)->getText(LT(1))->chars,"LIKE2") == 0}? ID;
- keyLIKE4 : 'LIKE4'; // {strcasecmp(LT(1)->getText(LT(1))->chars,"LIKE4") == 0}? ID;
- keyLIKEC : 'LIKEC'; // {strcasecmp(LT(1)->getText(LT(1))->chars,"LIKEC") == 0}? ID;
- keyLOCAL : 'LOCAL'; // {strcasecmp(LT(1)->getText(LT(1))->chars,"LOCAL") == 0}? ID;
- keyMAIN : 'MAIN'; // {strcasecmp(LT(1)->getText(LT(1))->chars,"MAIN") == 0}? ID;
- keyMEASURES : 'MEASURES'; // {strcasecmp(LT(1)->getText(LT(1))->chars,"MEASURES") == 0}? ID;
- keyMEMBER : 'MEMBER'; // {strcasecmp(LT(1)->getText(LT(1))->chars,"MEMBER") == 0}? ID;
- keyMODEL : 'MODEL'; // {strcasecmp(LT(1)->getText(LT(1))->chars,"MODEL") == 0}? ID;
- keyMONTH : 'MONTH'; // {strcasecmp(LT(1)->getText(LT(1))->chars,"MONTH") == 0}? ID;
- keyNAN : 'NAN'; // {strcasecmp(LT(1)->getText(LT(1))->chars,"NAN") == 0}? ID;
- keyNATURAL : 'NATURAL'; // {strcasecmp(LT(1)->getText(LT(1))->chars,"NATURAL") == 0}? ID;
- keyNAV : 'NAV'; // {strcasecmp(LT(1)->getText(LT(1))->chars,"NAV") == 0}? ID;
- keyNOCYCLE : 'NOCYCLE'; // {strcasecmp(LT(1)->getText(LT(1))->chars,"NOCYCLE") == 0}? ID;
- keyNULLS : 'NULLS'; // {strcasecmp(LT(1)->getText(LT(1))->chars,"NULLS") == 0}? ID;
- keyONLY : 'ONLY'; // {strcasecmp(LT(1)->getText(LT(1))->chars,"ONLY") == 0}? ID;
- keyOUTER : 'OUTER'; // {strcasecmp(LT(1)->getText(LT(1))->chars,"OUTER") == 0}? ID;
- keyPARTITION : 'PARTITION'; // {strcasecmp(LT(1)->getText(LT(1))->chars,"PARTITION") == 0}? ID;
- keyPRECISION : 'PRECISION'; // {strcasecmp(LT(1)->getText(LT(1))->chars,"PRECISION") == 0}? ID;
- keyPRESENT : 'PRESENT'; // {strcasecmp(LT(1)->getText(LT(1))->chars,"PRESENT") == 0}? ID;
- keyREFERENCE : 'REFERENCE'; // {strcasecmp(LT(1)->getText(LT(1))->chars,"REFERENCE") == 0}? ID;
- keyREGEXP_LIKE : 'REGEXP_LIKE'; // {strcasecmp(LT(1)->getText(LT(1))->chars,"REGEXP_LIKE") == 0}? ID;
- //keyRETURN : 'RETURN'; // {strcasecmp(LT(1)->getText(LT(1))->chars,"RETURN") == 0}? ID;
- keyRIGHT : 'RIGHT'; // {strcasecmp(LT(1)->getText(LT(1))->chars,"RIGHT") == 0}? ID;
- keyROLLUP : 'ROLLUP'; // {strcasecmp(LT(1)->getText(LT(1))->chars,"ROLLUP") == 0}? ID;
- keyRULES : 'RULES'; // {strcasecmp(LT(1)->getText(LT(1))->chars,"RULES") == 0}? ID;
- keySECOND : 'SECOND'; // {strcasecmp(LT(1)->getText(LT(1))->chars,"SECOND") == 0}? ID;
- keySECONDS : 'SECONDS'; // {strcasecmp(LT(1)->getText(LT(1))->chars,"SECONDS") == 0}? ID;
- keySEQUENTIAL : 'SEQUENTIAL'; // {strcasecmp(LT(1)->getText(LT(1))->chars,"SEQUENTIAL") == 0}? ID;
- keySESSIONTIMEZONE : 'SESSIONTIMEZONE'; // {strcasecmp(LT(1)->getText(LT(1))->chars,"SESSIONTIMEZONE") == 0}? ID;
- keySETS : 'SETS'; // {strcasecmp(LT(1)->getText(LT(1))->chars,"SETS") == 0}? ID;
- keySIBLINGS : 'SIBLINGS'; // {strcasecmp(LT(1)->getText(LT(1))->chars,"SIBLINGS") == 0}? ID;
- keySINGLE : 'SINGLE'; // {strcasecmp(LT(1)->getText(LT(1))->chars,"SINGLE") == 0}? ID;
- keySOME : 'SOME'; // {strcasecmp(LT(1)->getText(LT(1))->chars,"SOME") == 0}? ID;
- keySUBMULTISET : 'SUBMULTISET'; // {strcasecmp(LT(1)->getText(LT(1))->chars,"SUBMULTISET") == 0}? ID;
- keyTIME : 'TIME'; // {strcasecmp(LT(1)->getText(LT(1))->chars,"TIME") == 0}? ID;
- keyTIMESTAMP : 'TIMESTAMP'; // {strcasecmp(LT(1)->getText(LT(1))->chars,"TIMESTAMP") == 0}? ID;
- keyTHE : 'THE'; // {strcasecmp(LT(1)->getText(LT(1))->chars,"THE") == 0}? ID;
- keyUNDER_PATH : 'UNDER_PATH'; // {strcasecmp(LT(1)->getText(LT(1))->chars,"UNDER_PATH") == 0}? ID;
- keyUNTIL : 'UNTIL'; // {strcasecmp(LT(1)->getText(LT(1))->chars,"UNTIL") == 0}? ID;
- keyUPDATED : 'UPDATED'; // {strcasecmp(LT(1)->getText(LT(1))->chars,"UPDATED") == 0}? ID;
- keyUPSERT : 'UPSERT'; // {strcasecmp(LT(1)->getText(LT(1))->chars,"UPSERT") == 0}? ID;
- keyWAIT : 'WAIT'; // {strcasecmp(LT(1)->getText(LT(1))->chars,"WAIT") == 0}? ID;
- keyYEAR : 'YEAR'; // {strcasecmp(LT(1)->getText(LT(1))->chars,"YEAR") == 0}? ID;
- keyZONE : 'ZONE'; // {strcasecmp(LT(1)->getText(LT(1))->chars,"ZONE") == 0}? ID;
- keyARRAY : 'ARRAY'; // {strcasecmp(LT(1)->getText(LT(1))->chars,"ARRAY") == 0}? ID;
- keyAUTONOMOUS_TRANSACTION : 'AUTONOMOUS_TRANSACTION'; // {strcasecmp(LT(1)->getText(LT(1))->chars,"AUTONOMOUS_TRANSACTION") == 0}? ID;
- keyBODY : 'BODY'; // {strcasecmp(LT(1)->getText(LT(1))->chars,"BODY") == 0}? ID;
- keyBUILTIN : 'BUILTIN'; // {strcasecmp(LT(1)->getText(LT(1))->chars,"BUILTIN") == 0}? ID;
- keyBULK : 'BULK'; // {strcasecmp(LT(1)->getText(LT(1))->chars,"BULK") == 0}? ID;
- keyBYTE : 'BYTE'; // {strcasecmp(LT(1)->getText(LT(1))->chars,"BYTE") == 0}? ID;
- keyCLOSE : 'CLOSE'; // {strcasecmp(LT(1)->getText(LT(1))->chars,"CLOSE") == 0}? ID;
- keyCOLLECT : 'COLLECT'; // {strcasecmp(LT(1)->getText(LT(1))->chars,"COLLECT") == 0}? ID;
- keyCURSOR : 'CURSOR'; // {strcasecmp(LT(1)->getText(LT(1))->chars,"CURSOR") == 0}? ID;
- keyELSIF : 'ELSIF'; //{strcasecmp(LT(1)->getText(LT(1))->chars, "ELSIF") == 0}? ID;
- keyEXCEPTION_INIT : 'EXCEPTION_INIT'; // {strcasecmp(LT(1)->getText(LT(1))->chars, "EXCEPTION_INIT") == 0}? ID;
- keyEXIT : 'EXIT'; // {strcasecmp(LT(1)->getText(LT(1))->chars, "EXIT") == 0}? ID;
- keyFIPSFLAG : 'FIPSFLAG'; // {strcasecmp(LT(1)->getText(LT(1))->chars, "FIPSFLAG") == 0}? ID;
- keyFUNCTION : 'FUNCTION'; //{strcasecmp(LT(1)->getText(LT(1))->chars, "FUNCTION") == 0}? ID;
- keyINTERFACE : 'INTERFACE'; // {strcasecmp(LT(1)->getText(LT(1))->chars, "INTERFACE") == 0}? ID;
- keyLOOP : 'LOOP'; //{strcasecmp(LT(1)->getText(LT(1))->chars, "LOOP") == 0}? ID;
- keyNEW : 'NEW'; //{strcasecmp(LT(1)->getText(LT(1))->chars, "NEW") == 0}? ID;
- keyNEW_NAMES : 'NEW_NAMES'; // {strcasecmp(LT(1)->getText(LT(1))->chars, "NEW_NAMES") == 0}? ID;
- keyOPEN : 'OPEN'; // {strcasecmp(LT(1)->getText(LT(1))->chars, "OPEN") == 0}? ID;
- keyOUT : 'OUT'; //{strcasecmp(LT(1)->getText(LT(1))->chars, "OUT") == 0}? ID;
- keyPACKAGE : 'PACKAGE'; //{strcasecmp(LT(1)->getText(LT(1))->chars, "PACKAGE") == 0}? ID;
- keyPRAGMA : 'PRAGMA'; //{strcasecmp(LT(1)->getText(LT(1))->chars, "PRAGMA") == 0}? ID;
- keyRAISE : 'RAISE'; //{strcasecmp(LT(1)->getText(LT(1))->chars, "RAISE") == 0}? ID;
- keyRANGE : 'RANGE'; // {strcasecmp(LT(1)->getText(LT(1))->chars, "RANGE") == 0}? ID;
- keyREAD : 'READ'; // {strcasecmp(LT(1)->getText(LT(1))->chars, "READ") == 0}? ID;
- keyRECORD : 'RECORD'; //{strcasecmp(LT(1)->getText(LT(1))->chars, "RECORD") == 0}? ID;
- keyREF : 'REF'; // {strcasecmp(LT(1)->getText(LT(1))->chars, "REF") == 0}? ID;
- keyREPLACE : 'REPLACE'; // {strcasecmp(LT(1)->getText(LT(1))->chars, "REPLACE") == 0}? ID;
- keyRESTRICT_REFERENCES : 'RESTRICT_REFERENCES'; // {strcasecmp(LT(1)->getText(LT(1))->chars, "RESTRICT_REFERENCES") == 0}? ID;
- keyRETURN : 'RETURN'; //{strcasecmp(LT(1)->getText(LT(1))->chars, "RETURN") == 0}? ID;
- keyRETURNING : 'RETURNING'; //{strcasecmp(LT(1)->getText(LT(1))->chars, "RETURNING") == 0}? ID;
- keyREVERSE : 'REVERSE'; // {strcasecmp(LT(1)->getText(LT(1))->chars, "REVERSE") == 0}? ID;
- keyROLLBACK : 'ROLLBACK'; //{strcasecmp(LT(1)->getText(LT(1))->chars, "ROLLBACK") == 0}? ID;
- keySERIALLY_REUSABLE : 'SERIALLY_REUSABLE'; // {strcasecmp(LT(1)->getText(LT(1))->chars, "SERIALLY_REUSABLE") == 0}? ID;
- keySUBTYPE : 'SUBTYPE'; // {strcasecmp(LT(1)->getText(LT(1))->chars, "SUBTYPE") == 0}? ID;
- keyTRANSACTION : 'TRANSACTION'; // {strcasecmp(LT(1)->getText(LT(1))->chars, "TRANSACTION") == 0}? ID;
- keyTYPE : 'TYPE'; // {strcasecmp(LT(1)->getText(LT(1))->chars, "TYPE") == 0}? ID;
- keyUSING : 'USING'; // {strcasecmp(LT(1)->getText(LT(1))->chars, "USING") == 0}? ID;
- keyVARRAY : 'VARRAY'; // {strcasecmp(LT(1)->getText(LT(1))->chars, "VARRAY") == 0}? ID;
- keyVARYING : 'VARYING'; // {strcasecmp(LT(1)->getText(LT(1))->chars, "VARYING") == 0}? ID;
- keyWHILE : 'WHILE'; //{strcasecmp(LT(1)->getText(LT(1))->chars, "WHILE") == 0}? ID;
- keyWORK : 'WORK'; // {strcasecmp(LT(1)->getText(LT(1))->chars, "WORK") == 0}? ID;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement