サーバープラグイン API には次の特徴があります。
-
すべてのプラグインにはいくつかの共通点があります。
各プラグインには、SQL ステートメント内で参照可能な名前のほかに、ほかの情報を提供する作成者および説明などのメタデータがあります。この情報は、
INFORMATION_SCHEMA.PLUGINS
テーブルまたはSHOW PLUGINS
ステートメントを使用して調査できます。 -
プラグインフレームワークは、別の種類のプラグインに対応するために拡張可能です。
プラグイン API の一部の特性はすべてのタイプのプラグインに共通していますが、API ではタイプ固有のインタフェース要素も使用できるため、異なるタイプのプラグインを作成できます。ある用途を持つプラグインは、それ自体の要件にもっとも適したインタフェースを持っているため、ほかのプラグインタイプの要件には適していない可能性があります。
ストレージエンジン、全文パーサー、
INFORMATION_SCHEMA
テーブルなどのさまざまなタイプのプラグイン用のインタフェースが存在します。ほかのインタフェースも追加できます。 -
プラグインは情報をユーザーに公開します。
プラグインは、
SHOW VARIABLES
およびSHOW STATUS
ステートメントを使用して得られるシステム変数およびステータス変数を実装できます。 -
プラグイン API にはバージョン情報が含まれています。
プラグイン API に含まれているバージョン情報によって、プラグインライブラリおよびそれに含まれる各プラグインが、ライブラリのビルドに使用された API バージョンを自己認識できます。API がその後変更されるとバージョン番号が変更されますが、サーバーは対象となるプラグインライブラリのバージョン情報を検査して、そのライブラリ内のプラグインをサポートしているかどうかを判別できます。
バージョン番号には 2 つのタイプがあります。1 つ目は、全般的なプラグインフレームワーク自体のバージョン番号です。各プラグインライブラリには、この種類のバージョン番号が含まれています。2 つ目のタイプのバージョンは個々のプラグインに適用されます。特定のタイプの各プラグインにはそのインタフェースのバージョンがあるため、ライブラリ内の各プラグインにはタイプ固有のバージョン番号があります。たとえば、全文パーサープラグインを含むライブラリには全般的なプラグイン API バージョン番号があり、そのプラグインには全文プラグインインタフェースに固有のバージョン番号があります。
-
プラグイン API はセキュリティー制約を実装します。
プラグインライブラリは特定の専用ディレクトリにインストールする必要があり、ディレクトリの場所はサーバーによって制御され、実行時に変更することはできません。また、ライブラリには、それがプラグインライブラリであることを識別する特定のシンボルが含まれている必要があります。サーバーは、プラグインとしてビルドされていないものをプラグインとしてロードしません。
-
プラグインはサーバーサービスにアクセスできます。
サービスインタフェースは、プラグインが通常の関数呼び出しを使用してアクセスできるサーバー機能を公開します。詳細は、セクション24.2.5「プラグインのための MySQL サービス」を参照してください。
サーバープラグイン API は、それに置き換わる前のユーザー定義関数 (UDF) API といくつかの点で似ていますが、古いインタフェースよりさまざまな点で優れています。たとえば、UDF にはバージョン情報がありません。また、新しいプラグインインタフェースには、以前の UDF インタフェースでのセキュリティー問題がありません。プラグインでない UDF を記述するための以前のインタフェースでは、システムのダイナミックリンカーによって検索されたすべてのディレクトリからライブラリをロードでき、UDF ライブラリを識別するシンボルは比較的特定性の低いものでした。
クライアントプラグイン API には類似したアーキテクチャー上の特徴がありますが、クライアントプラグインはサーバープラグインのようにサーバーに直接アクセスしません。