examples/
vsql_rot13 — 함수 전용 확장
가능한 한 가장 간단한 Rust 확장: STRING을 받아 STRING을 반환하는 VDF 하나입니다. 사용법:디렉터리 구조
구현
파일:src/lib.rs
- VDF는
&[InValue]를 받고VdfReturn을 반환합니다 — 둘 다 안전한 Rust 열거형입니다 - NULL은 양쪽 모두에서 일급 배리언트(variant)입니다; 직접 패턴 매치하세요
extension!매크로는 서버가 로드 시 호출하는 C 엔트리 포인트를 생성합니다func!는 SQL 시그니처를 선언합니다; 인수 및 반환 타입은villagesql::Type::*를 사용합니다
매니페스트
파일:manifest.json
vsql_rational — 산술을 갖춘 사용자 정의 타입
완전한 사용자 정의 타입: 기약 형태의(numerator, denominator)로 저장되는 유리수이며, 산술 함수, 정렬, 해싱을 갖춥니다.
사용법:
이진 저장 형식
rational은 16바이트를 저장합니다(리틀 엔디언):
- 바이트 0–7: 분자(
i64) - 바이트 8–15: 분모(
i64)
타입 시스템 함수
파일:src/lib.rs
이 타입은 네 가지 연산을 등록합니다: encode(문자열 → 바이트), decode(바이트 → 문자열), compare(ORDER BY용), hash(인덱싱용).
VDF 구현
사용자 정의 타입을 받는 VDF는InValue::Custom(&[u8])를 받아 바이트를 직접 디코딩합니다:
등록
extension! 매크로는 타입과 그 함수를 단일 선언으로 등록합니다:
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 전체 소스

