18 #define LTREE_LABEL_MAX_CHARS 255 26 #define LEVEL_HDRSIZE (offsetof(ltree_level,name)) 27 #define LEVEL_NEXT(x) ( (ltree_level*)( ((char*)(x)) + MAXALIGN(((ltree_level*)(x))->len + LEVEL_HDRSIZE) ) ) 37 #define LTREE_HDRSIZE MAXALIGN( offsetof(ltree, data) ) 38 #define LTREE_FIRST(x) ( (ltree_level*)( ((char*)(x))+LTREE_HDRSIZE ) ) 39 #define LTREE_MAX_LEVELS PG_UINT16_MAX 58 #define LVAR_HDRSIZE MAXALIGN(offsetof(lquery_variant, name)) 59 #define LVAR_NEXT(x) ( (lquery_variant*)( ((char*)(x)) + MAXALIGN(((lquery_variant*)(x))->len) + LVAR_HDRSIZE ) ) 61 #define LVAR_ANYEND 0x01 62 #define LVAR_INCASE 0x02 63 #define LVAR_SUBLEXEME 0x04 86 #define LQL_HDRSIZE MAXALIGN( offsetof(lquery_level,variants) ) 87 #define LQL_NEXT(x) ( (lquery_level*)( ((char*)(x)) + MAXALIGN(((lquery_level*)(x))->totallen) ) ) 88 #define LQL_FIRST(x) ( (lquery_variant*)( ((char*)(x))+LQL_HDRSIZE ) ) 91 #define LQL_COUNT 0x20 94 #define FLG_CANLOOKSIGN(x) ( ( (x) & ( LQL_NOT | LVAR_ANYEND | LVAR_SUBLEXEME ) ) == 0 ) 96 #define FLG_CANLOOKSIGN(x) ( ( (x) & ( LQL_NOT | LVAR_ANYEND | LVAR_SUBLEXEME | LVAR_INCASE ) ) == 0 ) 98 #define LQL_CANLOOKSIGN(x) FLG_CANLOOKSIGN( ((lquery_level*)(x))->flag ) 110 #define LQUERY_HDRSIZE MAXALIGN( offsetof(lquery, data) ) 111 #define LQUERY_FIRST(x) ( (lquery_level*)( ((char*)(x))+LQUERY_HDRSIZE ) ) 112 #define LQUERY_MAX_LEVELS PG_UINT16_MAX 114 #define LQUERY_HASNOT 0x01 116 #define ISALNUM(x) ( t_isalpha(x) || t_isdigit(x) || ( pg_mblen(x) == 1 && t_iseq((x), '_') ) ) 146 #define HDRSIZEQT MAXALIGN(VARHDRSZ + sizeof(int32)) 147 #define COMPUTESIZE(size,lenofoperand) ( HDRSIZEQT + (size) * sizeof(ITEM) + (lenofoperand) ) 148 #define LTXTQUERY_TOO_BIG(size,lenofoperand) \ 149 ((size) > (MaxAllocSize - HDRSIZEQT - (lenofoperand)) / sizeof(ITEM)) 150 #define GETQUERY(x) (ITEM*)( (char*)(x)+HDRSIZEQT ) 151 #define GETOPERAND(x) ( (char*)GETQUERY(x) + ((ltxtquery*)x)->size * sizeof(ITEM) ) 153 #define ISOPERATOR(x) ( (x)=='!' || (x)=='&' || (x)=='|' || (x)=='(' || (x)==')' ) 192 bool calcnot,
bool (*chkcond) (
void *checkval,
ITEM *
val));
197 int (*cmpptr) (
const char *,
const char *,
size_t),
bool anyend);
202 #define DatumGetLtreeP(X) ((ltree *) PG_DETOAST_DATUM(X)) 203 #define DatumGetLtreePCopy(X) ((ltree *) PG_DETOAST_DATUM_COPY(X)) 204 #define PG_GETARG_LTREE_P(n) DatumGetLtreeP(PG_GETARG_DATUM(n)) 205 #define PG_GETARG_LTREE_P_COPY(n) DatumGetLtreePCopy(PG_GETARG_DATUM(n)) 207 #define DatumGetLqueryP(X) ((lquery *) PG_DETOAST_DATUM(X)) 208 #define DatumGetLqueryPCopy(X) ((lquery *) PG_DETOAST_DATUM_COPY(X)) 209 #define PG_GETARG_LQUERY_P(n) DatumGetLqueryP(PG_GETARG_DATUM(n)) 210 #define PG_GETARG_LQUERY_P_COPY(n) DatumGetLqueryPCopy(PG_GETARG_DATUM(n)) 212 #define DatumGetLtxtqueryP(X) ((ltxtquery *) PG_DETOAST_DATUM(X)) 213 #define DatumGetLtxtqueryPCopy(X) ((ltxtquery *) PG_DETOAST_DATUM_COPY(X)) 214 #define PG_GETARG_LTXTQUERY_P(n) DatumGetLtxtqueryP(PG_GETARG_DATUM(n)) 215 #define PG_GETARG_LTXTQUERY_P_COPY(n) DatumGetLtxtqueryPCopy(PG_GETARG_DATUM(n)) 219 #define SIGLEN_MAX GISTMaxIndexKeySize 220 #define SIGLEN_DEFAULT (2 * sizeof(int32)) 222 #define SIGLEN (sizeof(int32) * SIGLENINT) 223 #define SIGLENBIT(siglen) ((siglen) * BITBYTE) 227 #define LOOPBYTE(siglen) \ 228 for(i = 0; i < (siglen); i++) 230 #define GETBYTE(x,i) ( *( (BITVECP)(x) + (int)( (i) / BITBYTE ) ) ) 231 #define GETBITBYTE(x,i) ( ((unsigned char)(x)) >> i & 0x01 ) 232 #define CLRBIT(x,i) GETBYTE(x,i) &= ~( 0x01 << ( (i) % BITBYTE ) ) 233 #define SETBIT(x,i) GETBYTE(x,i) |= ( 0x01 << ( (i) % BITBYTE ) ) 234 #define GETBIT(x,i) ( (GETBYTE(x,i) >> ( (i) % BITBYTE )) & 0x01 ) 236 #define HASHVAL(val, siglen) (((unsigned int)(val)) % SIGLENBIT(siglen)) 237 #define HASH(sign, val, siglen) SETBIT((sign), HASHVAL(val, siglen)) 257 #define LTG_ONENODE 0x01 258 #define LTG_ALLTRUE 0x02 259 #define LTG_NORIGHT 0x04 261 #define LTG_HDRSIZE MAXALIGN(VARHDRSZ + sizeof(uint32)) 262 #define LTG_SIGN(x) ( (BITVECP)( ((char*)(x))+LTG_HDRSIZE ) ) 263 #define LTG_NODE(x) ( (ltree*)( ((char*)(x))+LTG_HDRSIZE ) ) 264 #define LTG_ISONENODE(x) ( ((ltree_gist*)(x))->flag & LTG_ONENODE ) 265 #define LTG_ISALLTRUE(x) ( ((ltree_gist*)(x))->flag & LTG_ALLTRUE ) 266 #define LTG_ISNORIGHT(x) ( ((ltree_gist*)(x))->flag & LTG_NORIGHT ) 267 #define LTG_LNODE(x, siglen) ( (ltree*)( ( ((char*)(x))+LTG_HDRSIZE ) + ( LTG_ISALLTRUE(x) ? 0 : (siglen) ) ) ) 268 #define LTG_RENODE(x, siglen) ( (ltree*)( ((char*)LTG_LNODE(x, siglen)) + VARSIZE(LTG_LNODE(x, siglen))) ) 269 #define LTG_RNODE(x, siglen) ( LTG_ISNORIGHT(x) ? LTG_LNODE(x, siglen) : LTG_RENODE(x, siglen) ) 271 #define LTG_GETLNODE(x, siglen) ( LTG_ISONENODE(x) ? LTG_NODE(x) : LTG_LNODE(x, siglen) ) 272 #define LTG_GETRNODE(x, siglen) ( LTG_ISONENODE(x) ? LTG_NODE(x) : LTG_RNODE(x, siglen) ) 279 #define LTREE_ASIGLEN_DEFAULT (7 * sizeof(int32)) 280 #define LTREE_ASIGLEN_MAX GISTMaxIndexKeySize 281 #define LTREE_GET_ASIGLEN() (PG_HAS_OPCLASS_OPTIONS() ? \ 282 ((LtreeGistOptions *) PG_GET_OPCLASS_OPTIONS())->siglen : \ 283 LTREE_ASIGLEN_DEFAULT) 284 #define ASIGLENBIT(siglen) ((siglen) * BITBYTE) 286 #define ALOOPBYTE(siglen) \ 287 for (i = 0; i < (siglen); i++) 289 #define AHASHVAL(val, siglen) (((unsigned int)(val)) % ASIGLENBIT(siglen)) 290 #define AHASH(sign, val, siglen) SETBIT((sign), AHASHVAL(val, siglen))
Datum _ltxtq_exec(PG_FUNCTION_ARGS)
Datum _ltxtq_rexec(PG_FUNCTION_ARGS)
Datum _ltree_isparent(PG_FUNCTION_ARGS)
Datum _lt_q_rregex(PG_FUNCTION_ARGS)
Datum lt_q_regex(PG_FUNCTION_ARGS)
bool inner_isparent(const ltree *c, const ltree *p)
Datum ltq_rregex(PG_FUNCTION_ARGS)
Datum ltree_risparent(PG_FUNCTION_ARGS)
#define FLEXIBLE_ARRAY_MEMBER
bool compare_subnode(ltree_level *t, char *q, int len, int(*cmpptr)(const char *, const char *, size_t), bool anyend)
int ltree_strncasecmp(const char *a, const char *b, size_t s)
Datum ltree_in(PG_FUNCTION_ARGS)
Datum _ltq_regex(PG_FUNCTION_ARGS)
bool ltree_execute(ITEM *curitem, void *checkval, bool calcnot, bool(*chkcond)(void *checkval, ITEM *val))
Datum ltree_textadd(PG_FUNCTION_ARGS)
ltree * lca_inner(ltree **a, int len)
Datum ltq_regex(PG_FUNCTION_ARGS)
Datum _lt_q_regex(PG_FUNCTION_ARGS)
ltree_gist * ltree_gist_alloc(bool isalltrue, BITVECP sign, int siglen, ltree *left, ltree *right)
Datum _ltree_risparent(PG_FUNCTION_ARGS)
Datum ltree_isparent(PG_FUNCTION_ARGS)
Datum ltree_addltree(PG_FUNCTION_ARGS)
Datum ltxtq_exec(PG_FUNCTION_ARGS)
Datum _ltq_rregex(PG_FUNCTION_ARGS)
Datum lt_q_rregex(PG_FUNCTION_ARGS)
int ltree_compare(const ltree *a, const ltree *b)
Datum ltxtq_rexec(PG_FUNCTION_ARGS)
Datum ltree_addtext(PG_FUNCTION_ARGS)