`._name` after `)` or `]` fails with "Unexpected character '_'"
Maintainer antworten meist innerhalb von 1 Tag
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 2/5
- Geschätzter Aufwand
- 1-3 Stunden
- Anfängerfreundlichkeit
- 72/100
Rechercherichtung
Der Fehler liegt in Tokenizer::next_token: Die Prüfung auf ._ akzeptiert ein vorangehendes Token::Word, meldet aber nach RParen oder RBracket einen Fehler. Vergleiche sie mit dem nahegelegenen Block, der . nach Word | RParen | RBracket | Number bereits als Punkt behandelt, wenn supports_tuple_element_access() zutrifft. Führe die vier fehlschlagenden Abfragen aus dem Issue unter den angegebenen Dialekten aus und bestätige dann, dass SELECT (c).x und t._x weiterhin geparst werden. Fertig ist, wenn alle vier geparst werden und der Round-Trip-Check besteht.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
Field access with a name starting with _ fails to tokenize when it follows ) or ]:
SELECT (c)._x FROM tt (PostgreSqlDialect)
-> sql parser error: Unexpected character '_' at Line: 1, Column: 11
SELECT ({'_x': 1})._x (DuckDbDialect)
-> Unexpected character '_' at Line: 1, Column: 19
SELECT ([{'_a': 2}])[1]._a (DuckDbDialect)
-> Unexpected character '_' at Line: 1, Column: 24
SELECT f()._x (BigQueryDialect)
-> Unexpected character '_' at Line: 1, Column: 11
SELECT (c).x FROM tt, SELECT t._x FROM t
-> parse (fine)
PostgreSQL 18 runs SELECT (c)._x FROM tt for a composite column with a field _x (https://www.postgresql.org/docs/current/rowtypes.html#ROWTYPES-ACCESSING), and DuckDB runs SELECT ({'_x': 1})._x, ([{'_a': 2}])[1]._a (returns 1 | 2).
In Tokenizer::next_token, the ._ check only accepts a preceding Token::Word; after RParen or RBracket it errors. The block right after it already treats . after Word | RParen | RBracket | Number as a period when supports_tuple_element_access(). Related: #1835 (added the check), #2677 (whitespace case).
Tested 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.
- 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
-
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
-
PostgreSQL: support FOR NO KEY UPDATE and FOR KEY SHARE row-locking clausesEvtl. wieder frei Ein Pull Request dazu wurde ohne Merge geschlossen. OffenPostgreSQL
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 76/100
apache/datafusion-sqlparser-rs#2778 ·
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
-
bug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 73/100
Maintainer antworten meist innerhalb von 1 Tag
-
🐞 bug 🧩 bevy_gantz_egui
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 82/100
nannou-org/gantz#500 ·
Maintainer antworten meist innerhalb von 1 Tag
-
enhancement
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 68/100
metasequoiaime/msime#10989 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
fritzprix/libr-agent#2612 ·
Maintainer antworten meist innerhalb von 1 Tag
-
find: -printf %h drops a doubled slashEvtl. vergeben @qodelicious hat das heute übernommen. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 68/100
Maintainer antworten meist innerhalb von 1 Tag