vsql_complex 확장은 VillageSQL의 C++ SDK를 사용한 사용자 정의 유형에 대한 참조 구현체로, 실제 운영 환경에서 사용할 수 있는 확장 패턴을 보여줍니다.
소스: VillageSQL 저장소의 villagesql/examples/vsql-complex/
vsql_complex가 제공하는 기능
복소수(a + bi)를 위한 COMPLEX 유형으로 산술, 유틸리티 및 집계 기능을 제공합니다. 사용 예시:디렉토리 구조
VEF 등록 패턴
파일:src/complex.cc
vsql_complex는 C++ SDK의 VEF_GENERATE_ENTRY_POINTS() 매크로를 사용합니다:
- 단일 매크로 호출로 모든 것을 등록 — 수동 SQL 필요 없음
- 유형 객체는
vsql::make_type<kName>()로 빌드된constexpr변수이며,kName은 비유형 템플릿 매개변수로 사용되는static constexpr const char[]임 - 유형 연산(
.from_string<>(),.to_string<>(),.compare<>(),.hash<>())은 유형 객체 내에 내장되어 있으며 별도의.func()호출이 필요하지 않음 .compare()는 ORDER BY 및 인덱싱을 가능하게 함;.hash()는 선택적임.intrinsic_default_str("(0,0)")은 INSERT IGNORE 또는 UPDATE IGNORE가 이 유형의 NOT NULL 열에 NULL을 할당할 때 기록되는 기본값을 설정함- 함수 등록은
make_func<&impl>("name")과.build()를 사용함 - 집계 등록은
make_aggregate_func<State, &result_fn>("name")과.clear<&fn>()및.accumulate<&fn>()을 사용하며, 결과 함수는void(const State&, ResultType)서명을 가짐
이진 저장 형식
COMPLEX는 16바이트(리틀엔디안)로 저장됩니다:- 바이트 0-7: 실수 부분(double)
- 바이트 8-15: 허수 부분(double)
인수 및 결과 유형
구현 코드에서는 원시 프로토콜 구조체 대신 타입화된 인수 및 결과 유형을 사용합니다: 산술 예시 (complex.cc에서):테스트 전략
테스트 파일 (test/t/complex_create.test):핵심 구현 패턴
매니페스트
파일:manifest.json
사용자 정의 유형을 포함한 데이터 내보내기 및 가져오기
VillageSQL은 사용자 정의 유형에 대해SELECT INTO OUTFILE 및 LOAD DATA INFILE을 지원하여 사용자 정의 유형 값을 유지한 채 데이터를 내보내고 가져올 수 있습니다.
SELECT INTO OUTFILE
사용자 정의 유형은 내보낼 때 문자열 표현으로 직렬화됩니다:/tmp/signals_export.txt):
LOAD DATA INFILE
내보낸 데이터를 테이블로 다시 로드합니다:사용자 정의 구분자로 내보내기
사용자 정의 필드 및 줄 종결자 사용 가능:VDF 함수로 내보내기
확장 함수를 사용하여 계산된 값을 내보냅니다:사용자 정의 유형은 문자열 표현 형식으로 내보내집니다.
SELECT INTO DUMPFILE을 통한 이진 내보내기는 현재 사용자 정의 유형에 지원되지 않습니다.다음 단계
확장 생성
자체 확장 구축
확장 아키텍처
내부 구조 이해
vsql_complex 소스
완전한 소스 코드 보기
사용 가능한 확장
확장 카탈로그 탐색

