22#define DatumGetSegP(X) ((SEG *) DatumGetPointer(X))
23#define PG_GETARG_SEG_P(n) DatumGetSegP(PG_GETARG_DATUM(n))
96static int restore(
char *result,
float val,
int n);
112 if (
seg_yyparse(result, fcinfo->context, scanner) != 0)
113 seg_yyerror(result, fcinfo->context, scanner,
"bogus input");
127 p = result = (
char *)
palloc(40);
141 if (seg->
l_ext !=
'-')
148 if (seg->
u_ext !=
'-')
237 numranges = entryvec->
n;
239 *sizep =
sizeof(
SEG);
241 for (
i = 1;
i < numranges;
i++)
285 *result = tmp1 - tmp2;
289 fprintf(stderr,
"\t%g\n", *result);
335 fprintf(stderr,
"picksplit\n");
339 maxoff = entryvec->
n - 1;
346 for (
i = 1;
i <= maxoff;
i++)
352 sort_items[
i - 1].
data = seg;
358 firstright = maxoff / 2;
371 memcpy(seg_l, sort_items[0].
data,
sizeof(
SEG));
372 *left++ = sort_items[0].
index;
374 for (
i = 1;
i < firstright;
i++)
381 *left++ = sort_items[
i].
index;
389 memcpy(seg_r, sort_items[firstright].
data,
sizeof(
SEG));
390 *right++ = sort_items[firstright].
index;
392 for (
i = firstright + 1;
i < maxoff;
i++)
399 *right++ = sort_items[
i].
index;
423 fprintf(stderr,
"same: %s\n", (*result ?
"TRUE" :
"FALSE"));
437#ifdef GIST_QUERY_DEBUG
438 fprintf(stderr,
"leaf_consistent, %d\n", strategy);
481#ifdef GIST_QUERY_DEBUG
482 fprintf(stderr,
"internal_consistent, %d\n", strategy);
531 *sizep =
sizeof(
SEG);
578 ((
b->upper >=
a->upper) && (
b->lower <=
a->upper)));
635 if (
a->upper >
b->upper)
649 if (
a->lower <
b->lower)
675 if (
a->upper <
b->upper)
689 if (
a->lower >
b->lower)
708 if (
a == (
SEG *) NULL ||
a->upper <=
a->lower)
711 *
size = fabsf(
a->upper -
a->lower);
735 if (
a->lower <
b->lower)
737 if (
a->lower >
b->lower)
747 if (
a->l_ext !=
b->l_ext)
766 if (
a->l_sigd <
b->l_sigd)
768 if (
a->l_sigd >
b->l_sigd)
776 if (
a->l_ext !=
b->l_ext)
783 elog(
ERROR,
"bogus lower boundary types %d %d",
784 (
int)
a->l_ext, (
int)
b->l_ext);
792 if (
a->upper <
b->upper)
794 if (
a->upper >
b->upper)
804 if (
a->u_ext !=
b->u_ext)
824 if (
a->u_sigd <
b->u_sigd)
826 if (
a->u_sigd >
b->u_sigd)
834 if (
a->u_ext !=
b->u_ext)
841 elog(
ERROR,
"bogus upper boundary types %d %d",
842 (
int)
a->u_ext, (
int)
b->u_ext);
918 '0',
'0',
'0',
'0',
'0',
919 '0',
'0',
'0',
'0',
'0',
920 '0',
'0',
'0',
'0',
'0',
921 '0',
'0',
'0',
'0',
'0',
922 '0',
'0',
'0',
'0',
'\0'
947 p = strchr(result,
'e');
951 return strlen(result);
967 for (p = result +
sign,
i = 10, dp = 0; *p !=
'e'; p++,
i++)
981 if (dp - 10 + exp >= n)
988 exp = dp - 10 + exp - n;
995 for (
i = 23;
i > dp;
i--)
1012 strcpy(result, &
buf[9]);
1015 strcpy(result, &
buf[10]);
1020 for (
i = 23;
i > dp;
i--)
1027 strcpy(result, &
buf[9]);
1030 strcpy(result, &
buf[10]);
1041 strcpy(result, &
buf[dp - 2]);
1044 strcpy(result, &
buf[dp - 1]);
1053 return strlen(result);
1074 for (
c = *p; (
c ==
'0' ||
c ==
'+' ||
c ==
'-') &&
c != 0;
c = *(++p));
1077 for (
c = *p; (
c ==
'0' ||
c ==
'.') &&
c != 0;
c = *(++p))
1084 for (
c = *p, n = 0;
c != 0;
c = *(++p))
1086 if (!((
c >=
'0' &&
c <=
'9') || (
c ==
'.')))
#define fprintf(file, fmt, msg)
#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)
static bool DatumGetBool(Datum X)
static Datum PointerGetDatum(const void *X)
static int32 DatumGetInt32(Datum 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)
static int restore(char *result, float val, int n)
Datum seg_inter(PG_FUNCTION_ARGS)
Datum seg_left(PG_FUNCTION_ARGS)
static void rt_seg_size(SEG *a, float *size)
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)
void seg_yyerror(SEG *result, struct Node *escontext, yyscan_t yyscanner, const char *message)
void seg_scanner_init(const char *str, yyscan_t *yyscannerp)
int seg_yyparse(SEG *result, struct Node *escontext, yyscan_t yyscanner)
void seg_scanner_finish(yyscan_t yyscanner)
static pg_noinline void Size size
#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]