diff --git a/contrib/btree_gist/btree_gist.c b/contrib/btree_gist/btree_gist.c index 924062ed034fe9609249d0c0c155ccd46ed2c80d..c4eb8522130f4c290d1a5930ad3ba7f2e749dcf4 100644 --- a/contrib/btree_gist/btree_gist.c +++ b/contrib/btree_gist/btree_gist.c @@ -86,6 +86,8 @@ Datum gts_same(PG_FUNCTION_ARGS); static void gts_binary_union(Datum *r1, char *r2); static int tskey_cmp(const void *a, const void *b); +#define TimestampGetDatumFast(X) Float8GetDatumFast(X) + /* define for comparison */ #define TSGE( ts1, ts2 ) (DatumGetBool(DirectFunctionCall2( \ timestamp_ge, \ @@ -297,23 +299,11 @@ gts_compress(PG_FUNCTION_ARGS) if (entry->leafkey) { TSKEY *r = (TSKEY *) palloc(sizeof(TSKEY)); - retval = palloc(sizeof(GISTENTRY)); - if (entry->key) - { - r->lower = r->upper = *(Timestamp *) (entry->key); - - gistentryinit(*retval, PointerGetDatum(r), - entry->rel, entry->page, - entry->offset, sizeof(TSKEY), FALSE); - - } - else - { - gistentryinit(*retval, PointerGetDatum(NULL), - entry->rel, entry->page, - entry->offset, 0, FALSE); - } + r->lower = r->upper = *(Timestamp *) (entry->key); + gistentryinit(*retval, PointerGetDatum(r), + entry->rel, entry->page, + entry->offset, sizeof(TSKEY), FALSE); } else retval = entry; @@ -408,8 +398,8 @@ gts_penalty(PG_FUNCTION_ARGS) intr = DatumGetIntervalP(DirectFunctionCall2( timestamp_mi, - TimestampGetDatum(newentry->upper), - TimestampGetDatum(origentry->upper))); + TimestampGetDatumFast(newentry->upper), + TimestampGetDatumFast(origentry->upper))); /* see interval_larger */ *result = Max(intr->time + intr->month * (30.0 * 86400), 0); @@ -417,8 +407,8 @@ gts_penalty(PG_FUNCTION_ARGS) intr = DatumGetIntervalP(DirectFunctionCall2( timestamp_mi, - TimestampGetDatum(origentry->lower), - TimestampGetDatum(newentry->lower))); + TimestampGetDatumFast(origentry->lower), + TimestampGetDatumFast(newentry->lower))); /* see interval_larger */ *result += Max(intr->time + intr->month * (30.0 * 86400), 0); @@ -483,8 +473,8 @@ tskey_cmp(const void *a, const void *b) return DatumGetInt32( DirectFunctionCall2( timestamp_cmp, - TimestampGetDatum(((TSKEY *) (((RIX *) a)->r))->lower), - TimestampGetDatum(((TSKEY *) (((RIX *) b)->r))->lower) + TimestampGetDatumFast(((TSKEY *) (((RIX *) a)->r))->lower), + TimestampGetDatumFast(((TSKEY *) (((RIX *) b)->r))->lower) ) ); }