58 #define INETSTRAT_OVERLAPS RTOverlapStrategyNumber
59 #define INETSTRAT_EQ RTEqualStrategyNumber
60 #define INETSTRAT_NE RTNotEqualStrategyNumber
61 #define INETSTRAT_LT RTLessStrategyNumber
62 #define INETSTRAT_LE RTLessEqualStrategyNumber
63 #define INETSTRAT_GT RTGreaterStrategyNumber
64 #define INETSTRAT_GE RTGreaterEqualStrategyNumber
65 #define INETSTRAT_SUB RTSubStrategyNumber
66 #define INETSTRAT_SUBEQ RTSubEqualStrategyNumber
67 #define INETSTRAT_SUP RTSuperStrategyNumber
68 #define INETSTRAT_SUPEQ RTSuperEqualStrategyNumber
87 #define DatumGetInetKeyP(X) ((GistInetKey *) DatumGetPointer(X))
88 #define InetKeyPGetDatum(X) PointerGetDatum(X)
95 #define gk_ip_family(gkptr) ((gkptr)->family)
96 #define gk_ip_minbits(gkptr) ((gkptr)->minbits)
97 #define gk_ip_commonbits(gkptr) ((gkptr)->commonbits)
98 #define gk_ip_addr(gkptr) ((gkptr)->ipaddr)
99 #define ip_family_maxbits(fam) ((fam) == PGSQL_AF_INET6 ? 128 : 32)
102 #define gk_ip_addrsize(gkptr) \
103 (gk_ip_family(gkptr) == PGSQL_AF_INET6 ? 16 : 4)
104 #define gk_ip_maxbits(gkptr) \
105 ip_family_maxbits(gk_ip_family(gkptr))
106 #define SET_GK_VARSIZE(dst) \
107 SET_VARSIZE_SHORT(dst, offsetof(GistInetKey, ipaddr) + gk_ip_addrsize(dst))
326 elog(
ERROR,
"unknown strategy for inet GiST");
370 for (
i = m + 1;
i <= n;
i++)
392 if (minfamily != maxfamily)
393 minbits = commonbits = 0;
395 *minfamily_p = minfamily;
396 *maxfamily_p = maxfamily;
397 *minbits_p = minbits;
398 *commonbits_p = commonbits;
432 for (
i = 1;
i < noffsets;
i++)
454 if (minfamily != maxfamily)
455 minbits = commonbits = 0;
457 *minfamily_p = minfamily;
458 *maxfamily_p = maxfamily;
459 *minbits_p = minbits;
460 *commonbits_p = commonbits;
485 memcpy(
gk_ip_addr(result), addr, (commonbits + 7) / 8);
488 if (commonbits % 8 != 0)
489 gk_ip_addr(result)[commonbits / 8] &= ~(0xFF >> (commonbits % 8));
518 &minfamily, &maxfamily,
519 &minbits, &commonbits);
522 if (minfamily != maxfamily)
636 *penalty = 1.0f / commonbits;
681 maxoff = entryvec->
n - 1;
695 &minfamily, &maxfamily,
696 &minbits, &commonbits);
698 if (minfamily != maxfamily)
724 while (commonbits < maxbits)
727 int bitbyte = commonbits / 8;
728 int bitmask = 0x80 >> (commonbits % 8);
736 if ((addr[bitbyte] & bitmask) == 0)
747 if (commonbits >= maxbits)
770 &minfamily, &maxfamily,
771 &minbits, &commonbits);
772 if (minfamily != maxfamily)
780 &minfamily, &maxfamily,
781 &minbits, &commonbits);
782 if (minfamily != maxfamily)
#define PG_GETARG_POINTER(n)
#define PG_GETARG_DATUM(n)
#define PG_GETARG_UINT16(n)
#define PG_RETURN_POINTER(x)
#define PG_RETURN_BOOL(x)
#define gistentryinit(e, k, r, pg, o, l)
Assert(fmt[strlen(fmt) - 1] !='\n')
void * palloc0(Size size)
int bitncommon(const unsigned char *l, const unsigned char *r, int n)
int bitncmp(const unsigned char *l, const unsigned char *r, int n)
#define gk_ip_commonbits(gkptr)
static void calc_inet_union_params(GISTENTRY *ent, int m, int n, int *minfamily_p, int *maxfamily_p, int *minbits_p, int *commonbits_p)
Datum inet_gist_fetch(PG_FUNCTION_ARGS)
#define DatumGetInetKeyP(X)
static void calc_inet_union_params_indexed(GISTENTRY *ent, OffsetNumber *offsets, int noffsets, int *minfamily_p, int *maxfamily_p, int *minbits_p, int *commonbits_p)
#define gk_ip_maxbits(gkptr)
Datum inet_gist_compress(PG_FUNCTION_ARGS)
#define gk_ip_family(gkptr)
#define gk_ip_addr(gkptr)
#define gk_ip_addrsize(gkptr)
struct GistInetKey GistInetKey
#define SET_GK_VARSIZE(dst)
Datum inet_gist_consistent(PG_FUNCTION_ARGS)
#define ip_family_maxbits(fam)
Datum inet_gist_union(PG_FUNCTION_ARGS)
Datum inet_gist_picksplit(PG_FUNCTION_ARGS)
static GistInetKey * build_inet_union_key(int family, int minbits, int commonbits, unsigned char *addr)
Datum inet_gist_penalty(PG_FUNCTION_ARGS)
Datum inet_gist_same(PG_FUNCTION_ARGS)
#define INETSTRAT_OVERLAPS
#define gk_ip_minbits(gkptr)
#define OffsetNumberNext(offsetNumber)
#define FirstOffsetNumber
#define DatumGetPointer(X)
#define PointerGetDatum(X)
GISTENTRY vector[FLEXIBLE_ARRAY_MEMBER]
#define SET_INET_VARSIZE(dst)
#define PG_GETARG_INET_PP(n)
#define ip_family(inetptr)
#define ip_addrsize(inetptr)
#define DatumGetInetPP(X)