Skip to main content
프로토콜 1은 원래의 VEF 인터페이스입니다. v0.0.1부터 안정적이었으며 계속 지원되지만, 향후 릴리스에서 사용 중단될 가능성이 있습니다. 새로운 확장은 프로토콜 3 API를 사용해야 합니다 — C++에서 확장 만들기C++ 개발 가이드에서 설명하는 템플릿 기반 유형 빌더를 사용하세요. 이 페이지는 프로토콜 1에 기반하여 구축된 기존 확장을 다룰 때 참고용으로 존재합니다.

함수 포인터 유형 API

프로토콜 1 사용자 정의 유형은 vsql::make_type<> 템플릿 대신 명시적인 함수 포인터를 사용하여 등록됩니다. 함수 서명은 프로토콜 3의 상응하는 서명과 다릅니다 — ArgResult 객체 대신 원시 포인터와 길이를 인자로 받습니다.

함수 서명

등록

이 형식은 #include <villagesql/extension.h>(<villagesql/vsql.h>가 아님)와 using namespace villagesql;를 필요로 합니다.
컴파일 타임 문자열 NTTP를 사용하는 vsql::make_type<kMyTypeName>()이 선호되는 형식입니다. 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 확장이라도 집계는 이 방식으로 등록해야 합니다. 모든 새로운 코드에 타입화된 집계 접근법을 사용하세요.