From fbf12681ab1f92b647818478641bd329d9e2810b Mon Sep 17 00:00:00 2001
From: "Thomas G. Lockhart" <lockhart@fourpalms.org>
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 7843dee6493..5f76ffc8fa3 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