Skip to main content
Rust SDK はアルファ版です。リリース間で破壊的な API 変更が発生する可能性があります。 関数のみの拡張機能とカスタム型 (encode、decode、compare、hash) がサポートされています。 集約、prerun()VarArgs、システム変数とステータス変数、キーリングアクセス、および列ストレージ ABI は、現在 C++ のみです。 これらのいずれかが必要な場合は、C++ SDK を使用してください。
このページは、villagesql クレート API のリファレンスです。 入門チュートリアルについては、Rust で拡張機能を作成する を参照してください。 カスタム型については、Rust のカスタム型 を参照してください。

InValue

InValue は、サーバーが各関数の引数に対して渡す列挙型です。 関数は args: &[InValue] を受け取り、その値を使用する前に各引数をチェックする必要があります。
常に Null を明示的にパターンマッチングしてください。 .unwrap() を呼び出すか、値のバリアントのみをパターンマッチングすると、バグになります。 SQL NULL はエラーではなく、通常の入力です。

VdfReturn

VdfReturn は、関数がサーバーに返す値です。 いずれかの関連関数を使用して構築します。 警告とエラー: warning は、残りの結果セットで処理を続けることが理にかなう、ユーザー入力の検証エラーに使用します。 厳密モードでは、MySQL は INSERT および UPDATE で警告をエラーに昇格させます。 error は、処理を続行することが安全でない場合に使用します。たとえば、保存されたデータが破損している場合や、内部の不変条件に違反している場合です。 致命的なエラーは、ステートメント全体を中止します。

extension! マクロ

extension! は、サーバーが VEB ファイルをロードするときに呼び出す VEF エントリポイントを生成します。 これは、クレート内に正確に 1 つ存在する必要があります。
どちらのセクションもオプションです。 純粋な関数拡張機能では types: を省略し、型のみの拡張機能では funcs: を省略します。 空の extension! ブロック (関数も型もなし) は有効ですが、何も行わない拡張機能が生成されます。

func! マクロ

func! は、SQL で呼び出すことができる関数を宣言します。 4 つの形式 (パラメータなし、buffer_size のみ、deterministic のみ、両方):
buffer_size パラメータには、villagesql クレートの 0.0.2 以降が必要です。 現在の crates.io リリース (0.0.1) ではこれを公開していません。 0.0.2 がリリースされるまでは、buffer_size を使用しない形式を使用してください。
func! で使用する 型定数:

custom_type! マクロ

custom_type! は、新しい列タイプを登録します。 type_namepersisted_lengthmax_decode_buffer_lengthencodedecode、および compare が必要です。 hashdefault はオプションですが、推奨されます。
default フィールドは、列のデフォルト値ではありません。 これは、起動時のプローブです。 サーバーは、拡張機能をロードするときに encode(default) を呼び出して、コールバックが機能していることを確認します。 encode がデフォルトに対して Err を返す場合、拡張機能のロードは失敗します。

custom! マクロ

villagesql::custom!("type_name") は、func! 宣言でカスタム型を参照します。
villagesql::Type::* がパラメータリストまたは戻り値の位置に表示される場所であれば、どこでも使用できます。 文字列は、対応する custom_type! で宣言された type_name と一致する必要があります。

manifest.json フィールド

すべての拡張機能には、Cargo.toml の横に manifest.json が必要です。
name の検証ルール: 英字で始まり、英字または数字で終わり、最大 64 文字。 マニフェストが無効な場合、INSTALL EXTENSION は失敗します。