Exemplo n.º 1
0
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);
}
Exemplo n.º 2
0
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)));
}
Exemplo n.º 3
0
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)));
}
Exemplo n.º 4
0
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)
											 )
		);
}
Exemplo n.º 5
0
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;
}
Exemplo n.º 6
0
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));
}