PostgreSQL: support FOR NO KEY UPDATE and FOR KEY SHARE row-locking clauses
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
- #2788 de @abhinav-phi — cerrado sin fusionar
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 76/100
Línea de trabajo
Empieza por localizar LockType, parse_lock y las pruebas de ida y vuelta existentes para FOR UPDATE y FOR SHARE. Añade cobertura para los dos niveles que faltan, incluidas las variantes con OF y con políticas de espera; el trabajo estará hecho cuando pasen tanto las pruebas de análisis como las de ida y vuelta en los dialectos PostgreSQL y genérico.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
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.
- Lenguaje dominante
- Rust
- Estrellas
- 3.5k
- Forks
- 801
- Merge medio
- 2 d 21 h
- PR fusionados (30 d)
- 104
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Sin guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de apache/datafusion-sqlparser-rs
-
DuckDB Prolific Author
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
apache/datafusion-sqlparser-rs#2807 ·
Los mantenedores suelen responder en 1 día
-
DuckDB PostgreSQL Prolific Author
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
apache/datafusion-sqlparser-rs#2803 ·
Los mantenedores suelen responder en 1 día
-
Databricks Prolific Author Spark
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
apache/datafusion-sqlparser-rs#2801 ·
Los mantenedores suelen responder en 1 día
-
`SHOW ... ILIKE '<pattern>'` is displayed without quotesQuizá libre de nuevo Un pull request para esta issue se cerró sin fusionarse. AbiertoProlific Author
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
apache/datafusion-sqlparser-rs#2759 ·
Los mantenedores suelen responder en 1 día
-
Should `DELETE + LIMIT` be supported by the generic dialect ?Quizá libre de nuevo Un pull request para esta issue se cerró sin fusionarse. AbiertoDuckDB MySQL PostgreSQL
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
apache/datafusion-sqlparser-rs#2615 ·
Los mantenedores suelen responder en 1 día
Todos los issues de apache/datafusion-sqlparser-rs
Issues similares
-
github_actions security
Dificultad 2/5 1-3 horas Aptitud para principiantes 85/100
dekobon/big-code-analysis#1815 ·
Los mantenedores suelen responder en 1 día
-
area: png-glitch bug P0 security
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
chikoski/png-glitch#45 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 85/100
nekko-labs/nekko-agent#1756 ·
Los mantenedores suelen responder en 1 día
-
upstream
Dificultad 2/5 1-3 horas Aptitud para principiantes 74/100
yologdev/yoyo-evolve#1138 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
gitbutlerapp/gitbutler#16982 ·
Los mantenedores suelen responder en 1 día