apache / apache/datafusion-sqlparser-rs

Use identifiable structs for AST variant fields

Ouverte
#311 8 commentaires 5 réactions 0 personnes assignées Voir sur GitHub
Langage dominant
Rust
Étoiles
3.5k
Forks
772
Merge moyen
4 j 9 h
PR mergées (30 j)
17

Description

When consuming the generated AST for further processing, one needs to match against and deconstruct `ast::Statement` instances. Currently, the fields of this enum's variants are defined inline... which makes it impossible for downstream code to represent the nested structures as types. For example, consider this structure:

https://github.com/ballista-compute/sqlparser-rs/blob/35ef0eee3857c59827b2587bc813218a00dce264/src/ast/mod.rs#L490-L497

I propose we migrate to the following pattern.
```rust
pub struct AnalyzeStatement {
table_name: ObjectName,
partitions: Option>,
for_columns: bool,
....
}
pub enum Statement {
Analyze(AnalyzeStatement),
...
}
```

Obviously this is a massive breaking change, but that seems OK given the `0.9.x` crates.io version.

Thoughts?

Guide de contribution

Aucun guide de contribution indexé pour ce dépôt

Piste de recherche

Commencez par examiner l’énumération Statement et les définitions associées dans src/ast/mod.rs, en particulier les lignes liées autour de 490-497. Évaluez comment chaque champ inline de variante pourrait devenir une structure identifiable tout en préservant la forme proposée de l’AST. Le travail est terminé lorsque les variantes pertinentes de l’AST utilisent des structures nommées et que le changement d’API incompatible qui en résulte est appliqué de manière cohérente.

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

Évaluation

Stack technique
rust
Domaine
compilers
Type d'issue
Refactorisation
Difficulté
5/5
Temps estimé
Plus d'une semaine
Activité
À l'abandon
Clarté
Plutôt claire
Accessibilité débutants
25/100

Recevez les nouvelles issues par e-mail

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