Skip to content

Conversation

@rebelice
Copy link
Contributor

This commit addresses BYT-8268 by making the CALL keyword mandatory at SQL statement level while keeping it optional at PL/SQL block level, and fixes grammar issues that were previously hidden by optional CALL.

Changes:

  1. Split call_statement into two rules:

    • sql_call_statement: CALL keyword MANDATORY (SQL level)
    • plsql_call_statement: CALL keyword OPTIONAL (PL/SQL block level)
  2. Support method chaining in CALL statements:

    • CALL obj_constructor(...).method(...) INTO :var
  3. Fix commit_statement to allow WRITE clause independently:

    • Previously: COMMIT [COMMENT 'text' [WRITE ...]]
    • Now: COMMIT [COMMENT 'text'] [WRITE ...]
  4. Fix link_name to support qualified database links:

    • Now supports: @schema.linkname or @linkname.domain
  5. Fix system_action to support multi-word actions:

    • Added: ADMINISTER KEY MANAGEMENT
    • Added: General patterns for 2-3 word actions

Why these changes:

  • The optional CALL keyword caused keywords like CASCADE to be misidentified as procedure calls, leading to incorrect SQL splitting
  • At SQL level, Oracle requires CALL keyword
  • At PL/SQL block level, Oracle allows direct procedure invocation
  • The fixes to COMMIT, link_name, and system_action address grammar deficiencies that were previously hidden by the optional CALL

Tests: All 600+ parser tests pass

🤖 Generated with Claude Code

…mmar issues

This commit addresses BYT-8268 by making the CALL keyword mandatory at SQL
statement level while keeping it optional at PL/SQL block level, and fixes
grammar issues that were previously hidden by optional CALL.

Changes:
1. Split call_statement into two rules:
   - sql_call_statement: CALL keyword MANDATORY (SQL level)
   - plsql_call_statement: CALL keyword OPTIONAL (PL/SQL block level)

2. Support method chaining in CALL statements:
   - CALL obj_constructor(...).method(...) INTO :var

3. Fix commit_statement to allow WRITE clause independently:
   - Previously: COMMIT [COMMENT 'text' [WRITE ...]]
   - Now: COMMIT [COMMENT 'text'] [WRITE ...]

4. Fix link_name to support qualified database links:
   - Now supports: @schema.linkname or @linkname.domain

5. Fix system_action to support multi-word actions:
   - Added: ADMINISTER KEY MANAGEMENT
   - Added: General patterns for 2-3 word actions

Why these changes:
- The optional CALL keyword caused keywords like CASCADE to be
  misidentified as procedure calls, leading to incorrect SQL splitting
- At SQL level, Oracle requires CALL keyword
- At PL/SQL block level, Oracle allows direct procedure invocation
- The fixes to COMMIT, link_name, and system_action address grammar
  deficiencies that were previously hidden by the optional CALL

Tests: All 600+ parser tests pass

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <[email protected]>
@rebelice rebelice merged commit 1f0027a into main Nov 10, 2025
5 checks passed
@rebelice rebelice deleted the byt-8268-fix-complete branch November 10, 2025 09:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants