Skip to main content
Rust SDK はアルファ版です。リリース間で破壊的な API 変更が発生する可能性があります。関数のみの拡張機能とカスタム型(encode、decode、compare、hash)はサポートされています。集約関数、prerun()VarArgs、システム変数とステータス変数、キーリングアクセス、および列ストレージ ABI は現在 C++ のみで利用可能です。これらのいずれかが必要な場合は C++ SDK を使用してください。
C++ を使用する場合は、C++ で拡張機能を作成する を参照して、C++ SDK の手順を確認してください。
VillageSQL 拡張機能は、villagesql クレートを使用して Rust で記述できます。SDK はすべての FFI マーシャリングを処理します。通常の Rust 型で作業し、extension! マクロが、ロード時にサーバーから呼び出される C エントリポイントを生成します。

前提条件

始める前に、VillageSQL をソースからビルドしてください。拡張機能はサーバーのビルドツリーに対してリンクします。まず ソースからビルドする ガイドに従ってください。 次のものも必要です。
  • Rust の安定版ツールチェーンrustup.rs にてインストール
  • Git — SDK と拡張機能リポジトリをクローンするため
  • cargo-vsql — 拡張機能をパッケージ化、インストール、およびテストするための Cargo サブコマンド
  • VillageSQL のビルドディレクトリcargo vsql install および cargo vsql test のために VillageSQL_BUILD_DIR をサーバーのビルドパスに設定します
  • Rust の基礎知識 — Cargo、列挙型、およびパターンマッチングに慣れていること
SDK リポジトリから cargo-vsql をインストールします。
利用可能であることを確認します。

新しいクレートを作成する

新しい Rust ライブラリクレートを作成します。
Cargo.toml を編集して、クレートのタイプを設定し、villagesql 依存関係を追加します。
cdylib クレートタイプは、Cargo に共有ライブラリ(Linux では .so、macOS では .dylib)を生成するように指示し、サーバーがロードできるようにします。

最初の関数を記述する

src/lib.rs を完全な拡張機能に置き換えます。
func! マクロは、rot13_impl を SQL 名 vsql_rot13 に、STRING -> STRING シグネチャで関連付けます。 関数のシグネチャは fn(&[InValue]) -> VdfReturn です。InValue は、サーバーが渡す SQL 型の列挙型です。VdfReturn は、サーバーに返す値です。args.first() をチェックして、NULL の場合と、型が間違っている場合の両方を処理してから、値にアクセスします。 関数が同じ入力に対して常に同じ出力を返す場合は、関数を決定論的として宣言します。これにより、オプティマイザーは、同じ入力に対して結果をキャッシュできます。

manifest.json を追加する

クレートのルート(Cargo.toml と同じディレクトリ)に manifest.json を作成します。
サーバーは、インストール時にこれを読み取ります。name フィールドは、INSTALL EXTENSION に渡すものと一致する必要があります。

ビルドとインストール

cargo vsql packagecargo vsql install、および cargo vsql test は、拡張機能ディレクトリ(Cargo.tomlmanifest.json がある場所)から実行し、ワークスペースのルートから実行しないでください。
拡張機能を .veb ファイルにパッケージ化します。
これにより、dist/vsql_rot13.veb が生成されます。VEB をパッケージ化して、VillageSQL のビルドディレクトリに直接コピーするには、次のようにします。
開発中に依存関係をローカルのチェックアウトにパッチするには、--config KEY=VALUE を渡します(繰り返し指定可能)。
VEB が拡張機能ディレクトリにコピーされていることを確認します。

テスト

mysql-test/t/rot13_basic.test にテストファイルを作成します。
期待される結果を生成します。
テストスイートを実行します。
関数の動作を変更した場合は、cargo vsql test --record を再実行して、期待される結果を更新してから、cargo vsql test を実行して確認します。

SQL でインストールする

VEB が拡張機能ディレクトリに配置されたら、インストールします。
確認します。
呼び出します。

次のステップ

Rust でのカスタム型

バイナリストレージ、順序付け、およびハッシュを持つ新しい列型を定義します。

Rust API リファレンス

InValueVdfReturnextension!func!、および custom_type! — すべてのフィールド。

C++ SDK(拡張機能の作成)

C++ のパス — 型付きラッパー、ビルダー API、および CMake セットアップ。

拡張機能のアーキテクチャ

VEB ファイルのロード方法、ライフサイクルフック、およびシンボルの分離。

ネットワーク依存の拡張機能のテスト

HTTP サーバーや外部リスナーを起動する拡張機能のための MTR ポートパターン — Rust と C++ の拡張機能に等しく適用されます。