@@ -86,6 +86,8 @@ Datum gts_same(PG_FUNCTION_ARGS);
86
86
static void gts_binary_union (Datum * r1 , char * r2 );
87
87
static int tskey_cmp (const void * a , const void * b );
88
88
89
+ #define TimestampGetDatumFast (X ) Float8GetDatumFast(X)
90
+
89
91
/* define for comparison */
90
92
#define TSGE ( ts1 , ts2 ) (DatumGetBool(DirectFunctionCall2( \
91
93
timestamp_ge, \
@@ -297,23 +299,11 @@ gts_compress(PG_FUNCTION_ARGS)
297
299
if (entry -> leafkey )
298
300
{
299
301
TSKEY * r = (TSKEY * ) palloc (sizeof (TSKEY ));
300
-
301
302
retval = palloc (sizeof (GISTENTRY ));
302
- if (entry -> key )
303
- {
304
- r -> lower = r -> upper = * (Timestamp * ) (entry -> key );
305
-
306
- gistentryinit (* retval , PointerGetDatum (r ),
307
- entry -> rel , entry -> page ,
308
- entry -> offset , sizeof (TSKEY ), FALSE);
309
-
310
- }
311
- else
312
- {
313
- gistentryinit (* retval , PointerGetDatum (NULL ),
314
- entry -> rel , entry -> page ,
315
- entry -> offset , 0 , FALSE);
316
- }
303
+ r -> lower = r -> upper = * (Timestamp * ) (entry -> key );
304
+ gistentryinit (* retval , PointerGetDatum (r ),
305
+ entry -> rel , entry -> page ,
306
+ entry -> offset , sizeof (TSKEY ), FALSE);
317
307
}
318
308
else
319
309
retval = entry ;
@@ -408,17 +398,17 @@ gts_penalty(PG_FUNCTION_ARGS)
408
398
409
399
intr = DatumGetIntervalP (DirectFunctionCall2 (
410
400
timestamp_mi ,
411
- TimestampGetDatum (newentry -> upper ),
412
- TimestampGetDatum (origentry -> upper )));
401
+ TimestampGetDatumFast (newentry -> upper ),
402
+ TimestampGetDatumFast (origentry -> upper )));
413
403
414
404
/* see interval_larger */
415
405
* result = Max (intr -> time + intr -> month * (30.0 * 86400 ), 0 );
416
406
pfree (intr );
417
407
418
408
intr = DatumGetIntervalP (DirectFunctionCall2 (
419
409
timestamp_mi ,
420
- TimestampGetDatum (origentry -> lower ),
421
- TimestampGetDatum (newentry -> lower )));
410
+ TimestampGetDatumFast (origentry -> lower ),
411
+ TimestampGetDatumFast (newentry -> lower )));
422
412
423
413
/* see interval_larger */
424
414
* result += Max (intr -> time + intr -> month * (30.0 * 86400 ), 0 );
@@ -483,8 +473,8 @@ tskey_cmp(const void *a, const void *b)
483
473
return DatumGetInt32 (
484
474
DirectFunctionCall2 (
485
475
timestamp_cmp ,
486
- TimestampGetDatum (((TSKEY * ) (((RIX * ) a )-> r ))-> lower ),
487
- TimestampGetDatum (((TSKEY * ) (((RIX * ) b )-> r ))-> lower )
476
+ TimestampGetDatumFast (((TSKEY * ) (((RIX * ) a )-> r ))-> lower ),
477
+ TimestampGetDatumFast (((TSKEY * ) (((RIX * ) b )-> r ))-> lower )
488
478
)
489
479
);
490
480
}
0 commit comments