villagesql 크레이트 API에 대한 참조입니다. 시작하기 가이드는 Rust로 확장 만들기를 참조하세요. 사용자 정의 타입에 대해서는 Rust에서의 사용자 정의 타입을 참조하세요.
InValue
InValue는 서버가 각 함수 인수에 대해 전달하는 열거형입니다. 함수는 args: &[InValue]를 받으며, 값을 사용하기 전에 각 인수를 확인해야 합니다.
항상
Null을 명시적으로 매치해야 합니다. .unwrap()을 호출하거나 값 배리언트만 패턴 매칭하는 것은 버그입니다 — SQL NULL은 오류가 아닌 정상적인 입력입니다.
VdfReturn
VdfReturn은 함수가 서버에 반환하는 것입니다. 연관 함수 중 하나로 구성합니다:
경고 vs 오류:
사용자 입력 검증 실패 시 결과 집합의 나머지 부분을 계속 처리하는 것이 합리적인 경우
warning을 사용하세요. 엄격 모드에서는 MySQL이 INSERT 및 UPDATE에서 경고를 오류로 승격시킵니다. 데이터가 손상되거나 내부 불변 조건 위반과 같은 안전하지 않은 상황에서는 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는 필수이며, hash와 default는 선택적이지만 권장됩니다.
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을 실패시킵니다.
