putao520 opened a new issue, #2914: URL: https://github.com/apache/datafusion-sqlparser-rs/issues/2914
## Summary `sqlparser-rs` 0.64.0 parses `SELECT ... FOR UPDATE` / `FOR SHARE`, but has no production for the other two PostgreSQL row-lock strengths, and no production for any PostgreSQL two-phase-commit statement or the anonymous `DO` block. These are the four surfaces PostgreSQL's own regression/isolation suites exercise and they cannot be reached through the AST at all. ## Environment - `sqlparser` 0.64.0 (crate source, `src/ast/mod.rs`, `src/parser/**`) - PostgreSQL dialect (`PostgreSqlDialect`) - Consumer: a PostgreSQL-wire-compatible engine driving `REL_16_4` `pg_regress` + isolation suites against `sqlparser`'s AST ## What is missing | PostgreSQL statement | Expected | Actual (0.64.0) | |---|---|---| | `SELECT ... FOR NO KEY UPDATE` | a locking-clause AST node | no production; `FOR UPDATE` and `FOR SHARE` only | | `SELECT ... FOR KEY SHARE` | a locking-clause AST node | no production | | `PREPARE TRANSACTION 'gid'` | a statement node | no production | | `COMMIT PREPARED 'gid'` / `ROLLBACK PREPARED 'gid'` | statement nodes | no production | | `DO $$ ... $$` (anonymous code block) | a statement node | no `Statement::Do` variant | ## Evidence (0.64.0 crate source) - `for no key update` / `for key share`: **0** matches anywhere under `src/` (case-insensitive, whitespace-tolerant). - `PREPARE TRANSACTION`: **0** matches anywhere under `src/`. - `pub enum Statement` has 151 variants; the only matches for the interesting prefixes are `Prepare` (the SQL `PREPARE name AS ...` statement), `Lock`, `LockTables` (MySQL) — there is no `Do` and no prepared-transaction variant. ## Expected behaviour Parsing the statements above with `PostgreSqlDialect` yields a statement/locking-clause node the consumer can match on, the same way `SELECT ... FOR UPDATE` already does. ## Actual behaviour The parser rejects them, so a downstream engine cannot represent the feature through the AST and is forced either to pre-scan the SQL text (which is what we want to avoid) or to leave the feature unimplemented. ## Why it matters here `pg_regress`'s `lock`, `select` and `transactions` files and the isolation suite's `prepared-transactions*`, `lock-committed-*`, `nowait-*`, `skip-locked-*` specs all start with these statements. Without an AST face, the consumer cannot answer them at all. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected] --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
