Skip to content

Commit 1cdc452

Browse files
vsai12claude
andcommitted
feat(plsql): add extended upstream rules for more complete Oracle support
Adds 28 additional parser rules from upstream: C External Call Support: - c_external_parameter, c_property Analytic Views: - hierarchies_clause, filter_clause, filter_clauses - subav_clause, subav_factoring_clause - add_calc_meas_clause, add_calcs_clause - aggregate_clause Utility Rules: - parallel_instances_clause, overriding_procedure_spec - assignable_element, connection_qualifier, local_link_name - by_user_for_statistics_clause, unary_logical_operation - variable_or_collection, collection_expression - virtual_column_expression Partition Values: - index_partitioning_values_list, range_values_list SQL*Plus: - clear_command, start_command, sql_plus_command_no_semicolon Other: - expressions_, string_delimiter, system_actions All 371 tests pass. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1 parent ebab516 commit 1cdc452

6 files changed

Lines changed: 32236 additions & 25574 deletions

plsql/PlSqlParser.g4

Lines changed: 153 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7348,6 +7348,159 @@ filter_condition
73487348
: INCLUDING ROWS where_clause
73497349
;
73507350

7351+
// === Extended upstream rules for more complete Oracle support ===
7352+
7353+
// C external call parameter support (extends c_parameters_clause)
7354+
c_external_parameter
7355+
: CONTEXT
7356+
| SELF (TDO | c_property)?
7357+
| (parameter_name | RETURN) c_property? (BY REFERENCE)? external_datatype=regular_id?
7358+
;
7359+
7360+
c_property
7361+
: INDICATOR (STRUCT | TDO)?
7362+
| LENGTH
7363+
| DURATION
7364+
| MAXLEN
7365+
| CHARSETID
7366+
| CHARSETFORM
7367+
;
7368+
7369+
// Analytic view hierarchies
7370+
hierarchies_clause
7371+
: HIERARCHIES '(' hier_alias+=object_name (',' hier_alias+=object_name)* ')'
7372+
;
7373+
7374+
// Filter clauses for analytic views
7375+
filter_clause
7376+
: (MEASURES | hier_alias=object_name) TO condition
7377+
;
7378+
7379+
filter_clauses
7380+
: FILTER FACT '(' filter_clause (',' filter_clause)* ')'
7381+
;
7382+
7383+
// Subanalytic view support
7384+
subav_clause
7385+
: USING subav_name=object_name hierarchies_clause? filter_clauses? add_calcs_clause?
7386+
;
7387+
7388+
subav_factoring_clause
7389+
: subav_name=id_expression ANALYTIC VIEW AS '(' subav_clause ')'
7390+
;
7391+
7392+
// Analytic view calculated measures
7393+
add_calc_meas_clause
7394+
: meas_name=id_expression AS '(' expression ')'
7395+
;
7396+
7397+
add_calcs_clause
7398+
: ADD MEASURES '(' add_calc_meas_clause (',' add_calc_meas_clause)* ')'
7399+
;
7400+
7401+
// Aggregate clause for user-defined aggregate functions
7402+
aggregate_clause
7403+
: AGGREGATE USING implementation_type_name
7404+
;
7405+
7406+
// Parallel instances clause
7407+
parallel_instances_clause
7408+
: INSTANCES (UNSIGNED_INTEGER | DEFAULT)
7409+
;
7410+
7411+
// Overriding procedure spec for object types
7412+
overriding_procedure_spec
7413+
: PROCEDURE procedure_name ('(' type_elements_parameter (',' type_elements_parameter)* ')')?
7414+
(IS | AS) (call_spec | DECLARE? seq_of_declare_specs? body ';')
7415+
;
7416+
7417+
// Assignable element (assignment target)
7418+
assignable_element
7419+
: general_element
7420+
| bind_variable
7421+
;
7422+
7423+
// Database link connection qualifier
7424+
connection_qualifier
7425+
: identifier
7426+
;
7427+
7428+
local_link_name
7429+
: identifier
7430+
;
7431+
7432+
// Statistics clause
7433+
by_user_for_statistics_clause
7434+
: BY USER FOR STATISTICS
7435+
;
7436+
7437+
// Unary logical operation
7438+
unary_logical_operation
7439+
: IS NOT? logical_operation
7440+
;
7441+
7442+
// Variable or collection reference
7443+
variable_or_collection
7444+
: variable_name
7445+
| collection_expression
7446+
;
7447+
7448+
// Collection expression
7449+
collection_expression
7450+
: collation_name '(' expression ')' ('.' general_element_part)*
7451+
;
7452+
7453+
// Virtual column expression definition
7454+
virtual_column_expression
7455+
: autogenerated_sequence_definition
7456+
| (GENERATED ALWAYS?)? AS '(' expression ')'
7457+
;
7458+
7459+
// Partition values lists
7460+
index_partitioning_values_list
7461+
: literal (',' literal)*
7462+
| TIMESTAMP literal (',' TIMESTAMP literal)*
7463+
;
7464+
7465+
range_values_list
7466+
: literal (',' literal)*
7467+
| TIMESTAMP literal (',' TIMESTAMP literal)*
7468+
;
7469+
7470+
// Expression list (with underscore suffix per upstream naming)
7471+
expressions_
7472+
: expression (',' expression)*
7473+
;
7474+
7475+
// String delimiter helper
7476+
string_delimiter
7477+
: CHAR_STRING
7478+
| string_function
7479+
| string_delimiter BAR BAR string_delimiter
7480+
| '(' string_delimiter ')'
7481+
| id_expression
7482+
;
7483+
7484+
// SQL*Plus clear command
7485+
clear_command
7486+
: CLEAR (COLUMN? regular_id | ALL)
7487+
;
7488+
7489+
// SQL*Plus start command
7490+
start_command
7491+
: START_CMD id_expression PERIOD (SQL | FILE_EXT)
7492+
;
7493+
7494+
// SQL*Plus command without semicolon
7495+
sql_plus_command_no_semicolon
7496+
: set_command
7497+
;
7498+
7499+
// System actions for audit
7500+
system_actions
7501+
: ACTIONS system_privilege (',' system_privilege)*
7502+
;
7503+
73517504
regular_id
73527505
: non_reserved_keywords_pre12c
73537506
| non_reserved_keywords_in_12c

0 commit comments

Comments
 (0)