examples/
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) として格納し、算術関数、順序付け、ハッシュ化を備えています。
使用例:
バイナリ格納形式
rational は 16 バイト (リトルエンディアン) を格納します。
- バイト 0–7: 分子 (
i64) - バイト 8–15: 分母 (
i64)
型システム関数
ファイル: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_lengthはencode()が返すバイト長と一致する必要があります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 の完全なソース

