概要は下記となります。
新SQLコンパイラ (Mizugakiコンパイラ)
本バージョンでは、今後のTsurugiにおけるSQL機能拡張の基盤となる新しいSQLコンパイラ(Mizugakiコンパイラ)を導入しました。
Mizugakiコンパイラの導入により、SQL処理に関する多くのバグ修正や制約の解消、安定性と性能が向上したほか、いくつかのSQL機能拡張に対応しています。
本バージョンではコンパイラ自体の切り替え作業を中心に実施したためSQLの機能拡張内容はそれほど多くはありませんが、今後Mizugakiコンパイラをベースに様々なSQL機能の拡張を行っていく予定です。
Mizugakiコンパイラでは、従来のSQLコンパイラ(Shakujoコンパイラ)に対して一部非互換の変更が行われたため、既存のSQLクエリに影響が出る可能性があります。互換性に関する情報の詳細については以下の資料を参照してください。
- [Breaking Changes in BETA5 (ja)]
(https://github.com/project-tsurugi/tsurugidb/discussions/68)
また、Mizugakiコンパイラに基づくTsurugiのSQL仕様については、以下の資料を参照してください。
- [Available SQL features in Tsurugi]
(https://github.com/project-tsurugi/tsurugidb/blob/1.0.0-BETA5/docs/sql-features.md)
その他のハイライト
本バージョンでは、Tsurugiが提供する各種CLIに対して以下のような機能追加を行いました。
- サーバ管理コマンド `tgcli` にセッション管理機能(`tgsql session`)を追加しました。
セッション管理機能を利用することで、セッションの一覧表示や詳細ステータスの確認、セッションの強制終了などが行えるようになります。 - トランザクションログのコンパクションツール `tglogutil-compaction` を追加し、サーバ停止時にトランザクションログの圧縮を行うことが可能になりました。
今後のバージョンでは、サーバ起動中のトランザクションログ圧縮機能を提供する予定です。 - SQLコンソール `tgsql` にプロンプトや出力内容をカスタマイズする機能を追加しました。
また、Tsurugiの対応プラットフォームとして本バージョンから試験的サポートとしてUbuntu 24.04上での実行、およびGCC 13上でのビルドに対応しました。
これに合わせてUbuntu 24.04をベースとしたDockerイメージを試験的に提供しています。
機能追加と改善
SQL
Mizugakiコンパイラの導入による全体的な安定性向上と性能改善、SQL構文の追加サポート
- `HAVING` 句に対応
- `GROUP BY` 句と `ORDER BY` 句の組み合わせに対応
- `DISTINCT` 句と `ORDER BY` 句の組み合わせに対応
- `LIMIT` 句に限定的に対応(試験的サポート)
- 本バージョンでは `ORDER BY` 句と組み合わせた `LIMIT` 句のみ対応しています
- その他いくつかの仕様と異なる動作に対して未修正の問題があります - 複数行指定のINSERT(Multirow-INSERT)に対応
- `テーブル名.*` 構文のサポート
- 数値リテラル(Decimal literal)のサポート
- ダブルクウォート付き識別子 (Delimited identifiers) のサポート
Tools
- `tgctl session`: `tgsql` コマンドにセッション管理機能を追加
- https://github.com/project-tsurugi/tateyama/blob/master/docs/session-control-cli_ja.md - `tglogutil-compaction`: トランザクションログ圧縮ツールを追加
- https://github.com/project-tsurugi/limestone/blob/master/docs/tglogutil-compaction-man.md - `tgsql` コマンドにプロンプトのカスタマイズ機能を追加
- https://github.com/project-tsurugi/tanzawa/blob/master/modules/tgsql/docs/prompt_ja.md - `tgsql` コマンドに出力内容のカスタマイズ機能を追加
- https://github.com/project-tsurugi/tanzawa/blob/master/modules/tgsql/docs/client-variable_ja.md
Server Configuratios
(構成定義ファイル `tsurugi.ini で新たに指定可能となったオプション)
- `stream_endpoint.enabled`
- stream_endpointを有効化 or 無効化してtsurugidbを起動する、デフォルトはtrue(有効化して起動する) - `ipc.admin_sessions`
- 管理コマンド(`tgctl`)用のセッション数。デフォルト値は1。 | threadsで指定する通常のセッション数上限とは別に用意する管理コマンド用のセッション数、指定可能な最大値は255。 - `sql.lowercase_regular_identifiers`
- SQLコンパイラがテーブル名などのシンボルを小文字に変換して扱うか。Mizugakiコンパイラのみ有効。デフォルトはfalse
- https://github.com/project-tsurugi/tsurugidb/blob/1.0.0-BETA5/docs/sql-features.md#regular-identifiers - `sql.dev_compiler_support` (1.0.0-BETA5でのみ利用可能、次のリリースバージョンで廃止予定)
- 0の場合は旧コンパイラ(Shakujoコンパイラ)を使用、1の場合は新コンパイラ(Mizugakiコンパイラ)を使用する。デフォルトは1。
Client APIs
- Tsubakuro `Session` インターフェースに安全なセッションの終了を待つ `shutdown` メソッドを追加
Platform Support
- Ubuntu 24.04に対応(試験的サポート)
- GCC 13でのビルドに対応(試験的にサポート)
- Ubuntu 24.04ベースのDockerイメージを提供(試験的サポート)
- https://github.com/project-tsurugi/tsurugidb/pkgs/container/tsurugidb
バグ修正
SQL
- GROUP BY句で同一カラムを複数指定すると異常終了する
- 同名のカラムを持つテーブルが作成できる
- SQLコンパイラのPREPARE処理が稀に異常終了する。
- SQLコンパイラが出力する不適切なエラーメッセージを全体的に修正
- WHERE句に不正なトークンを含むクエリがエラーにならない
- CREATE TABLEで列のデフォルト値に負の数が指定できない
- CROSS JOINとSELECT COUNT(*)の組み合わせが異常終了する
- 構成定義ファイルの設定 `sql.default_partitions` に32より大きい値を設定した場合にクエリーが正常に実行されない
Transaction
- Full-Scanを伴うSELECTとINSERT OR REPLACEが競合する2つのOCCのSerializable違反が検知されないことがある
- トランザクションエンジン内部のトランザクションに関するカウンタ情報があふれる可能性を修正
Endpoint
- IPC接続利用時に、グループ化や集約を伴うSQLの結果が稀に不正になることがある
- IPC接続を利用する同一プロセスからセッションを作成し続けると65200近辺で異常終了する
- IPC接続利用時に共有メモリの不足エラーが発生した際に動作が不安定になる
- TCP接続しているとshutdownが終了しない
Client APIs
- ForegroundFutureResponse.close()がタイムアウトしない
- timestamp with time zone型の列に対してmin関数が正しい結果を返さない
- timestamp with time zone型のデータを検索時にエラーになることがある
- クエリー実行中にTransactionをクローズすると不正な例外が発生することがある
その他、細かい安定性の向上や動作の改善などが行われています。
詳細については以下のChangelogを参照してください。
- [Tsurugi 1.0.0-BETA5 - Changelog]
(https://github.com/project-tsurugi/tsurugidb/discussions/69)
過去バージョンからのアップグレード手順については、
以下のドキュメントを参照してくだいさい。
- [Tsurugi Upgrade Guide]
(https://github.com/project-tsurugi/tsurugidb/blob/master/docs/upgrade-guide.md)