C++를 선호하는 경우 확장 만들기에서 C++ SDK 워크스루를 참조하세요.
villagesql 크레이트를 사용하여 Rust로 작성할 수 있습니다. SDK는 모든 FFI 마샬링을 처리하므로 일반적인 Rust 타입을 사용하여 작업할 수 있습니다. 서버가 로드 시 호출하는 C 엔트리 포인트는 extension! 매크로가 생성합니다.
사전 요구 사항
다음이 필요합니다:- Rust 안정 도구 체인 — rustup.rs에서 설치
- cargo-vsql — 확장 패키지화, 설치, 테스트를 위한 Cargo 하위 명령어
- VillageSQL 빌드 디렉터리 —
cargo vsql install및cargo vsql test를 위해VillageSQL_BUILD_DIR을 서버 빌드 경로로 설정
cargo-vsql을 설치합니다:
새 크레이트 생성
새로운 Rust 라이브러리 크레이트를 만듭니다:Cargo.toml을 편집하여 크레이트 유형을 설정하고 villagesql 종속성을 추가합니다:
cdylib 크레이트 유형은 Cargo에게 공유 라이브러리(리눅스에서는 .so, 맥OS에서는 .dylib)를 생성하도록 지시합니다.
첫 번째 함수 작성
src/lib.rs를 완전한 확장으로 대체합니다:
func! 매크로는 rot13_impl을 SQL 이름 vsql_rot13과 STRING -> STRING 서명으로 연결합니다.
함수 서명은 fn(&[InValue]) -> VdfReturn입니다. InValue는 서버가 전달하는 SQL 타입의 열거형입니다. VdfReturn은 반환 타입입니다. 값에 접근하기 전에 args.first()를 확인하여 NULL 경우와 잘못된 타입 경우를 처리하세요.
함수가 동일한 입력에 대해 항상 동일한 출력을 반환한다면 결정적(deterministic)으로 선언하세요 — 최적화기는 동일한 입력에 대한 결과를 캐시할 수 있습니다:
manifest.json 추가
크레이트 루트(여기서Cargo.toml과 함께)에 manifest.json을 생성합니다:
name 필드는 INSTALL EXTENSION에 전달하는 값과 일치해야 합니다.
빌드 및 설치
cargo vsql package, cargo vsql install, cargo vsql test 명령을 확장 디렉터리 내에서 실행합니다(여기서 Cargo.toml과 manifest.json이 위치함), 워크스페이스 루트가 아닌 곳에서 실행합니다..veb 파일로 패키지화합니다:
dist/vsql_rot13.veb가 생성됩니다. VEB를 직접 VillageSQL 빌드 디렉터리로 패키지화하고 복사하려면:
테스트
mysql-test/t/rot13_basic.test에 테스트 파일을 작성합니다:
cargo vsql test --record를 다시 실행하고, 확인하기 위해 cargo vsql test를 실행합니다.
SQL에 설치
VEB가 확장 디렉터리에 있으면 설치합니다:다음 단계
Rust에서 사용자 정의 타입
이진 저장, 정렬, 해싱을 갖는 새 컬럼 타입 정의.
Rust API 참조
InValue, VdfReturn, extension!, func!, custom_type! — 모든 필드.
C++ SDK (확장 만들기)
C++ 경로 — 타입화된 래퍼, 빌더 API, CMake 설정.
확장 아키텍처
VEB 파일 로드, 라이프사이클 훅, 심볼 격리.

