`PostgreSqlDialect` accepts large amounts of non-PostgreSQL syntax
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 5/5
- Temps estimé
- Plus d'une semaine
- Accessibilité débutants
- 25/100
Piste de recherche
Commencez par pg_query.rs comme référence de référence pour PostgreSQL ainsi que par les fichiers de test spécifiques à PostgreSQL et au dialecte commun, puis comparez les instructions acceptées listées avec leur comportement attendu. Déterminez d'abord si PostgreSqlDialect doit rejeter ces cas et définissez un périmètre limité ; le travail est terminé lorsqu'une orientation est convenue et qu'une couverture de régression existe pour la syntaxe sélectionnée.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
While building a parser correctness benchmark using libpg_query (pg_query.rs) as the PostgreSQL ground truth, we measured how often PostgreSqlDialect accepts SQL that real PostgreSQL rejects. The numbers are surprisingly high.
Against SQL extracted from the sqlparser-rs test suite itself:
- 28.7% of statements rejected by pg_query are silently accepted by
PostgreSqlDialect(37/129, PostgreSQL-specific test file) - 30.0% in the broader common-dialect test file (141/470)
We understand sqlparser-rs is intentionally permissive. The question is: is this level of permissiveness intentional for PostgreSqlDialect, or is it leakage that would be worth tightening?
Examples of what PostgreSqlDialect currently accepts
A selection from the 141 cases found, grouped by the dialect the syntax originates from:
-- Oracle
FETCH NEXT IN my_cursor INTO result_table -- INTO clause on FETCH
-- SQL Server / T-SQL
SELECT TOP 3 * FROM tbl
EXEC my_proc N'param'
MERGE … OUTPUT inserted.* INTO log_target
EXECUTE FUNCTION f -- trigger EXECUTE without ()
-- MySQL / MariaDB
INSERT customer VALUES (1, 2, 3) -- missing INTO
INSERT OR REPLACE INTO t (id) VALUES(1)
DROP FUNCTION IF EXISTS f(a INTEGER, IN b INTEGER = 1) -- defaults in DROP
-- Snowflake / BigQuery
SELECT i FROM qt QUALIFY ROW_NUMBER() OVER (...) = 1
CREATE OR REPLACE TABLE t (a INT)
CREATE OR REPLACE USER IF NOT EXISTS u1 PASSWORD='secret'
-- ClickHouse
ALTER TABLE t ON CLUSTER my_cluster ADD CONSTRAINT bar PRIMARY KEY (baz)
-- HiveQL
ALTER TABLE t SET TBLPROPERTIES('classification' = 'parquet')
-- Unclear origin / possibly over-permissive parsing
ALTER TABLE t ALTER COLUMN id ADD GENERATED AS IDENTITY -- missing ALWAYS/BY DEFAULT
COPY t FROM 'f.csv' BINARY DELIMITER ',' CSV HEADER -- mutually exclusive formats
SHOW search_path search_path -- duplicate trailing token
Happy to help with PRs if the direction is clear.
- Langage dominant
- Rust
- Étoiles
- 3.5k
- Forks
- 774
- Merge moyen
- 2 j 23 h
- PR mergées (30 j)
- 37
Guide de contribution
Aucun guide de contribution indexé pour ce dépôt
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de apache/datafusion-sqlparser-rs
-
Difficulté 2/5 1-2 jours Accessibilité débutants 72/100
apache/datafusion-sqlparser-rs#2495 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
apache/datafusion-sqlparser-rs#2461 · 2 commentaires ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 73/100
apache/datafusion-sqlparser-rs#2407 ·
-
Add SQL/PGQ keywords Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 65/100
apache/datafusion-sqlparser-rs#2393 ·
-
Difficulté 1/5 Moins d'une heure Accessibilité débutants 88/100
apache/datafusion-sqlparser-rs#2390 · 1 commentaire ·
Toutes les issues de apache/datafusion-sqlparser-rs
Issues similaires
-
Difficulté 2/5 1-3 heures Accessibilité débutants 88/100
-
bug core
Difficulté 2/5 1-3 heures Accessibilité débutants 86/100
-
JIT-compiled number -> Decimal conversion silently overflows instead of raising DECIMAL_OVERFLOW Ouvertefuzz
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
ClickHouse/ClickHouse#122114 ·
-
Difficulté 1/5 Moins d'une heure Accessibilité débutants 92/100
linebender/vello_svg#90 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 74/100