21 #define DatumGetSegP(X) ((SEG *) DatumGetPointer(X))
22 #define PG_GETARG_SEG_P(n) DatumGetSegP(PG_GETARG_DATUM(n))
125 p = result = (
char *)
palloc(40);
139 if (seg->
l_ext !=
'-')
146 if (seg->
u_ext !=
'-')
235 numranges = entryvec->
n;
237 *sizep =
sizeof(
SEG);
239 for (
i = 1;
i < numranges;
i++)
283 *result = tmp1 - tmp2;
287 fprintf(stderr,
"\t%g\n", *result);
333 fprintf(stderr,
"picksplit\n");
337 maxoff = entryvec->
n - 1;
344 for (
i = 1;
i <= maxoff;
i++)
350 sort_items[
i - 1].
data = seg;
356 firstright = maxoff / 2;
369 memcpy(seg_l, sort_items[0].
data,
sizeof(
SEG));
370 *left++ = sort_items[0].
index;
372 for (
i = 1;
i < firstright;
i++)
379 *left++ = sort_items[
i].
index;
387 memcpy(seg_r, sort_items[firstright].
data,
sizeof(
SEG));
388 *right++ = sort_items[firstright].
index;
390 for (
i = firstright + 1;
i < maxoff;
i++)
397 *right++ = sort_items[
i].
index;
421 fprintf(stderr,
"same: %s\n", (*result ?
"TRUE" :
"FALSE"));
435 #ifdef GIST_QUERY_DEBUG
436 fprintf(stderr,
"leaf_consistent, %d\n", strategy);
479 #ifdef GIST_QUERY_DEBUG
480 fprintf(stderr,
"internal_consistent, %d\n", strategy);
529 *sizep =
sizeof(
SEG);
576 ((
b->upper >=
a->upper) && (
b->lower <=
a->upper)));
633 if (
a->upper >
b->upper)
647 if (
a->lower <
b->lower)
673 if (
a->upper <
b->upper)
687 if (
a->lower >
b->lower)
706 if (
a == (
SEG *) NULL ||
a->upper <=
a->lower)
709 *size = (float)
Abs(
a->upper -
a->lower);
733 if (
a->lower <
b->lower)
735 if (
a->lower >
b->lower)
745 if (
a->l_ext !=
b->l_ext)
764 if (
a->l_sigd <
b->l_sigd)
766 if (
a->l_sigd >
b->l_sigd)
774 if (
a->l_ext !=
b->l_ext)
781 elog(
ERROR,
"bogus lower boundary types %d %d",
782 (
int)
a->l_ext, (
int)
b->l_ext);
790 if (
a->upper <
b->upper)
792 if (
a->upper >
b->upper)
802 if (
a->u_ext !=
b->u_ext)
822 if (
a->u_sigd <
b->u_sigd)
824 if (
a->u_sigd >
b->u_sigd)
832 if (
a->u_ext !=
b->u_ext)
839 elog(
ERROR,
"bogus upper boundary types %d %d",
840 (
int)
a->u_ext, (
int)
b->u_ext);
916 '0',
'0',
'0',
'0',
'0',
917 '0',
'0',
'0',
'0',
'0',
918 '0',
'0',
'0',
'0',
'0',
919 '0',
'0',
'0',
'0',
'0',
920 '0',
'0',
'0',
'0',
'\0'
941 p = strchr(result,
'e');
945 return strlen(result);
961 for (p = result +
sign,
i = 10, dp = 0; *p !=
'e'; p++,
i++)
975 if (dp - 10 + exp >= n)
982 exp = dp - 10 + exp - n;
989 for (
i = 23;
i > dp;
i--)
1006 strcpy(result, &
buf[9]);
1009 strcpy(result, &
buf[10]);
1014 for (
i = 23;
i > dp;
i--)
1021 strcpy(result, &
buf[9]);
1024 strcpy(result, &
buf[10]);
1035 strcpy(result, &
buf[dp - 2]);
1038 strcpy(result, &
buf[dp - 1]);
1047 return strlen(result);
1068 for (
c = *p; (
c ==
'0' ||
c ==
'+' ||
c ==
'-') &&
c != 0;
c = *(++p));
1071 for (
c = *p; (
c ==
'0' ||
c ==
'.') &&
c != 0;
c = *(++p))
1078 for (
c = *p, n = 0;
c != 0;
c = *(++p))
1080 if (!((
c >=
'0' &&
c <=
'9') || (
c ==
'.')))
#define DirectFunctionCall2(func, arg1, arg2)
#define PG_GETARG_POINTER(n)
#define PG_RETURN_CSTRING(x)
#define PG_GETARG_DATUM(n)
#define PG_GETARG_CSTRING(n)
#define PG_GETARG_UINT16(n)
#define PG_RETURN_INT32(x)
#define PG_RETURN_DATUM(x)
#define PG_RETURN_POINTER(x)
#define PG_RETURN_FLOAT4(x)
#define PG_RETURN_BOOL(x)
#define qsort(a, b, c, d)
#define PointerGetDatum(X)
static int cmp(const chr *x, const chr *y, size_t len)
Datum seg_le(PG_FUNCTION_ARGS)
Datum gseg_decompress(PG_FUNCTION_ARGS)
Datum seg_gt(PG_FUNCTION_ARGS)
static Datum gseg_leaf_consistent(Datum key, Datum query, StrategyNumber strategy)
Datum gseg_penalty(PG_FUNCTION_ARGS)
Datum gseg_union(PG_FUNCTION_ARGS)
Datum gseg_consistent(PG_FUNCTION_ARGS)
Datum seg_center(PG_FUNCTION_ARGS)
Datum seg_over_right(PG_FUNCTION_ARGS)
Datum seg_contained(PG_FUNCTION_ARGS)
Datum seg_overlap(PG_FUNCTION_ARGS)
Datum seg_right(PG_FUNCTION_ARGS)
#define PG_GETARG_SEG_P(n)
Datum gseg_same(PG_FUNCTION_ARGS)
static int gseg_picksplit_item_cmp(const void *a, const void *b)
Datum seg_lt(PG_FUNCTION_ARGS)
Datum seg_size(PG_FUNCTION_ARGS)
Datum seg_union(PG_FUNCTION_ARGS)
int significant_digits(const char *s)
Datum seg_upper(PG_FUNCTION_ARGS)
static Datum gseg_internal_consistent(Datum key, Datum query, StrategyNumber strategy)
Datum seg_ge(PG_FUNCTION_ARGS)
Datum seg_lower(PG_FUNCTION_ARGS)
Datum gseg_picksplit(PG_FUNCTION_ARGS)
Datum seg_in(PG_FUNCTION_ARGS)
Datum seg_cmp(PG_FUNCTION_ARGS)
Datum seg_inter(PG_FUNCTION_ARGS)
Datum seg_left(PG_FUNCTION_ARGS)
static void rt_seg_size(SEG *a, float *size)
static int restore(char *s, float val, int n)
Datum seg_out(PG_FUNCTION_ARGS)
PG_FUNCTION_INFO_V1(seg_in)
static Datum gseg_binary_union(Datum r1, Datum r2, int *sizep)
Datum seg_over_left(PG_FUNCTION_ARGS)
Datum gseg_compress(PG_FUNCTION_ARGS)
Datum seg_contains(PG_FUNCTION_ARGS)
Datum seg_same(PG_FUNCTION_ARGS)
Datum seg_different(PG_FUNCTION_ARGS)
int seg_yyparse(SEG *result)
void seg_yyerror(SEG *result, const char *message) pg_attribute_noreturn()
void seg_scanner_init(const char *str)
void seg_scanner_finish(void)
#define RTOldContainsStrategyNumber
#define RTOverlapStrategyNumber
#define RTLeftStrategyNumber
#define RTOverRightStrategyNumber
#define RTRightStrategyNumber
#define RTSameStrategyNumber
#define RTContainsStrategyNumber
#define RTOverLeftStrategyNumber
#define RTOldContainedByStrategyNumber
#define RTContainedByStrategyNumber
GISTENTRY vector[FLEXIBLE_ARRAY_MEMBER]