概要
Tsurugi 1.10.0 では、SQL関連の機能追加として、スカラーサブクエリー、EXISTS 演算子、IN 句内でのサブクエリーに対応しました。
これらの機能により、実用的なアプリケーション開発で求められる様々なクエリーをより幅広く記述できるようになります。
SQL機能追加ではこのほか、VALUES 句(テーブル構築式)の拡張、および FROM 句を省略した SELECT 文に対応しました。
これらの機能により、テーブルに依存しないデータを手軽に扱えるようになります。
また本バージョンではクライアントライブラリの拡充として、Python の標準的なデータベース接続 API である Python DB-API 2.0 (PEP 249) に対応した Tsurugi Python DB-API を公開しました。
Tsurugi Python DB-API を利用することによって、Python の豊富なデータ分析・処理エコシステムとの連携が容易になります。
標準的なデータベースの操作に加え、Tsurugi独自のトランザクションオプションにも対応しており、様々なTsurugi固有の機能も活用できます。
その他、本バージョンではいくつかの重要な不具合修正や安定性の向上を行っています。
前バージョンを利用するすべてのユーザーは本バージョンへのアップグレードを強く推奨します。
機能追加と改善
機能追加と改善 - SQL
- スカラーサブクエリーに対応
- スカラーサブクエリーは単一の値(単一の行かつ単一の列)を返すサブクエリーです。
SELECT句やWHERE句など、単一の値(スカラー値)を記述できる場所であればどこでもサブクエリーを記述できるようになります。SELECT order_id, amount, amount - (SELECT AVG(amount) FROM orders) AS diff_from_average FROM orders
- 本バージョンでは相関サブクエリーには対応していません。詳しくは後述の NOTE を参照してください。
- スカラーサブクエリーは単一の値(単一の行かつ単一の列)を返すサブクエリーです。
EXISTS演算子に対応EXISTS演算子は、サブクエリーの結果が1件以上存在するかどうかを判定するための演算子です。WHERE句などでサブクエリーの存在を条件として記述できるようになります。SELECT order_id FROM orders WHERE EXISTS ( SELECT * FROM warehouse_status WHERE is_open = TRUE )
- 本バージョンでは相関サブクエリーには対応していません。詳しくは後述の NOTE を参照してください。
IN句内でのサブクエリーに対応IN句内でサブクエリーを記述できるように対応しました。これにより、IN句の条件としてサブクエリーの結果を利用できるようになります。SELECT order_id, amount FROM orders WHERE customer_id IN ( SELECT customer_id FROM customers WHERE country_code = 'JP' )
- 本バージョンでは相関サブクエリーには対応していません。詳しくは後述の NOTE を参照してください。
- 本バージョンでは
INサブクエリーをOR演算子のオペランドとして利用できない、NOT INやALL演算子内で利用できないなどの制約があります。詳しくは 後述の NOTE に記載するドキュメントを参照してください。
VALUES句(テーブル構築式)の拡張- これまで、
VALUES句はINSERT文の一部としてのみ利用可能でしたが、本バージョンでVALUES句を任意の場所でテーブル構築式として利用できるように対応しました。 VALUES句は単一の値や複数列、複数行の値を「テーブル」として返すことができます。これにより、テーブルを指定せずに任意のテーブルデータを返したり、関数やUDFを呼び出すことができるようになります。-- 単一の値を返す VALUES (1) -- 複数行・複数列を返す VALUES (1, 'hello', 100), (2, 'world', 200), (3, 'foo', 300) -- 関数を実行 VALUES (CURRENT_TIMESTAMP) -- UDFを実行 VALUES (Greeter('hello'))
- ただし、通常の場合は次項の
FROM句を省略したSELECT文のほうが自然に扱えるかもしれません。
- これまで、
FROM句を省略したSELECT文に対応- これまでは
SELECT文で必ずFROM句を記述する必要がありましたが、本バージョンではFROM句を省略したSELECT文をサポートしました。内部的には、FROM句が省略された場合は、1行0列のテーブルを生成するVALUES句を暗黙的に追加して実行されるようになっています。-- VALUES (1) と同等 SELECT 1 -- VALUES (Greeter('hello')) と同等 SELECT Greeter('hello')
- これまでは
Note
本バージョンでは、サブクエリーから外部クエリーのカラムを参照する 相関サブクエリー には対応していません。SELECT 句で使用するスカラーサブクエリーや EXISTS 演算子は相関サブクエリーとして利用するケースが多いのでご注意ください。
相関サブクエリーは Tsurugi 1.11.0 での対応を計画しています。
機能追加と改善 - Client
- Tsurugi Python DB-API
- Tsurugi Python DB-APIは、Pythonの標準的なデータベースAPIである Python DB-API 2.0 (PEP 249) に準拠したTsurugi用のクライアントライブラリです。標準的なデータベースの操作に加え、Tsurugi独自のトランザクションオプションにも対応しており、Tsurugiの様々な機能をPythonから利用できるようになります。
- Tsurugi Python DB-API は 以下のドキュメントサイトでAPIリファレンスやユーザガイドなどを提供しています。
- Tsurugi Python DB-API は PyPI で公開されています。
機能追加と改善 - UDF
- ユーザー定義表値関数 (
APPLY 演算子) の改善- ユーザー定義表値関数を実行するためのSQL拡張構文である
APPLY演算子を用いてユーザー定義表値関数を呼び出す際の、SQL実行時のスケジューリングの最適化を行いました。 - SQL実行エンジンの内部で非同期的にスケジューリングを行うようにすることで、APPLY 実行中に他のジョブの処理がまれに停止してしまう問題を解消しました。特に負荷の高い処理や大容量データの処理時の安定性が大きく向上しています。
- ユーザー定義表値関数を実行するためのSQL拡張構文である
- Tsurugi起動時のUDFプラグイン初期化処理時のバリデーション強化と安定化
- Tsurugiの起動時に、複数のUDFプラグインをデプロイしている場合に生じることがある gRPC メソッド名の重複や message 名の重複といった、UDFプラグイン制約違反を事前に検出するバリデーション機能を追加しました。
- これまでは上記の制約違反がある場合に Tsurugi が不正な状態で起動エラーになることがありました。本バージョンではその制約違反の内容に応じてUDFプラグインを全体もしくは個別に無効化することで、Tsurugiの起動処理を安定化しました。
- この対応に伴い、UDFプラグインの構成定義ファイルに プロトコル定義ファイル (
.desc.pb) が追加されており、これをデプロイする必要があります。詳細は以下のドキュメントを参照してください。 - udf-plugin - UDF プラグインの構成
- この対応に伴い、UDFプラグインの構成定義ファイルに プロトコル定義ファイル (
- Tsurugi 1.9.0 以前のバージョンで生成したUDFプラグインは、Tsurugi 1.10.0 では利用できません。
udf-plugin-builderを用いてUDFプラグインを再生成してデプロイする必要があります。
バグ修正
バグ修正 - SQL
GROUP BY句や集計関数などによって集約したカラムに対するBETWEEN演算子やIN演算子などが不正なエラーとなることがある- トランザクション競合例外のメッセージに含まれるテーブル名がサロゲートIDとして表示される
バグ修正 - Transaction
- OCCトランザクションのスキャン範囲に対して他のOCCトランザクションが
INSERTを行った場合に、特定条件下でSerializableの違反を検出できずにコミットが成功してしまうことがある
アップグレードについて
クライアント互換性リスト
Tsurugi 1.10.0 では 以下のクライアントに対応しています。
Tsurugi のアップグレードに併せて、必要に応じて各クライアントをアップグレードしてください。
| Client | Version |
|---|---|
| Tsubakuro/Java | 1.13.0+ |
| Iceaxe | 1.13.0+ |
| Tanzawa | 1.13.0+ |
| Tsubakuro/Rust | 0.7.0+ |
| Tsurugi MCP Server | 0.5.0+ |
| Tsurugi JDBC | 0.2.0+ |
| Tsurugi UDF | 0.3.0+ |
Important
Tsurugi UDF については、udf-plugin-builder を用いてUDFプラグインを再生成してデプロイする必要があります。
アップグレード手順
旧バージョンからのアップグレード手順については、以下のドキュメントを参照してください。
その他
本バージョンにおける変更内容の一覧は、以下のChangelogを参照してください。
本バージョンに対する既知の問題、および本バージョンにて修正された問題の補足情報については、以下のリンクを参照してください。