Skip to main content
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):
플랫폼 독립적인 바이트 순서 함수를 사용하여 크로스 플랫폼 호환성을 보장합니다.

인수 및 결과 유형

구현 코드에서는 원시 프로토콜 구조체 대신 타입화된 인수 및 결과 유형을 사용합니다: 산술 예시 (complex.cc에서):
유틸리티 함수 (complex.cc에서):

테스트 전략

테스트 파일 (test/t/complex_create.test):
결과 생성:
테스트 실행:

핵심 구현 패턴


매니페스트

파일: manifest.json

사용자 정의 유형을 포함한 데이터 내보내기 및 가져오기

VillageSQL은 사용자 정의 유형에 대해 SELECT INTO OUTFILELOAD DATA INFILE을 지원하여 사용자 정의 유형 값을 유지한 채 데이터를 내보내고 가져올 수 있습니다. 두 문 모두 secure_file_priv가 쓰기 가능한 디렉터리를 지정하거나 비어 있어야 합니다. 기본값인 secure_file_priv=NULL 상태로 둔 서버는 이러한 문을 ERROR 1290과 함께 즉시 거부합니다.

SELECT INTO OUTFILE

사용자 정의 유형은 내보낼 때 문자열 표현으로 직렬화됩니다:
파일 내용 (/tmp/signals_export.txt):

LOAD DATA INFILE

내보낸 데이터를 테이블로 다시 로드합니다:

사용자 정의 구분자로 내보내기

사용자 정의 필드 및 줄 종결자 사용 가능:
출력:

VDF 함수로 내보내기

확장 함수를 사용하여 계산된 값을 내보냅니다:
사용자 정의 유형은 SELECT ... INTO OUTFILE에 의해 문자열 표현으로 내보내지고 LOAD DATA INFILE에 의해 다시 읽힙니다. SELECT ... INTO DUMPFILE은 문자열 표현을 쓰지 않습니다: 그 방식으로 쓴 COMPLEX 값은 (3,4)가 아니라 16개의 이진 바이트로 기록됩니다.

다음 단계

확장 생성

자체 확장 구축

확장 아키텍처

내부 구조 이해

vsql_complex 소스

완전한 소스 코드 보기

사용 가능한 확장

확장 카탈로그 탐색