VillageSQL is a drop-in replacement for MySQL with extensions.
All examples on this page work on VillageSQL. Install Now →
C++ を選ぶべき場合
次の場合は C++ が適切な選択です。- チームにすでに C++ のコードベースがあり、拡張機能も同じ言語で保守したい
- 正確なバイナリレイアウトを持つカスタム型が必要である(C++ の型ビルダーは最も完全な API です)
- SQL 関数として公開したい既存の C++ ライブラリを使って作業している
前提条件
拡張機能のコードを書く前に、VillageSQL のビルドが必要です。拡張機能はサーバーの SDK ヘッダーとビルドツリーに対してリンクされます。 次のものも必要です。- C++17 コンパイラ — GCC 8 以降、Clang 8 以降、または MSVC 2019 以降
- CMake 3.18 以降 — 拡張機能テンプレートは CMake を使用します
CMake の設定
最も早く始める方法は、vsql-extension-template を使うことです。フォークするか、クローンします。CMakeLists.txt が VEF のビルド設定を処理します。CMake をゼロから書くのではなく、テンプレートをコピーして適応させてください。-DVillageSQL_BUILD_DIR でビルドディレクトリを設定します。
-DVillageSQL_BUILD_DIR は、SDK ヘッダーを見つけられるように、VillageSQL のビルドがどこにあるかを CMake に伝えます。これにより、ビルド出力に .veb ファイルが生成されます。CMake 設定の全体については、拡張機能の作成と vsql-extension-template を参照してください。
C++ での最小限の VDF
VEF SDK ヘッダーをインクルードし、ビルダー API を使って関数を登録します。文字列を反転する関数を実装した完全な拡張機能を次に示します。<villagesql/extension.h>(古い V1 ヘッダー)ではなく、<villagesql/vsql.h>をインクルードします- 型付きの引数ラッパー(
StringArg、IntArg、RealArg)は NULL をチェックし、型付きの値を公開します。生のポインタ演算は不要です out.set_null()、out.warning(msg)、およびout.error(msg)が、成功以外の 3 つの戻り方ですVEF_GENERATE_ENTRY_POINTSは、生の構造体ではなくmake_extension()ビルダーを受け取ります
.deterministic() を追加します。
.deterministic() は、それが実際に真である場合にのみ追加してください。
ビルド
上の「CMake の設定」セクションの cmake configure ステップの後、ビルドしてインストールします。make install は .veb ファイルを VillageSQL の拡張機能ディレクトリにコピーします。
インストールとテスト
VillageSQL に接続し、拡張機能をインストールします。mysql-test/t/ に MySQL Test Framework のスイートを書きます。
関連項目
- 拡張機能の作成 — C++ SDK の完全なリファレンス: 型付きラッパー、カスタム型、集約、システム変数
- 拡張機能 API リファレンス — VDF の契約、NULL の処理、バッファサイズ、エラーのセマンティクス
- Rust 拡張機能の作成 — 同じ作業を Rust で行う方法