22#define DatumGetSegP(X) ((SEG *) DatumGetPointer(X))
23#define PG_GETARG_SEG_P(n) DatumGetSegP(PG_GETARG_DATUM(n))
99static int restore(
char *result,
float val,
int n);
115 if (
seg_yyparse(result, fcinfo->context, scanner) != 0)
116 seg_yyerror(result, fcinfo->context, scanner,
"bogus input");
130 p = result = (
char *)
palloc(40);
144 if (seg->
l_ext !=
'-')
151 if (seg->
u_ext !=
'-')
240 numranges = entryvec->
n;
242 *sizep =
sizeof(
SEG);
244 for (
i = 1;
i < numranges;
i++)
288 *result = tmp1 - tmp2;
292 fprintf(stderr,
"\t%g\n", *result);
338 fprintf(stderr,
"picksplit\n");
342 maxoff = entryvec->
n - 1;
349 for (
i = 1;
i <= maxoff;
i++)
355 sort_items[
i - 1].
data = seg;
361 firstright = maxoff / 2;
374 memcpy(seg_l, sort_items[0].
data,
sizeof(
SEG));
375 *left++ = sort_items[0].
index;
377 for (
i = 1;
i < firstright;
i++)
384 *left++ = sort_items[
i].
index;
392 memcpy(seg_r, sort_items[firstright].
data,
sizeof(
SEG));
393 *right++ = sort_items[firstright].
index;
395 for (
i = firstright + 1;
i < maxoff;
i++)
402 *right++ = sort_items[
i].
index;
426 fprintf(stderr,
"same: %s\n", (*result ?
"TRUE" :
"FALSE"));
440#ifdef GIST_QUERY_DEBUG
441 fprintf(stderr,
"leaf_consistent, %d\n", strategy);
484#ifdef GIST_QUERY_DEBUG
485 fprintf(stderr,
"internal_consistent, %d\n", strategy);
534 *sizep =
sizeof(
SEG);
581 ((
b->upper >=
a->upper) && (
b->lower <=
a->upper)));
638 if (
a->upper >
b->upper)
652 if (
a->lower <
b->lower)
678 if (
a->upper <
b->upper)
692 if (
a->lower >
b->lower)
711 if (
a == (
SEG *) NULL ||
a->upper <=
a->lower)
714 *size = fabsf(
a->upper -
a->lower);
738 if (
a->lower <
b->lower)
740 if (
a->lower >
b->lower)
750 if (
a->l_ext !=
b->l_ext)
769 if (
a->l_sigd <
b->l_sigd)
771 if (
a->l_sigd >
b->l_sigd)
779 if (
a->l_ext !=
b->l_ext)
786 elog(
ERROR,
"bogus lower boundary types %d %d",
787 (
int)
a->l_ext, (
int)
b->l_ext);
795 if (
a->upper <
b->upper)
797 if (
a->upper >
b->upper)
807 if (
a->u_ext !=
b->u_ext)
827 if (
a->u_sigd <
b->u_sigd)
829 if (
a->u_sigd >
b->u_sigd)
837 if (
a->u_ext !=
b->u_ext)
844 elog(
ERROR,
"bogus upper boundary types %d %d",
845 (
int)
a->u_ext, (
int)
b->u_ext);
921 '0',
'0',
'0',
'0',
'0',
922 '0',
'0',
'0',
'0',
'0',
923 '0',
'0',
'0',
'0',
'0',
924 '0',
'0',
'0',
'0',
'0',
925 '0',
'0',
'0',
'0',
'\0'
950 p = strchr(result,
'e');
954 return strlen(result);
970 for (p = result +
sign,
i = 10, dp = 0; *p !=
'e'; p++,
i++)
984 if (dp - 10 + exp >= n)
991 exp = dp - 10 + exp - n;
998 for (
i = 23;
i > dp;
i--)
1015 strcpy(result, &
buf[9]);
1018 strcpy(result, &
buf[10]);
1023 for (
i = 23;
i > dp;
i--)
1030 strcpy(result, &
buf[9]);
1033 strcpy(result, &
buf[10]);
1044 strcpy(result, &
buf[dp - 2]);
1047 strcpy(result, &
buf[dp - 1]);
1056 return strlen(result);
1077 for (
c = *p; (
c ==
'0' ||
c ==
'+' ||
c ==
'-') &&
c != 0;
c = *(++p));
1080 for (
c = *p; (
c ==
'0' ||
c ==
'.') &&
c != 0;
c = *(++p))
1087 for (
c = *p, n = 0;
c != 0;
c = *(++p))
1089 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)
PG_MODULE_MAGIC_EXT(.name="seg",.version=PG_VERSION)
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)
#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]