이 문서는 지원되지 않는 버전의 PostgreSQL을위한 것입니다.
당신은에 대해 같은 페이지를 볼 수 있습니다현재버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

54.2. 확장 성

the인터페이스는 a 액세스 방법이 필요한 높은 추상화 수준 데이터 유형의 의미론을 구현하기 위해서만 구현 자 접근 중. 그만큼레이어 그 자체는 동시성을 돌보고 나무를 기록하고 검색합니다. 구조.

A를 얻는 데 필요한 모든액세스 방법 작업 작동은 4 개 (또는 5 개) 사용자 정의를 구현하는 것입니다. 트리의 키의 동작을 정의하는 방법과 키, 색인 항목 및 인덱스 가능한 배트맨 토토 간의 관계. 요컨대결합 일반성, 코드 재사용 및 깨끗한 확장 성 인터페이스.

운영자가 클래스하는 네 가지 방법제공해야합니다.

int 비교 (Datum A, Datum 비)

두 개의 키를 비교 (색인 항목이 아님)를 비교하고 반환합니다 정수는 0, 0보다 적거나 0보다 큰 정수, 첫 번째 키가, 동일하거나, 또는 두 번째보다 큽니다. 널 키는 결코 이것으로 전달되지 않습니다 기능.

Datum *ExtractValue (Datum itemvalue, int32 *nkeys, bool ** nullflags)

항목이 주어지면 Palloc'd Keys를 반환합니다. 색인. 반환 된 키의 수는에 저장되어야합니다.*nkeys. 키가있을 수 있다면 null, 또한 palloc a array*nkeys부울, 주소를 보관하십시오.*nullflags그리고이 null을 설정하십시오 필요에 따라 깃발.*nullflags할 수 있습니다 모든 키가 null이 아닌 경우 왼쪽 null (초기 값). 그만큼 항목에 키가 포함되어 있지 않으면 반환 값이 Null이 될 수 있습니다.

Datum *ExtractQuery (Datum Query, int32 *nkeys, StrategyNumber n, bool ** pmatch, 포인터 ** extra_data, bool ** nullflags, int32 *searchmode)

값이 주어진 값이 주어진 키를 반환합니다. 배트맨 토토; 즉,배트맨 토토is 인덱스 가능한 연산자의 오른쪽에있는 가치 왼쪽은 인덱스 된 열입니다.n운영자의 전략 번호입니다 운영자 클래스 내에서 (참조섹션 35.14.2). 자주,ExtractQuery필요합니다 상담하려면n데이터를 결정합니다 유형배트맨 토토그리고 메소드 주요 값을 추출하는 데 사용해야합니다. 반환 된 수 키는에 저장되어야합니다.*nkeys. 키가 null 일 수 있다면 Palloc a array*nkeys부울, 주소를 저장하십시오 에*nullflags그리고이 널을 설정하십시오 필요에 따라 깃발.*nullflags할 수 있습니다 모든 키가 null이 아닌 경우 왼쪽 null (초기 값). 그만큼 이면 반환 값이 무일하게 될 수 있습니다.배트맨 토토키가 포함되어 있습니다.

SearchMode출력입니다 허용하는 주장ExtractQuery방법에 대한 세부 정보를 지정합니다 검색이 완료됩니다. 만약에*SearchMode로 설정되었습니다gin_search_mode_default(값입니다 호출하기 전에 초기화), 일치하는 항목 만 반환 된 키 중 하나는 후보로 간주됩니다 성냥. 만약에*SearchMode로 설정되었습니다gin_search_mode_include_empty, 그런 다음 적어도 하나의 일치하는 항목 외에 키, 키가 포함되지 않은 항목이 고려됩니다. 후보 일치. (이 모드는 구현에 유용합니다 예를 들어 IS-Subset-of Operators.) if*SearchMode로 설정되었습니다gin_search_mode_all그런 다음 모든 널이 아닌 항목 지수에서 후보는 후보 일치로 간주됩니다 반환 된 키를 일치시킵니다. (이 모드는 많습니다 다른 두 가지 선택보다 느리게 필요합니다 본질적으로 전체 인덱스를 스캔하지만 그럴 수 있습니다 코너 케이스를 올바르게 구현하는 데 필요합니다. 연산자 대부분의 경우이 모드가 필요할 것입니다. 진 운영자 클래스 후보) 이 모드 설정은에 정의됩니다.access/gin.h.

PMATCH는 출력 인수입니다 부분 일치가 지원 될 때 사용합니다. 사용하려면ExtractQueryan 배열*nkeys부울 및 상점 그 주소*PMATCH. 각 배열의 요소는 해당 키에는 부분 일치, 그렇지 않은 경우 false가 필요합니다. 만약에*PMATCH그런 다음 gin으로 설정되었습니다 부분 일치가 필요하지 않다고 가정합니다. 변수는입니다 호출 전에 null로 초기화 되므로이 주장은 할 수 있습니다 지원하지 않는 운영자 클래스에 의해 단순히 무시됩니다. 부분 경기.

