913{
914 GISTENTRY *entry_in = (GISTENTRY *)PG_GETARG_POINTER(0);
915 GISTENTRY *entry_out = NULL;
916 char gidxmem[GIDX_MAX_SIZE];
917 GIDX *bbox_out = (GIDX *)gidxmem;
919 uint32_t i;
920
921 POSTGIS_DEBUG(4, "[GIST] 'compress' function called");
922
923
924
925
926
927 if (!entry_in->leafkey)
928 {
929 POSTGIS_DEBUG(4, "[GIST] non-leafkey entry, returning input unaltered");
930 PG_RETURN_POINTER(entry_in);
931 }
932
933 POSTGIS_DEBUG(4, "[GIST] processing leafkey input");
934 entry_out = palloc(sizeof(GISTENTRY));
935
936
937
938
939
940 if (!DatumGetPointer(entry_in->key))
941 {
942 POSTGIS_DEBUG(4, "[GIST] leafkey is null");
943 gistentryinit(*entry_out, (Datum)0, entry_in->rel, entry_in->page, entry_in->offset, false);
944 POSTGIS_DEBUG(4, "[GIST] returning copy of input");
945 PG_RETURN_POINTER(entry_out);
946 }
947
948
949 result = gserialized_datum_get_gidx_p(entry_in->key, bbox_out);
950
951
952
954 {
955 POSTGIS_DEBUG(4, "[GIST] empty geometry!");
957 gistentryinit(*entry_out,
959 entry_in->rel,
960 entry_in->page,
961 entry_in->offset,
962 false);
963 PG_RETURN_POINTER(entry_out);
964 }
965
966 POSTGIS_DEBUGF(4, "[GIST] got entry_in->key: %s", gidx_to_string(bbox_out));
967
968
969
970
971 for (i = 0; i < GIDX_NDIMS(bbox_out); i++)
972 {
973 if (!isfinite(GIDX_GET_MAX(bbox_out, i)) || !isfinite(GIDX_GET_MIN(bbox_out, i)))
974 {
976 gistentryinit(*entry_out,
978 entry_in->rel,
979 entry_in->page,
980 entry_in->offset,
981 false);
982 PG_RETURN_POINTER(entry_out);
983 }
984 }
985
986
988
989
990 gistentryinit(
991 *entry_out, PointerGetDatum(
gidx_copy(bbox_out)), entry_in->rel, entry_in->page, entry_in->offset,
false);
992
993
994 POSTGIS_DEBUG(4, "[GIST] 'compress' function complete");
995 PG_RETURN_POINTER(entry_out);
996}
char result[OUT_DOUBLE_BUFFER_SIZE]
void gidx_set_unknown(GIDX *a)
GIDX * gidx_copy(GIDX *b)
void gidx_validate(GIDX *b)