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은 함수가 서버에 반환하는 것입니다. 연관 함수 중 하나로 구성합니다: 경고 vs 오류: 사용자 입력 검증 실패 시 결과 집합의 나머지 부분을 계속 처리하는 것이 합리적인 경우 warning을 사용하세요. 엄격 모드에서는 MySQL이 INSERTUPDATE에서 경고를 오류로 승격시킵니다. 데이터가 손상되거나 내부 불변 조건 위반과 같은 안전하지 않은 상황에서는 error를 사용하세요. 치명적 오류는 전체 문을 중단합니다.

extension! 매크로

extension!은 서버가 VEB 파일을 로드할 때 호출하는 VEF 엔트리 포인트를 생성합니다. 이는 크레이트 내에서 정확히 한 번만 나타나야 합니다.
두 섹션 모두 선택 사항입니다. 순수 함수 확장은 types:를 생략하고, 타입만 있는 확장은 funcs:를 생략합니다. 빈 extension! 블록(함수 없음, 타입 없음)은 유효하지만 아무 작업도 하지 않는 확장을 생성합니다.

func! 매크로

func!는 SQL 호출 가능한 함수를 선언합니다. 네 가지 형태(매개변수 없음, 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_name, persisted_length, max_decode_buffer_length, encode, decode, 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을 실패시킵니다.