Slice with a stride and no upper bound (`arr[1: :4]`) is displayed as `arr[1::4]`, which doesn't parse

Ouverte Adaptée aux débutants
#2,807 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Les mainteneurs répondent en général sous 1 jour

Personne n'a encore pris cette issue.

Évaluation

Difficulté
2/5
Temps estimé
1-3 heures
Accessibilité débutants
70/100
Type d'issue
Bug
Clarté
Clairement spécifiée
Activité
Active
Stack technique
rust, sql
Domaine
devtools

Piste de recherche

Le bogue vient de la façon dont Subscript::Slice est affiché lorsque upper_bound est absent mais qu'un stride est défini ; commence par l'implémentation Display dans src/ast/mod.rs, où les deux deux-points sont écrits côte à côte. Vérifie la gestion des slices par le parseur pour [1: :4] et [1:-:4] afin de déterminer quelle écriture doit faire un aller-retour correct. C'est terminé lorsque les trois requêtes de reproduction du ticket se reparsent, avec un test d'aller-retour ajouté à côté des tests de slice existants dans tests/sqlparser_common.rs.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

DuckDB Prolific Author

Subscript::Slice with upper_bound: None and a stride prints the two colons next to each other, and the tokenizer then reads :: (cast):

SELECT ([1, 2, 3, 4, 5, 6, 7, 8, 9])[1: :4]
  -> displays as: SELECT ([1, 2, 3, 4, 5, 6, 7, 8, 9])[1::4]
  -> reparse: Expected: a data type name, found: 4 at Line: 1, Column: 41
SELECT ([1, 2, 3, 4, 5, 6, 7, 8, 9])[: :4]
  -> displays as: SELECT ([1, 2, 3, 4, 5, 6, 7, 8, 9])[::4]
  -> reparse: Expected: an expression, found: :: at Line: 1, Column: 38
SELECT ([1, 2, 3, 4, 5, 6, 7, 8, 9])[1:-:4]
  -> round-trips (fine)

DuckDB documents [1:-:4] for this (https://duckdb.org/docs/stable/sql/functions/list#slicing), but it also runs [1: :4] (returns [1, 5, 9]), and the parser accepts it. Something like [1: :4] in Display would round-trip.

Tested with DuckDbDialect 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
801
Merge moyen
2 j 19 h
PR mergées (30 j)
108

Préparer son environnement

  • Aucun Dockerfile ni fichier Docker Compose
  • Propose un modèle de pull request
  • Aucun guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de apache/datafusion-sqlparser-rs

Toutes les issues de apache/datafusion-sqlparser-rs

Issues similaires

Plus d'issues Rust

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.