apache / apache/datafusion-sqlparser-rs

Regression: Decreased tolerance to column names matching SQL keywords

オープン
#2,049 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る
主要言語
Rust
スター
3.5k
フォーク
772
平均マージ
4日 9時間
マージ済み PR(30日)
17

説明

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
```

コントリビューションガイド

このリポジトリのコントリビューションガイドは索引されていません

調査の方向性

まず、報告されたクエリを GenericDialect と AnsiDialect でバージョン 0.57.0 および 0.58.0 に対して再現し、その後、offset 列と FROM 句の周辺における parser の動作を比較します。この例で到達する parser のエントリポイントを追跡し、失敗するクエリを対象とする回帰テストを追加します。クエリが一貫してパースされ、動作しているバリアントを壊さなければ完了です。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
rust, sql
領域
compilers
issue の種類
バグ
難易度
3/5
見積もり時間
1〜2日
活発さ
停滞
明瞭さ
おおむね明確
初心者へのやさしさ
52/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。