Skip to main content
プロトコル 1 は元の VEF インターフェースです。v0.0.1 で安定しており、引き続きサポートされていますが、将来のリリースで非推奨になる可能性があります。新しい拡張機能では、プロトコル 3 API(C++ での拡張機能の作成 および C++ 開発 ガイドにあるテンプレートベースの型ビルダー)を使用してください。 このページは、プロトコル 1 を使用して構築された既存の拡張機能を扱う際に参照するために存在します。

関数ポインタ型 API

プロトコル 1 のカスタム型は、vsql::make_type<> テンプレートの代わりに、明示的な関数ポインタを使用して登録されます。関数シグネチャは、プロトコル 3 の同等物とは異なり、Arg および Result オブジェクトではなく、生のポインタと長さを引数として受け取ります。

関数シグネチャ

登録

この形式では、#include <villagesql/extension.h><villagesql/vsql.h> ではありません)と using namespace villagesql; が必要です。
vsql::make_type<kMyTypeName>() (コンパイル時の文字列 NTTP を使用) が推奨される形式です。make_type(MYTYPE) (テンプレートパラメータなし) はプロトコル 1 の形式であり、引き続きサポートされていますが、将来のリリースで非推奨になる可能性があります。

生の ABI スタイル (関数)

プロトコル 1 の VDF 実装では、型付きラッパーを使用する代わりに、生の C 構造体を直接渡すことができます。このスタイルは引き続きサポートされていますが、将来のリリースで非推奨になる可能性があります。すべての新しいコードでは、型付き引数/結果 API を使用してください。
この引数ごとの生のシグネチャ — void(vef_context_t*, vef_invalue_t* arg0, ..., vef_vdf_result_t*) — は、<villagesql/extension.h>make_func<>() によってのみ検出されます。<villagesql/vsql.h>make_func<>() は、生の vef_context_t*/vef_invalue_t*/vef_vdf_result_t* シグネチャをコンパイル時にすべて拒否します。

結果定数

生の ABI は、result->type に設定された vef_return_value_type_t を介して結果の状態を伝達します。 プロトコル 3 では、out.set()out.set_null()out.warning()out.error() がこれを自動的に処理します。

プロトコル 1 における集計関数の登録

生の ABI による集計関数の登録パスはありません。make_func<>() には .clear<>().accumulate<>() のメンバーはありません。これらのメソッドは、<villagesql/vsql.h> にある別のビルダー make_aggregate_func<State, &result_fn>() にのみ存在し、生の vef_context_t*/vef_vdf_args_t* ポインタではなく、State& ベースの型付きシグネチャを使用します。プロトコル 1 の拡張機能であっても、この方法で集計関数を登録する必要があります。すべての新しいコードでは、型付き集計関数のアプローチ を使用してください。