`ROLLUP`/`CUBE`/`GROUPING SETS`: an element starting with `(` is always read as a sublist (`(SELECT 1)` rejected, `((b))` displayed as `(b)`)
Les mainteneurs répondent en général sous 1 jour
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 3/5
- Temps estimé
- Une demi-journée
- Accessibilité débutants
- 52/100
Piste de recherche
Start with parse_group_by_expr in the parser, which calls parse_tuple(true, true) on each ROLLUP, CUBE and GROUPING SETS element, and with the Display code for Rollup and Cube in the AST. Reproduce the three queries from the issue under PostgreSqlDialect, including SELECT a FROM t GROUP BY ROLLUP (a, ((b))). Done means the (SELECT 1) cases parse and the ((b)) case round-trips without losing its nesting.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Each element of ROLLUP, CUBE and GROUPING SETS treats a leading ( as its own sublist delimiter, which breaks parenthesized expressions:
SELECT a FROM t GROUP BY ROLLUP (a, (SELECT 1))
-> sql parser error: Expected: ), found: 1 at Line: 1, Column: 45
SELECT a FROM t GROUP BY CUBE (a, (SELECT 1))
SELECT a FROM t GROUP BY GROUPING SETS (a, (SELECT 1))
-> same error
SELECT a FROM t GROUP BY ROLLUP (a, ((b)))
-> displays as: SELECT a FROM t GROUP BY ROLLUP (a, (b))
-> reparses as ROLLUP (a, b): element [Nested(b)] becomes [b]
PostgreSQL 18 runs SELECT a FROM t GROUP BY ROLLUP (a, (SELECT 1)). Its docs: "The individual elements of a CUBE or ROLLUP clause may be either individual expressions, or sublists of elements in parentheses" (https://www.postgresql.org/docs/current/queries-table-expressions.html#QUERIES-GROUPING-SETS). The second case changes only the AST, since PostgreSQL treats ((b)) and (b) the same.
parse_group_by_expr parses each element with parse_tuple(true, true), which consumes the ( of (SELECT 1) and then reads SELECT as an identifier. Display for Rollup/Cube writes a one-element set without its own parentheses, so [Nested(b)] prints as (b).
Tested with PostgreSqlDialect on main ce12f1f6 (also 0.63.0 and 0.58.0).
Found with a property-based fuzzer (round trip check); I used AI assistance for triage and verified every case above.
- Langage dominant
- Rust
- Étoiles
- 3.5k
- Forks
- 805
- Merge moyen
- 2 j 3 h
- PR mergées (30 j)
- 116
Préparer son environnement
- Aucun Dockerfile ni fichier Docker Compose
- Propose un modèle de pull request
- Aucun guide de contribution
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
-
PostgreSQL
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
apache/datafusion-sqlparser-rs#2862 ·
Les mainteneurs répondent en général sous 1 jour
-
PostgreSQL
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
apache/datafusion-sqlparser-rs#2861 ·
Les mainteneurs répondent en général sous 1 jour
-
PostgreSQL
Difficulté 2/5 1-3 heures Accessibilité débutants 77/100
apache/datafusion-sqlparser-rs#2858 ·
Les mainteneurs répondent en général sous 1 jour
-
PostgreSQL
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
apache/datafusion-sqlparser-rs#2857 ·
Les mainteneurs répondent en général sous 1 jour
-
DuckDB Prolific Author
Difficulté 2/5 1-3 heures Accessibilité débutants 70/100
apache/datafusion-sqlparser-rs#2807 ·
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de apache/datafusion-sqlparser-rs
Issues similaires
-
area:schema documentation
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
ElectronicWave/Elemental#252 ·
Les mainteneurs répondent en général sous 1 jour
-
bug
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
dekobon/big-code-analysis#1887 ·
Les mainteneurs répondent en général sous 1 jour
-
Shell中文符号输入异常Ouvertebug
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 1/5 Moins d'une heure Accessibilité débutants 82/100
Les mainteneurs répondent en général sous 1 jour