apache / apache/datafusion-sqlparser-rs

Always wrap statement in a named struct

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

説明

In [GreptimeDB](https://github.com/GreptimeTeam/greptimedb/blob/v0.7.1/src/sql/src/statements/delete.rs), we write code like:

```rust
#[derive(Debug, Clone, PartialEq, Eq, Visit, VisitMut)]
pub struct Delete {
// Can only be sqlparser::ast::Statement::Delete variant
pub inner: Statement,
}
```

It's because in sqlparser-rs, these statement variants are unnamed struct:

```rust
Delete {
/// Multi tables delete are supported in mysql
tables: Vec,
/// FROM
from: Vec,
/// USING (Snowflake, Postgres, MySQL)
using: Option>,
/// WHERE
selection: Option,
/// RETURNING
returning: Option>,
},
```

I wonder if we can always wrap statement in a named struct so that downstream software can reuse the AST and impls (like for Display) more smoothly.

I don't know if it's a breaking change or we're generally OK with this.

Ref - https://github.com/GreptimeTeam/greptimedb/issues/3646

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

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

調査の方向性

まず、sqlparser AST の statement 定義と、GreptimeDB の src/sql/src/statements/delete.rs に示されている downstream wrapper を確認します。downstream のコードが Display やその他の AST trait をどのように実装または利用しているかを確認し、そのうえで各 statement variant をラップすることによる互換性への影響を判断します。再利用と breaking change に関する懸念を扱った、文書化された設計または承認済みの実装計画があれば完了です。

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

評価

技術スタック
rust, sql
領域
compilers
issue の種類
機能追加
難易度
5/5
見積もり時間
1週間以上
活発さ
停滞
明瞭さ
説明が足りない
初心者へのやさしさ
25/100

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

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