Datum gts_penalty(PG_FUNCTION_ARGS) { TSKEY *origentry = (TSKEY *) DatumGetPointer(((GISTENTRY *) PG_GETARG_POINTER(0))->key); TSKEY *newentry = (TSKEY *) DatumGetPointer(((GISTENTRY *) PG_GETARG_POINTER(1))->key); float *result = (float *) PG_GETARG_POINTER(2); Interval *intr; intr = DatumGetIntervalP(DirectFunctionCall2( timestamp_mi, TimestampGetDatumFast(newentry->upper), TimestampGetDatumFast(origentry->upper))); /* see interval_larger */ *result = Max(intr->time + intr->month * (30.0 * 86400), 0); pfree(intr); intr = DatumGetIntervalP(DirectFunctionCall2( timestamp_mi, TimestampGetDatumFast(origentry->lower), TimestampGetDatumFast(newentry->lower))); /* see interval_larger */ *result += Max(intr->time + intr->month * (30.0 * 86400), 0); pfree(intr); PG_RETURN_POINTER(result); }
static bool gbt_tslt(const void *a, const void *b) { const Timestamp *aa = (const Timestamp *) a; const Timestamp *bb = (const Timestamp *) b; return DatumGetBool(DirectFunctionCall2(timestamp_lt, TimestampGetDatumFast(*aa), TimestampGetDatumFast(*bb))); }
static bool gbt_tsle(const void *a, const void *b, FmgrInfo *flinfo) { const Timestamp *aa = (const Timestamp *) a; const Timestamp *bb = (const Timestamp *) b; return DatumGetBool(DirectFunctionCall2(timestamp_le, TimestampGetDatumFast(*aa), TimestampGetDatumFast(*bb))); }
static int tskey_cmp(const void *a, const void *b) { return DatumGetInt32( DirectFunctionCall2( timestamp_cmp, TimestampGetDatumFast(((TSKEY *) (((RIX *) a)->r))->lower), TimestampGetDatumFast(((TSKEY *) (((RIX *) b)->r))->lower) ) ); }
static int gbt_tskey_cmp(const void *a, const void *b) { tsKEY *ia = (tsKEY *) (((const Nsrt *) a)->t); tsKEY *ib = (tsKEY *) (((const Nsrt *) b)->t); int res; res = DatumGetInt32(DirectFunctionCall2(timestamp_cmp, TimestampGetDatumFast(ia->lower), TimestampGetDatumFast(ib->lower))); if (res == 0) return DatumGetInt32(DirectFunctionCall2(timestamp_cmp, TimestampGetDatumFast(ia->upper), TimestampGetDatumFast(ib->upper))); return res; }
static float8 gbt_ts_dist(const void *a, const void *b) { const Timestamp *aa = (const Timestamp *) a; const Timestamp *bb = (const Timestamp *) b; Interval *i; if (TIMESTAMP_NOT_FINITE(*aa) || TIMESTAMP_NOT_FINITE(*bb)) return get_float8_infinity(); i = DatumGetIntervalP(DirectFunctionCall2(timestamp_mi, TimestampGetDatumFast(*aa), TimestampGetDatumFast(*bb))); return (float8) Abs(INTERVAL_TO_SEC(i)); }