Skip to content

Commit 9ed369a

Browse files
vsai12claude
andauthored
feat(plsql): sync grammar with upstream antlr/grammars-v4 (#47)
* feat(plsql): sync grammar with upstream antlr/grammars-v4 Add 51 lexer tokens and 20 parser rules from upstream for enhanced Oracle support while preserving all existing Bytebase customizations. New capabilities: - Oracle 21c+ annotations (ANNOTATIONS clause) - CREATE SCHEMA statement - DROP MATERIALIZED VIEW LOG statement - Compound triggers (COMPOUND TRIGGER) - MOVE PARTITION / RENAME PARTITION operations - SQL%BULK_ROWCOUNT / SQL%BULK_EXCEPTIONS expressions - Preprocessor directives ($IF, $ERROR, $ELSIF, etc.) - ACCESSIBLE BY clause for package visibility - PIPELINED USING clause - DEFAULT COLLATION clause Also fixes: - Sequence keywords for Oracle 19C+ (NOKEEP, NOSCALE, GLOBAL, etc.) - Extra semicolon in create_type.sql test file All 371 tests pass with no regressions. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * 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> * feat(plsql): integrate upstream rules into grammar entry points Integrates the upstream rules into the main grammar so they are actually usable: - Add create_schema to unit_statement - Add drop_materialized_view_log to unit_statement - Add accessible_by_clause to create_package, create_function_body, create_procedure_body - Add annotations_clause to create_package, create_function_body, create_procedure_body - Add default_collation_clause to create_package, create_function_body, create_procedure_body - Add compound_trigger_block to trigger_body - Integrate pipelined_using_clause into create_function_body for polymorphic table functions (ROW/TABLE POLYMORPHIC) Test files added from upstream: - examples/create_function03.sql (polymorphic pipelined function) - examples/drop_materialized_view_log.sql All 373 tests pass. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * style(plsql): group bracket/paren tokens together in lexer Move LEFT_CURLY_PAREN and RIGHT_CURLY_PAREN to be adjacent to LEFT_BRACKET/RIGHT_BRACKET and LEFT_PAREN/RIGHT_PAREN for easier navigation and consistency. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
1 parent 5e19d5c commit 9ed369a

12 files changed

Lines changed: 56968 additions & 43205 deletions

plsql/PlSqlLexer.g4

Lines changed: 62 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -538,6 +538,7 @@ EXPLOSION: 'EXPLOSION';
538538
EXPORT: 'EXPORT';
539539
EXPR_CORR_CHECK: 'EXPR_CORR_CHECK';
540540
EXPRESS: 'EXPRESS';
541+
EXTEND: 'EXTEND';
541542
EXTENDS: 'EXTENDS';
542543
EXTENT: 'EXTENT';
543544
EXTENTS: 'EXTENTS';
@@ -1055,6 +1056,7 @@ NO_ELIMINATE_JOIN: 'NO_ELIMINATE_JOIN';
10551056
NO_ELIMINATE_OBY: 'NO_ELIMINATE_OBY';
10561057
NO_ELIMINATE_OUTER_JOIN: 'NO_ELIMINATE_OUTER_JOIN';
10571058
NOENTITYESCAPING: 'NOENTITYESCAPING';
1059+
NOEXTEND: 'NOEXTEND';
10581060
NO_EXPAND_GSET_TO_UNION: 'NO_EXPAND_GSET_TO_UNION';
10591061
NO_EXPAND: 'NO_EXPAND';
10601062
NO_EXPAND_TABLE: 'NO_EXPAND_TABLE';
@@ -1137,6 +1139,8 @@ NO_ROOT_SW_FOR_LOCAL: 'NO_ROOT_SW_FOR_LOCAL';
11371139
NOROWDEPENDENCIES: 'NOROWDEPENDENCIES';
11381140
NOSCHEMACHECK: 'NOSCHEMACHECK';
11391141
NOSEGMENT: 'NOSEGMENT';
1142+
NOSCALE: 'NOSCALE';
1143+
NOSHARD: 'NOSHARD';
11401144
NO_SEMIJOIN: 'NO_SEMIJOIN';
11411145
NO_SEMI_TO_INNER: 'NO_SEMI_TO_INNER';
11421146
NO_SET_TO_JOIN: 'NO_SET_TO_JOIN';
@@ -1611,6 +1615,7 @@ SETTINGS: 'SETTINGS';
16111615
SET_TO_JOIN: 'SET_TO_JOIN';
16121616
SEVERE: 'SEVERE';
16131617
SHARDSPACE: 'SHARDSPACE';
1618+
SHARD: 'SHARD';
16141619
SHARED_POOL: 'SHARED_POOL';
16151620
SHARED: 'SHARED';
16161621
SHARE: 'SHARE';
@@ -2422,6 +2427,59 @@ BIT_STRING_LIT: 'B' ('\'' [01]* '\'')+;
24222427
// Lowercase 'x' is a usual addition to the standard
24232428

24242429
HEX_STRING_LIT: 'X' ('\'' [A-F0-9]* '\'')+;
2430+
2431+
// === Tokens added from upstream for grammar completeness ===
2432+
ACCESSIBLE: 'ACCESSIBLE';
2433+
ANNOTATIONS: 'ANNOTATIONS';
2434+
BLANKS: 'BLANKS';
2435+
CHARSETFORM: 'CHARSETFORM';
2436+
CHARSETID: 'CHARSETID';
2437+
COLLECTION: 'COLLECTION';
2438+
COMPATIBLE: 'COMPATIBLE';
2439+
COMPRESSION: 'COMPRESSION';
2440+
DAY_TO_SECOND: 'DAY_TO_SECOND';
2441+
// Note: DBLINK not added - conflicts with database link identifiers (e.g., func@dblink)
2442+
DISABLED: 'DISABLED';
2443+
DOLLAR_ELSE: '$ELSE';
2444+
DOLLAR_ELSIF: '$ELSIF';
2445+
DOLLAR_END: '$END';
2446+
DOLLAR_ERROR: '$ERROR';
2447+
DOLLAR_IF: '$IF';
2448+
DOLLAR_THEN: '$THEN';
2449+
DURATION: 'DURATION';
2450+
ENABLED: 'ENABLED';
2451+
ENCRYPTPASSWORDISNULL: 'ENCRYPTPASSWORDISNULL';
2452+
ERROR_CODE: 'ERROR_CODE';
2453+
ERROR_INDEX: 'ERROR_INDEX';
2454+
ESCAPED: 'ESCAPED';
2455+
FILE_EXT: 'PKB' | 'PKS';
2456+
HADOOP_TRAILERS: 'HADOOP_TRAILERS';
2457+
INPUTFORMAT: 'INPUTFORMAT';
2458+
INQUIRY_DIRECTIVE: '$$' (SIMPLE_LETTER | '_')+;
2459+
INTERNAL: 'INTERNAL';
2460+
ITEMS: 'ITEMS';
2461+
LATEST: 'LATEST';
2462+
LINES: 'LINES';
2463+
MAXLEN: 'MAXLEN';
2464+
NOLOG: 'NOLOG';
2465+
ORC: 'ORC';
2466+
OUTPUTFORMAT: 'OUTPUTFORMAT';
2467+
PARQUET: 'PARQUET';
2468+
PERCENT_BULK_EXCEPTIONS: '%' SPACE* 'BULK_EXCEPTIONS';
2469+
PERCENT_BULK_ROWCOUNT: '%' SPACE* 'BULK_ROWCOUNT';
2470+
POLYMORPHIC: 'POLYMORPHIC';
2471+
RCFILE: 'RCFILE';
2472+
SEQUENCEFILE: 'SEQUENCEFILE';
2473+
SERDE: 'SERDE';
2474+
SERDEPROPERTIES: 'SERDEPROPERTIES';
2475+
STRUCT: 'STRUCT';
2476+
TDO: 'TDO';
2477+
TEMPLATE_TABLE: 'TEMPLATE_TABLE';
2478+
TEXTFILE: 'TEXTFILE';
2479+
USING_NLS_COMP: 'USING_NLS_COMP';
2480+
WORKERID: 'WORKERID';
2481+
YEAR_TO_MONTH: 'YEAR_TO_MONTH';
2482+
24252483
DOUBLE_PERIOD: '..';
24262484
PERIOD: '.';
24272485

@@ -2551,8 +2609,10 @@ SEMICOLON: ';';
25512609
BAR: '|';
25522610
EQUALS_OP: '=';
25532611

2554-
LEFT_BRACKET: '[';
2555-
RIGHT_BRACKET: ']';
2612+
LEFT_BRACKET: '[';
2613+
RIGHT_BRACKET: ']';
2614+
LEFT_CURLY_PAREN: '{';
2615+
RIGHT_CURLY_PAREN: '}';
25562616

25572617
INTRODUCER: '_';
25582618

0 commit comments

Comments
 (0)