`._name` after `)` or `]` fails with "Unexpected character '_'"
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 72/100
Direzione di ricerca
Il problema si trova in Tokenizer::next_token: il controllo di ._ accetta un Token::Word precedente, ma genera un errore dopo RParen o RBracket. Confrontalo con il blocco vicino che già tratta . dopo Word | RParen | RBracket | Number come un punto quando supports_tuple_element_access() è vero. Esegui le quattro query che falliscono nell'issue con i dialetti indicati, poi verifica che SELECT (c).x e t._x continuino a essere analizzate correttamente. È completato quando tutte e quattro vengono analizzate e il controllo di round-trip passa.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
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.
- Lingua principale
- Rust
- Stelle
- 3.5k
- Fork
- 801
- Merge medio
- 2g 19h
- PR unite (30g)
- 108
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Nessuna guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di apache/datafusion-sqlparser-rs
-
DuckDB Prolific Author
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
apache/datafusion-sqlparser-rs#2807 ·
I maintainer di solito rispondono entro 1 giorno
-
Databricks Prolific Author Spark
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
apache/datafusion-sqlparser-rs#2801 ·
I maintainer di solito rispondono entro 1 giorno
-
PostgreSQL: support FOR NO KEY UPDATE and FOR KEY SHARE row-locking clausesForse di nuovo libera Una pull request per questa issue è stata chiusa senza essere unita. ApertaPostgreSQL
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
apache/datafusion-sqlparser-rs#2778 ·
I maintainer di solito rispondono entro 1 giorno
-
`SHOW ... ILIKE '<pattern>'` is displayed without quotesForse di nuovo libera Una pull request per questa issue è stata chiusa senza essere unita. ApertaProlific Author
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
apache/datafusion-sqlparser-rs#2759 ·
I maintainer di solito rispondono entro 1 giorno
-
Should `DELETE + LIMIT` be supported by the generic dialect ?Forse di nuovo libera Una pull request per questa issue è stata chiusa senza essere unita. ApertaDuckDB MySQL PostgreSQL
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
apache/datafusion-sqlparser-rs#2615 ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di apache/datafusion-sqlparser-rs
Issue simili
-
A match arm above the largest i64 is compared as 0Forse già presa Una pull request collegata a questa issue è aperta o già unita. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 86/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 83/100
DioxusLabs/dioxus#6063 ·
I maintainer di solito rispondono entro 1 giorno
-
`nsh-core` fails to compile when taffy's default `calc` feature is enabled elsewhere in the graphAperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
longbridge/nsh#966 ·
I maintainer di solito rispondono entro 1 giorno
-
Windows docs: pin a tested ConPTY version for Kitty graphics; 1.25.260930003 corrupts large uploadsAperta
Difficoltà 1/5 1-3 ore Idoneità per principianti 88/100
raphamorim/rio#2021 ·
I maintainer di solito rispondono entro 1 giorno
-
documentation
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
non7top/sigstore-shell#38 ·
I maintainer di solito rispondono entro 1 giorno