`._name` after `)` or `]` fails with "Unexpected character '_'"
Mantenedores costumam responder em até 1 dia
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 2/5
- Tempo estimado
- 1-3 horas
- Facilidade para iniciantes
- 72/100
Direção de pesquisa
A falha está em Tokenizer::next_token: a verificação de ._ aceita um Token::Word anterior, mas gera erro após RParen ou RBracket. Compare-a com o bloco próximo que já trata . depois de Word | RParen | RBracket | Number como ponto quando supports_tuple_element_access() é verdadeiro. Execute as quatro consultas que falham no issue sob os dialetos indicados e depois confirme que SELECT (c).x e t._x continuam sendo analisadas corretamente. Está concluído quando as quatro são analisadas e a verificação de ida e volta (round-trip) passa.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
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.
- Linguagem predominante
- Rust
- Estrelas
- 3.5k
- Forks
- 801
- Merge médio
- 2d 19h
- PRs com merge (30d)
- 108
Preparar o ambiente
- Sem Dockerfile nem arquivo Docker Compose
- Tem um modelo de pull request
- Sem guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de apache/datafusion-sqlparser-rs
-
DuckDB Prolific Author
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 70/100
apache/datafusion-sqlparser-rs#2807 ·
Mantenedores costumam responder em até 1 dia
-
Databricks Prolific Author Spark
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 68/100
apache/datafusion-sqlparser-rs#2801 ·
Mantenedores costumam responder em até 1 dia
-
PostgreSQL: support FOR NO KEY UPDATE and FOR KEY SHARE row-locking clausesTalvez livre de novo Um pull request para esta issue foi fechado sem ser mesclado. AbertaPostgreSQL
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 76/100
apache/datafusion-sqlparser-rs#2778 ·
Mantenedores costumam responder em até 1 dia
-
`SHOW ... ILIKE '<pattern>'` is displayed without quotesTalvez livre de novo Um pull request para esta issue foi fechado sem ser mesclado. AbertaProlific Author
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 75/100
apache/datafusion-sqlparser-rs#2759 ·
Mantenedores costumam responder em até 1 dia
-
Should `DELETE + LIMIT` be supported by the generic dialect ?Talvez livre de novo Um pull request para esta issue foi fechado sem ser mesclado. AbertaDuckDB MySQL PostgreSQL
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 68/100
apache/datafusion-sqlparser-rs#2615 ·
Mantenedores costumam responder em até 1 dia
Todas as issues de apache/datafusion-sqlparser-rs
Issues semelhantes
-
bug cluster redis-compat
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 77/100
tangency-labs/solidcore#2839 ·
Mantenedores costumam responder em até 1 dia
-
bug priority: low ui
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 68/100
storytold/gridcraft#3446 · 1 comentário ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 88/100
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 84/100
madeofpendletonwool/PinePods#1078 ·
Mantenedores costumam responder em até 1 dia