543 GISTENTRY *entry_in = (GISTENTRY*)PG_GETARG_POINTER(0);
544 GISTENTRY *entry_out = NULL;
545 char gidxmem[GIDX_MAX_SIZE];
546 GIDX *bbox_out = (GIDX*)gidxmem;
550 POSTGIS_DEBUG(4,
"[GIST] 'compress' function called");
556 if ( ! entry_in->leafkey )
558 POSTGIS_DEBUG(4,
"[GIST] non-leafkey entry, returning input unaltered");
559 PG_RETURN_POINTER(entry_in);
562 POSTGIS_DEBUG(4,
"[GIST] processing leafkey input");
563 entry_out = palloc(
sizeof(GISTENTRY));
569 if ( DatumGetPointer(entry_in->key) == NULL )
571 POSTGIS_DEBUG(4,
"[GIST] leafkey is null");
572 gistentryinit(*entry_out, (Datum) 0, entry_in->rel,
573 entry_in->page, entry_in->offset,
FALSE);
574 POSTGIS_DEBUG(4,
"[GIST] returning copy of input");
575 PG_RETURN_POINTER(entry_out);
579 result = gserialized_datum_get_gidx_p(entry_in->key, bbox_out);
585 POSTGIS_DEBUG(4,
"[GIST] empty geometry!");
587 gistentryinit(*entry_out, PointerGetDatum(
gidx_copy(bbox_out)),
588 entry_in->rel, entry_in->page,
589 entry_in->offset,
FALSE);
590 PG_RETURN_POINTER(entry_out);
593 POSTGIS_DEBUGF(4,
"[GIST] got entry_in->key: %s", gidx_to_string(bbox_out));
597 for ( i = 0; i < GIDX_NDIMS(bbox_out); i++ )
599 if ( !
isfinite(GIDX_GET_MAX(bbox_out, i)) ||
600 !
isfinite(GIDX_GET_MIN(bbox_out, i)) )
603 gistentryinit(*entry_out,
605 entry_in->rel, entry_in->page,
606 entry_in->offset,
FALSE);
607 PG_RETURN_POINTER(entry_out);
615 gistentryinit(*entry_out, PointerGetDatum(
gidx_copy(bbox_out)),
616 entry_in->rel, entry_in->page, entry_in->offset,
FALSE);
619 POSTGIS_DEBUG(4,
"[GIST] 'compress' function complete");
620 PG_RETURN_POINTER(entry_out);
static GIDX * gidx_copy(GIDX *b)
static void gidx_set_unknown(GIDX *a)
static void gidx_validate(GIDX *b)