DuckDB v2.0、SQLパーサをPEGベースに刷新 拡張性向上
DuckDB V2 PEG-based SQL parser
DuckDB v2.0は、PostgreSQL由来のSQLパーサをPEG(Parsing Expression Grammar)ベースの新パーサに置き換えた。文法の拡張が容易になり、実行時の拡張も可能になる。新構文としてSELECTを省略できる式文やCONNECT文、外部リソース管理構文などが追加された。パックラット構文解析により、不正な入力に対する指数関数的な遅延も解消している。
「PEG文法により、DuckSQLの進化を続けやすくなった。次のステップは、拡張機能が独自のルールを追加できるようにすることだ」
- zcw100
これは楽しみです。もういくつかユースケースも考えていますが、各拡張作者が文法を変更しようとするにつれて、文法の無秩序な競合が起こるのではと常に心配しています。彼らがすでに何らかの対策を講じていることを願っていますが、まだ読んでいないだけかもしれません。拡張をロードすると構文の解釈が変わってしまう可能性があるのが心配です。2つの拡張作者が正当に矛盾するパーサーを望むこともあり得ますし、DuckDBでは拡張をアンロードする簡単な方法もありません。「GRAMMAR SQL」や「GRAMMAR GGSQL」のような明示的な指定があればいいのにと思います。
- tofflos
> 以前のブログ記事では、DuckDBのフレンドリーなSQLについて取り上げてきました。GROUP BY ALLやSELECT * EXCLUDE (...)を使った列選択などです。
フレンドリーなSQLというアイデアは素晴らしいと思います!私はよく同じ形のビューを作成するのですが、UNIONとUNION ALLがリストを受け付けてくれると嬉しいです。しかし、それは標準にはないので、PostgreSQLで実装されることはないだろうと諦めています。
select * from view1 union all view2, view3, view4;
- pspeter3
これが意味するのは、Duck SQL用のOxfmtプラグインが作れるかもしれないということでしょうか?