Skip to main content
Rust SDK はバージョン 0.0.1 です。
C++ を使用する場合は、拡張機能の作成 を参照して、C++ SDK の手順を確認してください。
VillageSQL 拡張機能は、villagesql クレートを使用して Rust で記述できます。SDK はすべての FFI マーシャリングを処理します。通常の Rust 型で作業し、extension! マクロがサーバーがロード時に呼び出す C エントリポイントを生成します。

前提条件

次のものが必要です。
  • Rust の安定版ツールチェーンrustup.rs にてインストール
  • cargo-vsql — 拡張機能をパッケージ化、インストール、およびテストするための Cargo サブコマンド
  • VillageSQL のビルドディレクトリVillageSQL_BUILD_DIR をサーバーのビルドパスに設定し、cargo vsql install および cargo vsql test を実行します。
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.tomlmanifest.json の場所)に manifest.json を作成します。
サーバーは、インストール時にこれを読み取ります。name フィールドは、INSTALL EXTENSION に渡すものと一致する必要があります。

ビルドとインストール

cargo vsql packagecargo vsql install、および cargo vsql test は、拡張機能ディレクトリ(Cargo.tomlmanifest.json がある場所)から実行し、ワークスペースのルートから実行しないでください。
拡張機能を .veb ファイルにパッケージ化します。
これにより、dist/vsql_rot13.veb が生成されます。VEB をパッケージ化して、VillageSQL のビルドディレクトリに直接コピーするには、次のようにします。
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 ファイルのロード方法、ライフサイクルフック、およびシンボルの分離。