13 #define GETENTRY(vec,pos) ((ArrayType *) DatumGetPointer((vec)->vector[(pos)].key)) 23 #define MAXNUMELTS (Min((MaxAllocSize / sizeof(Datum)),((MaxAllocSize - ARR_OVERHEAD_NONULLS(1)) / sizeof(int)))/2) 131 for (i = 0; i < entryvec->
n; i++)
142 for (i = 0; i < entryvec->
n; i++)
183 elog(
NOTICE,
"input array is too big (%d maximum allowed, %d current), use gist__intbig_ops opclass instead",
207 if ((len =
ARRNELEMS(r)) >= 2 * num_ranges)
220 lenr = len - num_ranges;
226 for (j = i = len - 1; i > 0 && lenr > 0; i--, j--)
231 while (i > 0 && lenr > 0 && dr[i - 1] == r_start - 1)
232 --r_start, --
i, --lenr;
234 dr[2 * j + 1] = r_end;
237 for (; i >= 0; i--, j--)
238 dr[2 * j] = dr[2 * j + 1] = dr[i];
245 memmove((
void *) &dr[0], (
void *) &dr[2 * j], 2 * (len - j) *
sizeof(
int32));
253 while (len > num_ranges * 2)
256 for (i = 2; i < len; i += 2)
257 if (min > ((int64) dr[i] - (int64) dr[i - 1]))
259 min = ((int64) dr[i] - (int64) dr[i - 1]);
262 memmove((
void *) &dr[cand - 1], (
void *) &dr[cand + 1], (len - cand - 1) *
sizeof(
int32));
272 (
errmsg(
"data is too sparse, recreate index using gist__intbig_ops opclass instead")));
317 if (lenin < 2 * num_ranges)
334 (
errmsg(
"compressed array is too big, recreate index using gist__intbig_ops opclass instead")));
339 for (i = 0; i < lenin; i += 2)
340 for (j = din[i]; j <= din[i + 1]; j++)
341 if ((!i) || *(dr - 1) != j)
370 *result = tmp1 - tmp2;
470 maxoff = entryvec->
n - 2;
479 datum_alpha =
GETENTRY(entryvec, i);
490 size_waste = size_union - size_inter;
499 if (size_waste > waste || firsttime)
513 if (seed_1 == 0 || seed_2 == 0)
519 datum_alpha =
GETENTRY(entryvec, seed_1);
522 datum_beta =
GETENTRY(entryvec, seed_2);
534 costvector[i - 1].
pos =
i;
535 datum_alpha =
GETENTRY(entryvec, i);
542 costvector[i - 1].
cost =
Abs((size_alpha - size_l) - (size_beta - size_r));
559 for (j = 0; j < maxoff; j++)
561 i = costvector[j].pos;
575 else if (i == seed_2)
583 datum_alpha =
GETENTRY(entryvec, i);
625 "number of ranges for compression",
#define PG_RETURN_POINTER(x)
void init_local_reloptions(local_relopts *opts, Size relopt_struct_size)
#define RTOldContainsStrategyNumber
#define RTOldContainedByStrategyNumber
void rt__int_size(ArrayType *a, float *size)
#define PG_GETARG_ARRAYTYPE_P_COPY(n)
#define PointerGetDatum(X)
Datum g_int_penalty(PG_FUNCTION_ARGS)
Datum g_int_consistent(PG_FUNCTION_ARGS)
Datum g_int_compress(PG_FUNCTION_ARGS)
int internal_size(int *a, int len)
ArrayType * inner_int_inter(ArrayType *a, ArrayType *b)
#define GETENTRY(vec, pos)
#define RTContainedByStrategyNumber
#define PG_GETARG_POINTER(n)
#define G_INT_NUMRANGES_MAX
Datum g_int_same(PG_FUNCTION_ARGS)
#define G_INT_NUMRANGES_DEFAULT
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 QSORT(a, direction)
Datum g_int_union(PG_FUNCTION_ARGS)
#define PG_GETARG_ARRAYTYPE_P(n)
void pfree(void *pointer)
ArrayType * copy_intArrayType(ArrayType *a)
Datum g_int_options(PG_FUNCTION_ARGS)
bool inner_int_overlap(ArrayType *a, ArrayType *b)
ArrayType * resize_intArrayType(ArrayType *a, int num)
PG_FUNCTION_INFO_V1(g_int_consistent)
#define FirstOffsetNumber
#define RTSameStrategyNumber
#define DirectFunctionCall3(func, arg1, arg2, arg3)
bool inner_int_contains(ArrayType *a, ArrayType *b)
ArrayType * new_intArrayType(int num)
ArrayType * _int_unique(ArrayType *a)
#define PG_RETURN_BOOL(x)
#define DatumGetArrayTypePCopy(X)
static int comparecost(const void *a, const void *b)
Datum g_int_decompress(PG_FUNCTION_ARGS)
#define ereport(elevel,...)
bool execconsistent(QUERYTYPE *query, ArrayType *array, bool calcnot)
ArrayType * inner_int_union(ArrayType *a, ArrayType *b)
#define gistentryinit(e, k, r, pg, o, l)
#define BooleanSearchStrategy
#define OffsetNumberNext(offsetNumber)
#define RTContainsStrategyNumber
#define PG_GETARG_UINT16(n)
#define DatumGetPointer(X)
#define G_INT_GET_NUMRANGES()
int errmsg(const char *fmt,...)
#define RTOverlapStrategyNumber
#define qsort(a, b, c, d)
Datum g_int_picksplit(PG_FUNCTION_ARGS)
#define offsetof(type, field)
#define DatumGetArrayTypeP(X)