extra_data출력입니다 허용하는 주장ExtractQuery추가 데이터를 전달합니다 그만큼일관성and비교적방법. 에게 사용하십시오,ExtractQuery필수 배열 할당*nkeys포인터 및 주소를 보관하십시오.*엑스트라 _data, 원하는 것을 보관하십시오 개별 포인터로. 변수가 초기화됩니다 전화하기 전에 null이 있으므로이 주장은 단순히 무시할 수 있습니다. 추가 데이터가 필요하지 않은 운영자 클래스에 의해. 만약에*엑스트라 _data전체가 설정되어 있습니다 배열이에 전달됩니다.일관성방법 및 적절한 요소비교 상점메소드

bool 일관성 (bool check [], StrategyNumber N, Datum Query, Int32 NKeys, 포인터 extra_data [], bool *리키크, Datum QueryKeys [], bool nullflags [])

인덱스 된 항목이 배트맨 토토를 만족하면 true를 반환합니다 전략 번호가있는 운영자n(또는 재확인 표시가있는 경우이를 만족시킬 수도 있습니다 반품). 이 기능은 다음에 직접 액세스 할 수 없습니다 색인 된 항목의 값품목을 명시 적으로 저장하지 않습니다. 오히려 사용 가능한 것은 어떤 키에 대한 지식입니다 배트맨 토토에서 추출 된 값은 주어진 인덱스에 나타납니다. 목. 그만큼check배열 길이nkeys는 이전에 반환 된 키 수ExtractQuery이것배트맨 토토Datum. 의 각 요소check인덱스 항목이라면 배열이 참입니다 해당 배트맨 토토 키, 즉 if (Check [i] == TRUE)의 I-th 키ExtractQuery결과 배열이 있습니다 인덱스 항목. 원래배트맨 토토Datum은의 경우 통과됩니다일관성방법이 필요합니다 그것에 대해 상담하고도QueryKeys []andnullflags []이전에 반품 배열ExtractQuery. extra_data추가 데이터 배열이 반환되었습니다 에 의해ExtractQuery또는 null if 없음.

언제ExtractQuery반환 null 키QueryKeys [], 동check []요소입니다 인덱스 항목에 널 키가 포함 된 경우. 즉, 의 의미론check []|. 그만큼일관성함수는 할 수 있습니다 해당 검사nullflags []일반 값 일치와 널의 차이 성냥.

성공,*재확인힙 튜플을 다시 확인 해야하는 경우 true로 설정 인덱스 테스트가 정확한 경우 배트맨 토토 연산자 또는 false. 즉, 허위 반환 값은 힙이 튜플은 배트맨 토토와 일치하지 않습니다. 의 진정한 반환 값*재확인허위 보증으로 설정합니다 힙 튜플이 배트맨 토토와 일치한다. 그리고 진정한 귀환 value*재확인true로 설정하십시오 힙 튜플이 배트맨 토토와 일치 할 수 있음을 의미하므로 배트맨 토토를 평가하여 가져 와서 다시 확인해야합니다. 원래 색인 항목에 대해 직접 연산자.

선택적으로, 운영자 클래스다섯 번째 방법을 제공 할 수 있습니다 :

int 비교 당파 (Datum partial_key, Datum Key, StrategyNumber N, 포인터 extra_data)

부분-매치 배트맨 토토 키를 색인 키와 비교합니다. 부호가 결과를 나타내는 정수를 반환합니다 0보다 인덱스 키가 배트맨 토토와 일치하지 않지만 인덱스 스캔은 계속되어야합니다. 0은 인덱스를 의미합니다 키는 배트맨 토토와 일치합니다. 0보다 큽니다 더 이상 일치하지 않기 때문에 인덱스 스캔이 중지되어야합니다. 가능한. 전략 번호nOF 부분 일치 배트맨 토토를 생성 한 연산자는 다음과 같습니다 단, 의미를 결정하는 데 필요한 경우 스캔을 종료 할 때. 또한,extra_data해당 요소입니다 에 의해 만들어진 추가 데이터 배열ExtractQuery또는 null이 없으면 null. 널 키 이 기능으로 전달되지 않습니다.

지원하기"부분 경기"배트맨 토토, 운영자 클래스는를 제공해야합니다.비교파방법 및 그ExtractQuery메소드를 설정해야합니다PMATCH파라미터 부분-매치 배트맨 토토가있을 때 만난. 보다섹션 54.3.2자세한 내용.

다양한 데이터 유형Datum위에서 언급 한 값에 따라 다릅니다 운영자 클래스. 항목 값이 전달되었습니다ExtractValue항상 운영자 클래스입니다 입력 유형 및 모든 키 값은 클래스의 여야합니다스토리지타입. 의 유형배트맨 토토인수가 전달되었습니다ExtractQueryand일관성오른쪽 입력 유형 클래스 멤버 연산자 전략 번호. 이것은 항목 유형과 동일 할 필요가 없으며 올바른 유형의 주요 값을 추출 할 수있는 한 그것.