Skip to main content
Rust SDK リポジトリには 2 つの参照拡張が同梱されています。関数のみの最小限の例と、算術演算、順序付け、ハッシュ化を備えた完全なカスタム型です。 ソース: vsql-rust-sdkexamples/

vsql_rot13 — 関数のみの拡張

考えられる最も単純な Rust 拡張です。STRING を受け取り STRING を返す 1 つの VDF です。 使用例:

ディレクトリ構造

実装

ファイル: src/lib.rs
主要なパターン:
  • VDF は &[InValue] を受け取り VdfReturn を返します。どちらも安全な Rust の列挙型です
  • NULL は両側で第一級のバリアントです。直接パターンマッチできます
  • extension! マクロは、サーバーがロード時に呼び出す C エントリポイントを生成します
  • func! は SQL シグネチャを宣言します。引数と戻り値の型には villagesql::Type::* を使用します

マニフェスト

ファイル: manifest.json

vsql_rational — 算術演算を備えたカスタム型

完全なカスタム型です。有理数を約分された形の (numerator, denominator) として格納し、算術関数、順序付け、ハッシュ化を備えています。 使用例:

バイナリ格納形式

rational16 バイト (リトルエンディアン) を格納します。
  • バイト 0–7: 分子 (i64)
  • バイト 8–15: 分母 (i64)
値は常に、正の分母を持つ約分された形 (GCD = 1) で格納されます。

型システム関数

ファイル: src/lib.rs この型は 4 つの操作を登録します。エンコード (文字列 → バイト)、デコード (バイト → 文字列)、比較 (ORDER BY 用)、ハッシュ (インデックス作成用) です。

VDF の実装

カスタム型を受け取る VDF は InValue::Custom(&[u8]) を受け取り、バイトを自身でデコードします。

登録

extension! マクロは、型とその関数の両方を 1 つの宣言で登録します。
主要なパターン:
  • villagesql::custom!("name") は、引数または戻り値としてカスタム型を参照します
  • custom_type! は、型をその encode/decode/compare/hash 関数とともに登録します
  • default: "0/1" は組み込みのデフォルト値です。サーバーは型の初期化時にこの文字列に対して encode() を呼び出すため、有効な値である必要があります
  • persisted_lengthencode() が返すバイト長と一致する必要があります
  • deterministic: true により、オプティマイザは定数呼び出しを畳み込むことができます

主要な実装パターン


テスト

どちらの例も、C++ 拡張と同様に MTR (MySQL Test Runner) を使用します。
--record を使用して期待される結果を生成または更新します。

次のステップ

Rust で拡張機能を作成する

SDK のインストール、ビルド、および extension! マクロ

Rust カスタム型

encode、decode、compare、hash の詳細

Rust API リファレンス

InValue、VdfReturn、およびマクロの API サーフェス

サンプルソース

vsql_rot13 および vsql_rational の完全なソース