mirror of
				https://github.com/postgres/postgres.git
				synced 2025-10-31 10:30:33 +03:00 
			
		
		
		
	Include tinterval comparison functions for span of interval.
This commit is contained in:
		| @@ -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. | ||||
| @@ -564,17 +564,218 @@ reltimege(RelativeTime t1, RelativeTime t2) | ||||
| } | ||||
|  | ||||
|  | ||||
| /* | ||||
|  *		intervalsame	- returns 1, iff interval i1 is same as interval i2 | ||||
|  *		Check begin and end time. | ||||
|  */ | ||||
| bool | ||||
| intervalsame(TimeInterval i1, TimeInterval i2) | ||||
| { | ||||
| 	if (i1->status == T_INTERVAL_INVAL || i2->status == T_INTERVAL_INVAL) | ||||
| 		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 (0);				/* invalid interval */ | ||||
| 	return (abstimeeq(i1->data[0], i2->data[0]) && | ||||
| 			abstimeeq(i1->data[1], i2->data[1])); | ||||
| } | ||||
| 		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 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user