apache / apache/datafusion-sqlparser-rs

Misleading error message for typo in IF NOT EXISTS

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

説明

See also https://github.com/GreptimeTeam/greptimedb/issues/3471.

For sqlparser-rs -

```rust
fn main() {
let sql = "CREATE TABLE IF NOT EXIST ();";

let dialect = GenericDialect {};

let ast = Parser::parse_sql(&dialect, sql).unwrap();

println!("AST: {ast:?}");
}
```

throws:

```
called `Result::unwrap()` on an `Err` value: ParserError("Expected end of statement, found: NOT at Line: 1, Column 17")
```

IIUC if we found `IF` already, the next keywords SHOULD BE `NOT EXIST` and thus the parsing logics should be `.expect_keywords`.

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

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

調査の方向性

提供された Rust の例から始め、GenericDialect と Parser::parse_sql を使って CREATE TABLE IF NOT EXIST 文を処理し、続いて CREATE TABLE と IF NOT EXISTS の parser パスを追跡します。完了条件は、タイプミスによって、誤解を招く文末メッセージではなく、適切な parser エラーが生成されることです。

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

評価

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

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

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