PostgreSQL Source Code
git master
|
#include "postgres.h"
#include "access/gist.h"
#include "access/heaptoast.h"
#include "access/reloptions.h"
#include "common/int.h"
#include "lib/qunique.h"
#include "port/pg_bitutils.h"
#include "tsearch/ts_utils.h"
#include "utils/fmgrprotos.h"
#include "utils/pg_crc.h"
Go to the source code of this file.
Data Structures | |
struct | GistTsVectorOptions |
struct | SignTSVector |
struct | CHKVAL |
struct | CACHESIGN |
struct | SPLITCOST |
Macros | |
#define | SIGLEN_DEFAULT (31 * 4) |
#define | SIGLEN_MAX GISTMaxIndexKeySize |
#define | GET_SIGLEN() |
#define | SIGLENBIT(siglen) ((siglen) * BITS_PER_BYTE) |
#define | LOOPBYTE(siglen) for (i = 0; i < siglen; i++) |
#define | GETBYTE(x, i) ( *( (BITVECP)(x) + (int)( (i) / BITS_PER_BYTE ) ) ) |
#define | GETBITBYTE(x, i) ( ((char)(x)) >> (i) & 0x01 ) |
#define | CLRBIT(x, i) GETBYTE(x,i) &= ~( 0x01 << ( (i) % BITS_PER_BYTE ) ) |
#define | SETBIT(x, i) GETBYTE(x,i) |= ( 0x01 << ( (i) % BITS_PER_BYTE ) ) |
#define | GETBIT(x, i) ( (GETBYTE(x,i) >> ( (i) % BITS_PER_BYTE )) & 0x01 ) |
#define | HASHVAL(val, siglen) (((unsigned int)(val)) % SIGLENBIT(siglen)) |
#define | HASH(sign, val, siglen) SETBIT((sign), HASHVAL(val, siglen)) |
#define | GETENTRY(vec, pos) ((SignTSVector *) DatumGetPointer((vec)->vector[(pos)].key)) |
#define | ARRKEY 0x01 |
#define | SIGNKEY 0x02 |
#define | ALLISTRUE 0x04 |
#define | ISARRKEY(x) ( ((SignTSVector*)(x))->flag & ARRKEY ) |
#define | ISSIGNKEY(x) ( ((SignTSVector*)(x))->flag & SIGNKEY ) |
#define | ISALLTRUE(x) ( ((SignTSVector*)(x))->flag & ALLISTRUE ) |
#define | GTHDRSIZE ( VARHDRSZ + sizeof(int32) ) |
#define | CALCGTSIZE(flag, len) ( GTHDRSIZE + ( ( (flag) & ARRKEY ) ? ((len)*sizeof(int32)) : (((flag) & ALLISTRUE) ? 0 : (len)) ) ) |
#define | GETSIGN(x) ( (BITVECP)( (char*)(x)+GTHDRSIZE ) ) |
#define | GETSIGLEN(x) ( VARSIZE(x) - GTHDRSIZE ) |
#define | GETARR(x) ( (int32*)( (char*)(x)+GTHDRSIZE ) ) |
#define | ARRNELEM(x) ( ( VARSIZE(x) - GTHDRSIZE )/sizeof(int32) ) |
#define | WISH_F(a, b, c) (double)( -(double)(((a)-(b))*((a)-(b))*((a)-(b)))*(c) ) |
Typedefs | |
typedef char * | BITVECP |
#define ALLISTRUE 0x04 |
Definition at line 72 of file tsgistidx.c.
#define ARRKEY 0x01 |
Definition at line 70 of file tsgistidx.c.
Definition at line 84 of file tsgistidx.c.
#define CALCGTSIZE | ( | flag, | |
len | |||
) | ( GTHDRSIZE + ( ( (flag) & ARRKEY ) ? ((len)*sizeof(int32)) : (((flag) & ALLISTRUE) ? 0 : (len)) ) ) |
Definition at line 79 of file tsgistidx.c.
Definition at line 50 of file tsgistidx.c.
#define GET_SIGLEN | ( | ) |
Definition at line 37 of file tsgistidx.c.
Definition at line 52 of file tsgistidx.c.
Definition at line 49 of file tsgistidx.c.
Definition at line 48 of file tsgistidx.c.
#define GETENTRY | ( | vec, | |
pos | |||
) | ((SignTSVector *) DatumGetPointer((vec)->vector[(pos)].key)) |
Definition at line 57 of file tsgistidx.c.
Definition at line 81 of file tsgistidx.c.
Definition at line 78 of file tsgistidx.c.
Definition at line 55 of file tsgistidx.c.
Definition at line 54 of file tsgistidx.c.
#define ISALLTRUE | ( | x | ) | ( ((SignTSVector*)(x))->flag & ALLISTRUE ) |
Definition at line 76 of file tsgistidx.c.
#define ISARRKEY | ( | x | ) | ( ((SignTSVector*)(x))->flag & ARRKEY ) |
Definition at line 74 of file tsgistidx.c.
#define ISSIGNKEY | ( | x | ) | ( ((SignTSVector*)(x))->flag & SIGNKEY ) |
Definition at line 75 of file tsgistidx.c.
Definition at line 51 of file tsgistidx.c.
#define SIGLEN_DEFAULT (31 * 4) |
Definition at line 35 of file tsgistidx.c.
#define SIGLEN_MAX GISTMaxIndexKeySize |
Definition at line 36 of file tsgistidx.c.
#define SIGLENBIT | ( | siglen | ) | ((siglen) * BITS_PER_BYTE) |
Definition at line 41 of file tsgistidx.c.
#define SIGNKEY 0x02 |
Definition at line 71 of file tsgistidx.c.
Definition at line 578 of file tsgistidx.c.
typedef char* BITVECP |
Definition at line 43 of file tsgistidx.c.
|
static |
Definition at line 276 of file tsgistidx.c.
References TS_MAYBE, TS_NO, and val.
Referenced by gtsvector_consistent().
|
static |
Definition at line 308 of file tsgistidx.c.
References GETBIT, GETSIGLEN, GETSIGN, HASHVAL, sort-test::key, TS_MAYBE, TS_NO, and val.
Referenced by gtsvector_consistent().
|
static |
Definition at line 586 of file tsgistidx.c.
References a, b, and pg_cmp_s32().
Referenced by gtsvector_picksplit().
|
static |
Definition at line 126 of file tsgistidx.c.
References a, b, and pg_cmp_s32().
Referenced by gtsvector_compress().
|
static |
Definition at line 567 of file tsgistidx.c.
References CACHESIGN::allistrue, GETSIGN, ISALLTRUE, ISARRKEY, sort-test::key, makesign(), and CACHESIGN::sign.
Referenced by gtsvector_picksplit().
|
static |
Definition at line 147 of file tsgistidx.c.
References ALLISTRUE, CALCGTSIZE, flag(), GETSIGN, len, palloc(), res, SET_VARSIZE, sign, SIGNKEY, and size.
Referenced by gtsvector_compress(), gtsvector_picksplit(), and gtsvector_union().
Datum gtsvector_compress | ( | PG_FUNCTION_ARGS | ) |
Definition at line 163 of file tsgistidx.c.
References ALLISTRUE, ARRKEY, ARRPTR, CALCGTSIZE, COMP_LEGACY_CRC32, compareint(), DatumGetPointer(), DatumGetTSVector(), FIN_LEGACY_CRC32, GET_SIGLEN, GETARR, GETSIGN, gistentryinit, gtsvector_alloc(), i, INIT_LEGACY_CRC32, ISALLTRUE, ISSIGNKEY, GISTENTRY::key, GISTENTRY::leafkey, WordEntry::len, len, LOOPBYTE, makesign(), GISTENTRY::offset, GISTENTRY::page, palloc(), PG_GETARG_POINTER, PG_RETURN_POINTER, PointerGetDatum(), WordEntry::pos, qsort, qunique(), GISTENTRY::rel, repalloc(), res, SET_VARSIZE, sign, SIGNKEY, STRPTR, TOAST_INDEX_TARGET, val, and VARSIZE.
Datum gtsvector_consistent | ( | PG_FUNCTION_ARGS | ) |
Definition at line 325 of file tsgistidx.c.
References CHKVAL::arrb, CHKVAL::arre, ARRNELEM, checkcondition_arr(), checkcondition_bit(), DatumGetPointer(), GETARR, GETQUERY, ISALLTRUE, ISSIGNKEY, GISTENTRY::key, sort-test::key, PG_GETARG_POINTER, PG_GETARG_TSQUERY, PG_RETURN_BOOL, TSQueryData::size, TS_EXEC_PHRASE_NO_POS, and TS_execute().
Referenced by gtsvector_consistent_oldsig().
Datum gtsvector_consistent_oldsig | ( | PG_FUNCTION_ARGS | ) |
Datum gtsvector_decompress | ( | PG_FUNCTION_ARGS | ) |
Definition at line 243 of file tsgistidx.c.
References DatumGetPointer(), gistentryinit, GISTENTRY::key, sort-test::key, GISTENTRY::offset, GISTENTRY::page, palloc(), PG_DETOAST_DATUM, PG_GETARG_POINTER, PG_RETURN_POINTER, PointerGetDatum(), and GISTENTRY::rel.
Datum gtsvector_options | ( | PG_FUNCTION_ARGS | ) |
Definition at line 800 of file tsgistidx.c.
References add_local_int_reloption(), init_local_reloptions(), PG_GETARG_POINTER, PG_RETURN_VOID, SIGLEN_DEFAULT, and SIGLEN_MAX.
Datum gtsvector_penalty | ( | PG_FUNCTION_ARGS | ) |
Definition at line 524 of file tsgistidx.c.
References DatumGetPointer(), GET_SIGLEN, GETSIGN, hemdist(), hemdistsign(), ISALLTRUE, ISARRKEY, GISTENTRY::key, makesign(), newval, palloc(), pfree(), PG_GETARG_POINTER, PG_RETURN_POINTER, SIGLENBIT, sign, and sizebitvec().
Datum gtsvector_picksplit | ( | PG_FUNCTION_ARGS | ) |
Definition at line 612 of file tsgistidx.c.
References ALLISTRUE, comparecost(), SPLITCOST::cost, fillcache(), FirstOffsetNumber, GET_SIGLEN, GETENTRY, GETSIGN, gtsvector_alloc(), hemdistcache(), hemdistsign(), i, ISALLTRUE, j, LOOPBYTE, GistEntryVector::n, OffsetNumberNext, palloc(), PG_GETARG_POINTER, PG_RETURN_POINTER, PointerGetDatum(), SPLITCOST::pos, qsort, SIGLENBIT, CACHESIGN::sign, sign, SIGNKEY, sizebitvec(), GIST_SPLITVEC::spl_ldatum, GIST_SPLITVEC::spl_left, GIST_SPLITVEC::spl_nleft, GIST_SPLITVEC::spl_nright, GIST_SPLITVEC::spl_rdatum, GIST_SPLITVEC::spl_right, and WISH_F.
Datum gtsvector_same | ( | PG_FUNCTION_ARGS | ) |
Definition at line 420 of file tsgistidx.c.
References a, ARRNELEM, Assert, b, GET_SIGLEN, GETARR, GETSIGLEN, GETSIGN, i, ISALLTRUE, ISSIGNKEY, LOOPBYTE, PG_GETARG_POINTER, and PG_RETURN_POINTER.
Datum gtsvector_union | ( | PG_FUNCTION_ARGS | ) |
Definition at line 393 of file tsgistidx.c.
References ALLISTRUE, CALCGTSIZE, SignTSVector::flag, GET_SIGLEN, GETENTRY, GETSIGN, gtsvector_alloc(), i, GistEntryVector::n, PG_GETARG_POINTER, PG_RETURN_POINTER, SET_VARSIZE, SIGNKEY, size, unionkey(), and VARSIZE.
Datum gtsvectorin | ( | PG_FUNCTION_ARGS | ) |
Definition at line 89 of file tsgistidx.c.
References ereport, errcode(), errmsg(), ERROR, and PG_RETURN_VOID.
Datum gtsvectorout | ( | PG_FUNCTION_ARGS | ) |
Definition at line 100 of file tsgistidx.c.
References ARRNELEM, GETSIGLEN, GETSIGN, ISALLTRUE, ISARRKEY, sort-test::key, PG_DETOAST_DATUM, PG_FREE_IF_COPY, PG_GETARG_DATUM, PG_RETURN_POINTER, psprintf(), pstrdup(), SIGLENBIT, and sizebitvec().
|
static |
Definition at line 503 of file tsgistidx.c.
References a, Assert, b, GETSIGLEN, GETSIGN, hemdistsign(), ISALLTRUE, SIGLENBIT, and sizebitvec().
Referenced by gtsvector_penalty().
Definition at line 596 of file tsgistidx.c.
References a, b, hemdistsign(), SIGLENBIT, and sizebitvec().
Referenced by gtsvector_picksplit().
Definition at line 487 of file tsgistidx.c.
References a, b, i, LOOPBYTE, and pg_number_of_ones.
Referenced by gtsvector_penalty(), gtsvector_picksplit(), hemdist(), and hemdistcache().
|
static |
Definition at line 135 of file tsgistidx.c.
References a, ARRNELEM, GETARR, HASH, len, MemSet, and sign.
Referenced by fillcache(), gtsvector_compress(), and gtsvector_penalty().
Definition at line 481 of file tsgistidx.c.
References pg_popcount(), and sign.
Referenced by gtsvector_penalty(), gtsvector_picksplit(), gtsvectorout(), hemdist(), and hemdistcache().