apache / apache/datafusion-sqlparser-rs
Expected end of statement, found: COMMENT while parsing MySQL `CREATE TABLE` statement
- 主要言語
- Rust
- スター
- 3.5k
- フォーク
- 772
- 平均マージ
- 4日 9時間
- マージ済み PR(30日)
- 17
説明
Hi,
I'm using sqlparser = "0.38.0", trying to parse the below with
```
let result = Parser::parse_sql(dialect.as_ref(), &sql);
let ast: Vec = Vec::new();
match result {
Ok(value) => {
println!("Parse Ok");
let ast = value;
},
Err(err) => {
eprintln!("Error: {}", err);
std::process::exit(-1);
},
}
```
However it is failing with **sql parser error: Expected end of statement, found: COMMENT at Line: 1, Column 691**. Is there a way to ignore anything outside the parenthesis as that is irrelevant for my usecase however I suspect this is unintended behaviour?
```
CREATE TABLE `randoms_2` (
`first_name` varchar(64) NOT NULL,
`last_name` varchar(64) NOT NULL,
`home_phone` varchar(12) NOT NULL,
`email` varchar(64) NOT NULL,
`address` varchar(64) NOT NULL,
`city` varchar(32) NOT NULL,
`state` varchar(2) NOT NULL,
`zip` varchar(5) NOT NULL,
`date_of_birth` varchar(10) NOT NULL,
`ssn` varchar(9) NOT NULL,
`drivers_license` varchar(32) NOT NULL,
`drivers_license_state` varchar(2) NOT NULL,
`income_type` varchar(16) NOT NULL,
`account_type` varchar(16) NOT NULL,
`routing_number` varchar(32) NOT NULL,
`account_number` varchar(32) NOT NULL,
`bank_name` varchar(64) NOT NULL,
PRIMARY KEY (`ssn`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='LOAD DATA LOCAL INFILE "random.csv" INTO TABLE randoms_2 COLUMNS TERMINATED BY '','' ENCLOSED BY ''"'' LINES TERMINATED BY ''\\r\\n'' IGNORE 1 LINES;';
```
コントリビューションガイド
このリポジトリのコントリビューションガイドは索引されていません
調査の方向性
Parser::parse_sql エントリポイントから開始し、末尾の ENGINE、CHARSET、COMMENT 句に焦点を当てて MySQL CREATE TABLE の例を再現してください。この有効な文をどのように扱うことが意図されているかを判断し、末尾の COMMENT 句について回帰テストでカバレッジを確保したうえで、報告された入力が正しくパースされることを検証してください。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- mysql, rust, sql
- 領域
- compilers, databases
- issue の種類
- バグ
- 難易度
- 3/5
- 見積もり時間
- 1〜2日
- 活発さ
- 停滞
- 明瞭さ
- おおむね明確
- 初心者へのやさしさ
- 45/100