apache / apache/datafusion-sqlparser-rs

Regression: Decreased tolerance to column names matching SQL keywords

Ouverte
#2,049 0 commentaires 0 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

Related to: https://github.com/apache/datafusion/issues/17802

Between versions `0.57.0` and `0.58.0` there appears to be a regression that decreased parser tolerance to column names that collide with SQL keywords.

Example:
```rust
use sqlparser::dialect::GenericDialect;
use sqlparser::parser::Parser;

fn main() {
let dialect = GenericDialect {}; // or AnsiDialect

let sql = r#"
SELECT
'a' as a,
offset
FROM my_table
"#;

let ast = Parser::parse_sql(&dialect, sql).unwrap();
println!("AST: {:#?}", ast);
}
```

This works on version `0.57.0`, but fails on `0.58.0` with error:
```
ParserError("Expected: end of statement, found: my_table at Line: 5, Column: 14")
```

These queries work fine, which adds some confusing inconsistency into the mix:
```sql
SELECT
offset
FROM my_table
```
```sql
SELECT
offset,
'a' as a
FROM my_table
```

Guide de contribution

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

Piste de recherche

Commencez par reproduire la requête signalée avec GenericDialect et AnsiDialect sur les versions 0.57.0 et 0.58.0, puis comparez le comportement du parser autour de la colonne offset et de la clause FROM. Suivez les points d’entrée du parser atteints par cet exemple et ajoutez un test de régression couvrant la requête en échec ; c’est terminé lorsque la requête est parsée de manière cohérente sans casser les variantes qui fonctionnent.

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

Évaluation

Stack technique
rust, sql
Domaine
compilers
Type d'issue
Bug
Difficulté
3/5
Temps estimé
1-2 jours
Activité
À l'abandon
Clarté
Plutôt claire
Accessibilité débutants
52/100

Recevez les nouvelles issues par e-mail

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