From fbf12681ab1f92b647818478641bd329d9e2810b Mon Sep 17 00:00:00 2001 From: "Thomas G. Lockhart" Date: Sat, 20 Sep 1997 16:17:45 +0000 Subject: [PATCH] Include tinterval comparison functions for span of interval. --- src/backend/utils/adt/date.c | 211 ++++++++++++++++++++++++++++++++++- 1 file changed, 206 insertions(+), 5 deletions(-) diff --git a/src/backend/utils/adt/date.c b/src/backend/utils/adt/date.c index 7843dee649..5f76ffc8fa 100644 --- a/src/backend/utils/adt/date.c +++ b/src/backend/utils/adt/date.c @@ -9,7 +9,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/adt/date.c,v 1.18 1997/09/08 21:48:21 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/adt/date.c,v 1.19 1997/09/20 16:17:45 thomas Exp $ * * NOTES * This code is actually (almost) unused. @@ -565,16 +565,217 @@ reltimege(RelativeTime t1, RelativeTime t2) /* - * intervaleq - returns 1, iff interval i1 is equal to interval i2 + * intervalsame - returns 1, iff interval i1 is same as interval i2 + * Check begin and end time. */ bool -intervaleq(TimeInterval i1, TimeInterval i2) +intervalsame(TimeInterval i1, TimeInterval i2) { if (i1->status == T_INTERVAL_INVAL || i2->status == T_INTERVAL_INVAL) - return (0); /* invalid interval */ + return (FALSE); /* invalid interval */ return (abstimeeq(i1->data[0], i2->data[0]) && abstimeeq(i1->data[1], i2->data[1])); -} +} /* intervalsame() */ + + +/* + * intervaleq - returns 1, iff interval i1 is equal to interval i2 + * Check length of intervals. + */ +bool +intervaleq(TimeInterval i1, TimeInterval i2) +{ + AbsoluteTime t10, t11, t20, t21; + + if (i1->status == T_INTERVAL_INVAL || i2->status == T_INTERVAL_INVAL) + return (FALSE); /* invalid interval */ + + t10 = i1->data[0]; + t11 = i1->data[1]; + t20 = i2->data[0]; + t21 = i2->data[1]; + + if ((t10 == INVALID_ABSTIME) || (t20 == INVALID_ABSTIME) + || (t20 == INVALID_ABSTIME) || (t21 == INVALID_ABSTIME)) + return (FALSE); + + if (t10 == CURRENT_ABSTIME) + t10 = GetCurrentTransactionStartTime(); + if (t11 == CURRENT_ABSTIME) + t11 = GetCurrentTransactionStartTime(); + if (t20 == CURRENT_ABSTIME) + t20 = GetCurrentTransactionStartTime(); + if (t21 == CURRENT_ABSTIME) + t21 = GetCurrentTransactionStartTime(); + + return ((t11-t10) == (t21-t20)); +} /* intervaleq() */ + +/* + * intervalne - returns 1, iff interval i1 is not equal to interval i2 + * Check length of intervals. + */ +bool +intervalne(TimeInterval i1, TimeInterval i2) +{ + AbsoluteTime t10, t11, t20, t21; + + if (i1->status == T_INTERVAL_INVAL || i2->status == T_INTERVAL_INVAL) + return (FALSE); /* invalid interval */ + + t10 = i1->data[0]; + t11 = i1->data[1]; + t20 = i2->data[0]; + t21 = i2->data[1]; + + if ((t10 == INVALID_ABSTIME) || (t20 == INVALID_ABSTIME) + || (t20 == INVALID_ABSTIME) || (t21 == INVALID_ABSTIME)) + return (FALSE); + + if (t10 == CURRENT_ABSTIME) + t10 = GetCurrentTransactionStartTime(); + if (t11 == CURRENT_ABSTIME) + t11 = GetCurrentTransactionStartTime(); + if (t20 == CURRENT_ABSTIME) + t20 = GetCurrentTransactionStartTime(); + if (t21 == CURRENT_ABSTIME) + t21 = GetCurrentTransactionStartTime(); + + return ((t11-t10) != (t21-t20)); +} /* intervalne() */ + +/* + * intervallt - returns TRUE, iff interval i1 is less than interval i2 + * Check length of intervals. + */ +bool +intervallt(TimeInterval i1, TimeInterval i2) +{ + AbsoluteTime t10, t11, t20, t21; + + if (i1->status == T_INTERVAL_INVAL || i2->status == T_INTERVAL_INVAL) + return (FALSE); /* invalid interval */ + + t10 = i1->data[0]; + t11 = i1->data[1]; + t20 = i2->data[0]; + t21 = i2->data[1]; + + if ((t10 == INVALID_ABSTIME) || (t20 == INVALID_ABSTIME) + || (t20 == INVALID_ABSTIME) || (t21 == INVALID_ABSTIME)) + return (FALSE); + + if (t10 == CURRENT_ABSTIME) + t10 = GetCurrentTransactionStartTime(); + if (t11 == CURRENT_ABSTIME) + t11 = GetCurrentTransactionStartTime(); + if (t20 == CURRENT_ABSTIME) + t20 = GetCurrentTransactionStartTime(); + if (t21 == CURRENT_ABSTIME) + t21 = GetCurrentTransactionStartTime(); + + return ((t11-t10) < (t21-t20)); +} /* intervallt() */ + +/* + * intervalle - returns TRUE, iff interval i1 is less than or equal to interval i2 + * Check length of intervals. + */ +bool +intervalle(TimeInterval i1, TimeInterval i2) +{ + AbsoluteTime t10, t11, t20, t21; + + if (i1->status == T_INTERVAL_INVAL || i2->status == T_INTERVAL_INVAL) + return (FALSE); /* invalid interval */ + + t10 = i1->data[0]; + t11 = i1->data[1]; + t20 = i2->data[0]; + t21 = i2->data[1]; + + if ((t10 == INVALID_ABSTIME) || (t20 == INVALID_ABSTIME) + || (t20 == INVALID_ABSTIME) || (t21 == INVALID_ABSTIME)) + return (FALSE); + + if (t10 == CURRENT_ABSTIME) + t10 = GetCurrentTransactionStartTime(); + if (t11 == CURRENT_ABSTIME) + t11 = GetCurrentTransactionStartTime(); + if (t20 == CURRENT_ABSTIME) + t20 = GetCurrentTransactionStartTime(); + if (t21 == CURRENT_ABSTIME) + t21 = GetCurrentTransactionStartTime(); + + return ((t11-t10) <= (t21-t20)); +} /* intervalle() */ + +/* + * intervalgt - returns TRUE, iff interval i1 is less than interval i2 + * Check length of intervals. + */ +bool +intervalgt(TimeInterval i1, TimeInterval i2) +{ + AbsoluteTime t10, t11, t20, t21; + + if (i1->status == T_INTERVAL_INVAL || i2->status == T_INTERVAL_INVAL) + return (FALSE); /* invalid interval */ + + t10 = i1->data[0]; + t11 = i1->data[1]; + t20 = i2->data[0]; + t21 = i2->data[1]; + + if ((t10 == INVALID_ABSTIME) || (t20 == INVALID_ABSTIME) + || (t20 == INVALID_ABSTIME) || (t21 == INVALID_ABSTIME)) + return (FALSE); + + if (t10 == CURRENT_ABSTIME) + t10 = GetCurrentTransactionStartTime(); + if (t11 == CURRENT_ABSTIME) + t11 = GetCurrentTransactionStartTime(); + if (t20 == CURRENT_ABSTIME) + t20 = GetCurrentTransactionStartTime(); + if (t21 == CURRENT_ABSTIME) + t21 = GetCurrentTransactionStartTime(); + + return ((t11-t10) > (t21-t20)); +} /* intervalgt() */ + +/* + * intervalge - returns TRUE, iff interval i1 is less than or equal to interval i2 + * Check length of intervals. + */ +bool +intervalge(TimeInterval i1, TimeInterval i2) +{ + AbsoluteTime t10, t11, t20, t21; + + if (i1->status == T_INTERVAL_INVAL || i2->status == T_INTERVAL_INVAL) + return (FALSE); /* invalid interval */ + + t10 = i1->data[0]; + t11 = i1->data[1]; + t20 = i2->data[0]; + t21 = i2->data[1]; + + if ((t10 == INVALID_ABSTIME) || (t20 == INVALID_ABSTIME) + || (t20 == INVALID_ABSTIME) || (t21 == INVALID_ABSTIME)) + return (FALSE); + + if (t10 == CURRENT_ABSTIME) + t10 = GetCurrentTransactionStartTime(); + if (t11 == CURRENT_ABSTIME) + t11 = GetCurrentTransactionStartTime(); + if (t20 == CURRENT_ABSTIME) + t20 = GetCurrentTransactionStartTime(); + if (t21 == CURRENT_ABSTIME) + t21 = GetCurrentTransactionStartTime(); + + return ((t11-t10) >= (t21-t20)); +} /* intervalge() */ + /* * intervalleneq - returns 1, iff length of interval i is equal to -- GitLab