20#define GET_SIGLEN() (PG_HAS_OPCLASS_OPTIONS() ? \
21 ((TrgmGistOptions *) PG_GET_OPCLASS_OPTIONS())->siglen : \
40#define GETENTRY(vec,pos) ((TRGM *) DatumGetPointer((vec)->vector[(pos)].key))
61 errmsg(
"cannot accept a value of type %s",
"gtrgm")));
71 errmsg(
"cannot display a value of type %s",
"gtrgm")));
107 for (k = 0; k <
len; k++)
141 if ((
sign[
i] & 0xff) != 0xff)
187 for (k = 0; k <
len; k++)
249 elog(
ERROR,
"cannot handle ~~* with case-sensitive trigrams");
258 elog(
ERROR,
"cannot handle ~* with case-sensitive trigrams");
263 &graph, fcinfo->flinfo->fn_mcxt);
272 elog(
ERROR,
"unrecognized strategy number: %d", strategy);
303 fcinfo->flinfo->fn_extra =
newcache;
346 elog(
ERROR,
"cannot handle ~~* with case-sensitive trigrams");
375 for (k = 0; k <
len; k++)
388 elog(
ERROR,
"cannot handle ~* with case-sensitive trigrams");
427 check = (
bool *)
palloc(
len *
sizeof(
bool));
428 for (k = 0; k <
len; k++)
444 elog(
ERROR,
"unrecognized strategy number: %d", strategy);
467 char *cache = (
char *) fcinfo->flinfo->fn_extra;
489 fcinfo->flinfo->fn_extra =
newcache;
527 elog(
ERROR,
"unrecognized strategy number: %d", strategy);
703 char *cache = (
char *) fcinfo->flinfo->fn_extra;
728 fcinfo->flinfo->fn_extra =
newcache;
763#define WISH_F(a,b,c) (double)( -(double)(((a)-(b))*((a)-(b))*((a)-(b)))*(c) )
790 else if (
b->allistrue)
879 for (k = 0; k < maxoff; k++)
968 "signature length in bytes",
#define MemSet(start, val, len)
int errcode(int sqlerrcode)
int errmsg(const char *fmt,...)
#define ereport(elevel,...)
#define palloc_object(type)
#define palloc_array(type, count)
#define PG_RETURN_FLOAT8(x)
#define DatumGetTextPP(X)
#define PG_GETARG_POINTER(n)
#define PG_FUNCTION_INFO_V1(funcname)
#define PG_GETARG_UINT16(n)
#define PG_RETURN_POINTER(x)
#define PG_GET_COLLATION()
#define PG_RETURN_BOOL(x)
#define PG_GETARG_TEXT_P(n)
#define gistentryinit(e, k, r, pg, o, l)
#define HASHVAL(val, siglen)
#define CALCGTSIZE(flag, siglen)
#define SIGLENBIT(siglen)
#define HASH(sign, val, siglen)
void * MemoryContextAlloc(MemoryContext context, Size size)
void pfree(void *pointer)
#define OffsetNumberNext(offsetNumber)
#define FirstOffsetNumber
PGDLLIMPORT const uint8 pg_number_of_ones[256]
static uint64 pg_popcount(const char *buf, int bytes)
#define qsort(a, b, c, d)
static Datum PointerGetDatum(const void *X)
static Pointer DatumGetPointer(Datum X)
void init_local_reloptions(local_relopts *relopts, Size relopt_struct_size)
void add_local_int_reloption(local_relopts *relopts, const char *name, const char *desc, int default_val, int min_val, int max_val, int offset)
#define RegExpICaseStrategyNumber
#define WordSimilarityStrategyNumber
TRGM * generate_trgm(char *str, int slen)
#define DistanceStrategyNumber
#define StrictWordSimilarityStrategyNumber
#define StrictWordDistanceStrategyNumber
int(* CMPTRGM)(const void *a, const void *b)
bool * trgm_presence_map(TRGM *query, TRGM *key)
double index_strategy_get_limit(StrategyNumber strategy)
TRGM * createTrgmNFA(text *text_re, Oid collation, TrgmPackedGraph **graph, MemoryContext rcontext)
#define SimilarityStrategyNumber
bool trigramsMatchGraph(TrgmPackedGraph *graph, bool *check)
bool trgm_contained_by(TRGM *trg1, TRGM *trg2)
#define ILikeStrategyNumber
TRGM * generate_wildcard_trgm(const char *str, int slen)
float4 cnt_sml(TRGM *trg1, TRGM *trg2, bool inexact)
#define LikeStrategyNumber
#define EqualStrategyNumber
#define RegExpStrategyNumber
#define WordDistanceStrategyNumber
Datum gtrgm_out(PG_FUNCTION_ARGS)
static int hemdistcache(CACHESIGN *a, CACHESIGN *b, int siglen)
static void fillcache(CACHESIGN *item, TRGM *key, BITVECP sign, int siglen)
Datum gtrgm_same(PG_FUNCTION_ARGS)
static int32 unionkey(BITVECP sbase, TRGM *add, int siglen)
Datum gtrgm_distance(PG_FUNCTION_ARGS)
static int32 sizebitvec(BITVECP sign, int siglen)
Datum gtrgm_in(PG_FUNCTION_ARGS)
Datum gtrgm_options(PG_FUNCTION_ARGS)
static int hemdistsign(BITVECP a, BITVECP b, int siglen)
#define GETENTRY(vec, pos)
Datum gtrgm_compress(PG_FUNCTION_ARGS)
Datum gtrgm_picksplit(PG_FUNCTION_ARGS)
Datum gtrgm_decompress(PG_FUNCTION_ARGS)
static TRGM * gtrgm_alloc(bool isalltrue, int siglen, BITVECP sign)
Datum gtrgm_union(PG_FUNCTION_ARGS)
Datum gtrgm_penalty(PG_FUNCTION_ARGS)
static void makesign(BITVECP sign, TRGM *a, int siglen)
Datum gtrgm_consistent(PG_FUNCTION_ARGS)
static int32 cnt_sml_sign_common(TRGM *qtrg, BITVECP sign, int siglen)
static int hemdist(TRGM *a, TRGM *b, int siglen)
static int comparecost(const void *a, const void *b)
static Size VARSIZE_ANY_EXHDR(const void *PTR)
static Size VARSIZE(const void *PTR)
static char * VARDATA(const void *PTR)
static char * VARDATA_ANY(const void *PTR)
static void SET_VARSIZE(void *PTR, Size len)