PostgreSQL: support FOR NO KEY UPDATE and FOR KEY SHARE row-locking clauses
Maintainer antworten meist innerhalb von 1 Tag
Dieses Issue hat noch niemand übernommen.
- #2788 von @abhinav-phi — ohne Merge geschlossen
Bewertung
- Schwierigkeit
- 2/5
- Geschätzter Aufwand
- 1-3 Stunden
- Anfängerfreundlichkeit
- 76/100
Rechercherichtung
Beginne damit, LockType, parse_lock und die vorhandenen Round-Trip-Tests für FOR UPDATE und FOR SHARE zu finden. Ergänze Tests für die beiden fehlenden Stärken, einschließlich Varianten mit OF und Wartepolitik; abgeschlossen ist die Arbeit, wenn sowohl die Parse- als auch die Round-Trip-Tests in den PostgreSQL- und generischen Dialekten bestehen.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
Summary
PostgreSQL's row-locking clause has four lock strengths: FOR UPDATE, FOR NO KEY UPDATE, FOR SHARE and FOR KEY SHARE. sqlparser reads only FOR UPDATE and FOR SHARE. FOR NO KEY UPDATE and FOR KEY SHARE, which PostgreSQL's own referential-integrity triggers use (SELECT 1 FROM ONLY t x WHERE … FOR KEY SHARE OF x), are rejected.
Reproduction (current main, c6cec56b)
use sqlparser::{dialect::PostgreSqlDialect, parser::Parser};
Parser::parse_sql(&PostgreSqlDialect {}, "SELECT id FROM t WHERE id = 1 FOR NO KEY UPDATE").unwrap();
Parser::parse_sql(&PostgreSqlDialect {}, "SELECT id FROM t WHERE id = 1 FOR KEY SHARE OF t").unwrap();
sql parser error: Expected: one of UPDATE or SHARE, found: NO at Line: 1, Column: 35
sql parser error: Expected: one of UPDATE or SHARE, found: KEY at Line: 1, Column: 35
SELECT id FROM t WHERE id = 1 FOR SHARE OF t SKIP LOCKED parses. All of these run on PostgreSQL (checked on 17.11):
CREATE TABLE t (id int PRIMARY KEY);
SELECT id FROM t WHERE id = 1 FOR NO KEY UPDATE;
SELECT id FROM t WHERE id = 1 FOR KEY SHARE OF t;
SELECT id FROM t FOR KEY SHARE NOWAIT;
SELECT id FROM t FOR NO KEY UPDATE SKIP LOCKED;
Grammar
From https://www.postgresql.org/docs/current/sql-select.html#SQL-FOR-UPDATE-SHARE:
FOR lock_strength [ OF from_reference [, ...] ] [ NOWAIT | SKIP LOCKED ]
where lock_strength can be one of
UPDATE
NO KEY UPDATE
SHARE
KEY SHARE
Proposed change
Add two variants to LockType, for example NoKeyUpdate and KeyShare, displayed as NO KEY UPDATE and KEY SHARE. Parse them in parse_lock, where FOR is followed by NO KEY UPDATE or KEY SHARE, in the PostgreSQL and generic dialects. OF …, NOWAIT and SKIP LOCKED then follow as they do for the other two strengths. Round-trip tests for each strength, with and without OF and the wait policy, would cover it.
This is independent of FROM ONLY t, which the same trigger queries use and #2770 addresses.
- Vorherrschende Sprache
- Rust
- Sterne
- 3.5k
- Forks
- 801
- Ø Merge
- 2 T. 19 Std.
- Gemergte PRs (30 T.)
- 108
Entwicklungsumgebung
- Kein Dockerfile und keine Docker-Compose-Datei
- Hat eine Pull-Request-Vorlage
- Kein Beitragsleitfaden
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus apache/datafusion-sqlparser-rs
-
DuckDB Prolific Author
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 70/100
apache/datafusion-sqlparser-rs#2807 ·
Maintainer antworten meist innerhalb von 1 Tag
-
DuckDB PostgreSQL Prolific Author
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
apache/datafusion-sqlparser-rs#2803 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Databricks Prolific Author Spark
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 68/100
apache/datafusion-sqlparser-rs#2801 ·
Maintainer antworten meist innerhalb von 1 Tag
-
`SHOW ... ILIKE '<pattern>'` is displayed without quotesEvtl. wieder frei Ein Pull Request dazu wurde ohne Merge geschlossen. OffenProlific Author
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 75/100
apache/datafusion-sqlparser-rs#2759 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Should `DELETE + LIMIT` be supported by the generic dialect ?Evtl. wieder frei Ein Pull Request dazu wurde ohne Merge geschlossen. OffenDuckDB MySQL PostgreSQL
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 68/100
apache/datafusion-sqlparser-rs#2615 ·
Maintainer antworten meist innerhalb von 1 Tag
Alle Issues in apache/datafusion-sqlparser-rs
Ähnliche Issues
-
area/tools bug session-analysis
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 80/100
oracle/rust-oracledb#66 ·
-
p3 testing
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 75/100
respanai/respan-gateway#166 ·
Maintainer antworten meist innerhalb von 1 Tag
-
fixes
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 70/100
astral-sh/ruff#30076 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag