apache / apache/datafusion-sqlparser-rs
Regression: Decreased tolerance to column names matching SQL keywords
- 主要言語
- 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