Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit fbf1268

Browse files
author
Thomas G. Lockhart
committed
Include tinterval comparison functions for span of interval.
1 parent 5984746 commit fbf1268

File tree

1 file changed

+206
-5
lines changed

1 file changed

+206
-5
lines changed

src/backend/utils/adt/date.c

+206-5
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
*
1010
*
1111
* IDENTIFICATION
12-
* $Header: /cvsroot/pgsql/src/backend/utils/adt/date.c,v 1.18 1997/09/08 21:48:21 momjian Exp $
12+
* $Header: /cvsroot/pgsql/src/backend/utils/adt/date.c,v 1.19 1997/09/20 16:17:45 thomas Exp $
1313
*
1414
* NOTES
1515
* This code is actually (almost) unused.
@@ -565,16 +565,217 @@ reltimege(RelativeTime t1, RelativeTime t2)
565565

566566

567567
/*
568-
* intervaleq - returns 1, iff interval i1 is equal to interval i2
568+
* intervalsame - returns 1, iff interval i1 is same as interval i2
569+
* Check begin and end time.
569570
*/
570571
bool
571-
intervaleq(TimeInterval i1, TimeInterval i2)
572+
intervalsame(TimeInterval i1, TimeInterval i2)
572573
{
573574
if (i1->status == T_INTERVAL_INVAL || i2->status == T_INTERVAL_INVAL)
574-
return (0); /* invalid interval */
575+
return (FALSE); /* invalid interval */
575576
return (abstimeeq(i1->data[0], i2->data[0]) &&
576577
abstimeeq(i1->data[1], i2->data[1]));
577-
}
578+
} /* intervalsame() */
579+
580+
581+
/*
582+
* intervaleq - returns 1, iff interval i1 is equal to interval i2
583+
* Check length of intervals.
584+
*/
585+
bool
586+
intervaleq(TimeInterval i1, TimeInterval i2)
587+
{
588+
AbsoluteTime t10, t11, t20, t21;
589+
590+
if (i1->status == T_INTERVAL_INVAL || i2->status == T_INTERVAL_INVAL)
591+
return (FALSE); /* invalid interval */
592+
593+
t10 = i1->data[0];
594+
t11 = i1->data[1];
595+
t20 = i2->data[0];
596+
t21 = i2->data[1];
597+
598+
if ((t10 == INVALID_ABSTIME) || (t20 == INVALID_ABSTIME)
599+
|| (t20 == INVALID_ABSTIME) || (t21 == INVALID_ABSTIME))
600+
return (FALSE);
601+
602+
if (t10 == CURRENT_ABSTIME)
603+
t10 = GetCurrentTransactionStartTime();
604+
if (t11 == CURRENT_ABSTIME)
605+
t11 = GetCurrentTransactionStartTime();
606+
if (t20 == CURRENT_ABSTIME)
607+
t20 = GetCurrentTransactionStartTime();
608+
if (t21 == CURRENT_ABSTIME)
609+
t21 = GetCurrentTransactionStartTime();
610+
611+
return ((t11-t10) == (t21-t20));
612+
} /* intervaleq() */
613+
614+
/*
615+
* intervalne - returns 1, iff interval i1 is not equal to interval i2
616+
* Check length of intervals.
617+
*/
618+
bool
619+
intervalne(TimeInterval i1, TimeInterval i2)
620+
{
621+
AbsoluteTime t10, t11, t20, t21;
622+
623+
if (i1->status == T_INTERVAL_INVAL || i2->status == T_INTERVAL_INVAL)
624+
return (FALSE); /* invalid interval */
625+
626+
t10 = i1->data[0];
627+
t11 = i1->data[1];
628+
t20 = i2->data[0];
629+
t21 = i2->data[1];
630+
631+
if ((t10 == INVALID_ABSTIME) || (t20 == INVALID_ABSTIME)
632+
|| (t20 == INVALID_ABSTIME) || (t21 == INVALID_ABSTIME))
633+
return (FALSE);
634+
635+
if (t10 == CURRENT_ABSTIME)
636+
t10 = GetCurrentTransactionStartTime();
637+
if (t11 == CURRENT_ABSTIME)
638+
t11 = GetCurrentTransactionStartTime();
639+
if (t20 == CURRENT_ABSTIME)
640+
t20 = GetCurrentTransactionStartTime();
641+
if (t21 == CURRENT_ABSTIME)
642+
t21 = GetCurrentTransactionStartTime();
643+
644+
return ((t11-t10) != (t21-t20));
645+
} /* intervalne() */
646+
647+
/*
648+
* intervallt - returns TRUE, iff interval i1 is less than interval i2
649+
* Check length of intervals.
650+
*/
651+
bool
652+
intervallt(TimeInterval i1, TimeInterval i2)
653+
{
654+
AbsoluteTime t10, t11, t20, t21;
655+
656+
if (i1->status == T_INTERVAL_INVAL || i2->status == T_INTERVAL_INVAL)
657+
return (FALSE); /* invalid interval */
658+
659+
t10 = i1->data[0];
660+
t11 = i1->data[1];
661+
t20 = i2->data[0];
662+
t21 = i2->data[1];
663+
664+
if ((t10 == INVALID_ABSTIME) || (t20 == INVALID_ABSTIME)
665+
|| (t20 == INVALID_ABSTIME) || (t21 == INVALID_ABSTIME))
666+
return (FALSE);
667+
668+
if (t10 == CURRENT_ABSTIME)
669+
t10 = GetCurrentTransactionStartTime();
670+
if (t11 == CURRENT_ABSTIME)
671+
t11 = GetCurrentTransactionStartTime();
672+
if (t20 == CURRENT_ABSTIME)
673+
t20 = GetCurrentTransactionStartTime();
674+
if (t21 == CURRENT_ABSTIME)
675+
t21 = GetCurrentTransactionStartTime();
676+
677+
return ((t11-t10) < (t21-t20));
678+
} /* intervallt() */
679+
680+
/*
681+
* intervalle - returns TRUE, iff interval i1 is less than or equal to interval i2
682+
* Check length of intervals.
683+
*/
684+
bool
685+
intervalle(TimeInterval i1, TimeInterval i2)
686+
{
687+
AbsoluteTime t10, t11, t20, t21;
688+
689+
if (i1->status == T_INTERVAL_INVAL || i2->status == T_INTERVAL_INVAL)
690+
return (FALSE); /* invalid interval */
691+
692+
t10 = i1->data[0];
693+
t11 = i1->data[1];
694+
t20 = i2->data[0];
695+
t21 = i2->data[1];
696+
697+
if ((t10 == INVALID_ABSTIME) || (t20 == INVALID_ABSTIME)
698+
|| (t20 == INVALID_ABSTIME) || (t21 == INVALID_ABSTIME))
699+
return (FALSE);
700+
701+
if (t10 == CURRENT_ABSTIME)
702+
t10 = GetCurrentTransactionStartTime();
703+
if (t11 == CURRENT_ABSTIME)
704+
t11 = GetCurrentTransactionStartTime();
705+
if (t20 == CURRENT_ABSTIME)
706+
t20 = GetCurrentTransactionStartTime();
707+
if (t21 == CURRENT_ABSTIME)
708+
t21 = GetCurrentTransactionStartTime();
709+
710+
return ((t11-t10) <= (t21-t20));
711+
} /* intervalle() */
712+
713+
/*
714+
* intervalgt - returns TRUE, iff interval i1 is less than interval i2
715+
* Check length of intervals.
716+
*/
717+
bool
718+
intervalgt(TimeInterval i1, TimeInterval i2)
719+
{
720+
AbsoluteTime t10, t11, t20, t21;
721+
722+
if (i1->status == T_INTERVAL_INVAL || i2->status == T_INTERVAL_INVAL)
723+
return (FALSE); /* invalid interval */
724+
725+
t10 = i1->data[0];
726+
t11 = i1->data[1];
727+
t20 = i2->data[0];
728+
t21 = i2->data[1];
729+
730+
if ((t10 == INVALID_ABSTIME) || (t20 == INVALID_ABSTIME)
731+
|| (t20 == INVALID_ABSTIME) || (t21 == INVALID_ABSTIME))
732+
return (FALSE);
733+
734+
if (t10 == CURRENT_ABSTIME)
735+
t10 = GetCurrentTransactionStartTime();
736+
if (t11 == CURRENT_ABSTIME)
737+
t11 = GetCurrentTransactionStartTime();
738+
if (t20 == CURRENT_ABSTIME)
739+
t20 = GetCurrentTransactionStartTime();
740+
if (t21 == CURRENT_ABSTIME)
741+
t21 = GetCurrentTransactionStartTime();
742+
743+
return ((t11-t10) > (t21-t20));
744+
} /* intervalgt() */
745+
746+
/*
747+
* intervalge - returns TRUE, iff interval i1 is less than or equal to interval i2
748+
* Check length of intervals.
749+
*/
750+
bool
751+
intervalge(TimeInterval i1, TimeInterval i2)
752+
{
753+
AbsoluteTime t10, t11, t20, t21;
754+
755+
if (i1->status == T_INTERVAL_INVAL || i2->status == T_INTERVAL_INVAL)
756+
return (FALSE); /* invalid interval */
757+
758+
t10 = i1->data[0];
759+
t11 = i1->data[1];
760+
t20 = i2->data[0];
761+
t21 = i2->data[1];
762+
763+
if ((t10 == INVALID_ABSTIME) || (t20 == INVALID_ABSTIME)
764+
|| (t20 == INVALID_ABSTIME) || (t21 == INVALID_ABSTIME))
765+
return (FALSE);
766+
767+
if (t10 == CURRENT_ABSTIME)
768+
t10 = GetCurrentTransactionStartTime();
769+
if (t11 == CURRENT_ABSTIME)
770+
t11 = GetCurrentTransactionStartTime();
771+
if (t20 == CURRENT_ABSTIME)
772+
t20 = GetCurrentTransactionStartTime();
773+
if (t21 == CURRENT_ABSTIME)
774+
t21 = GetCurrentTransactionStartTime();
775+
776+
return ((t11-t10) >= (t21-t20));
777+
} /* intervalge() */
778+
578779

579780
/*
580781
* intervalleneq - returns 1, iff length of interval i is equal to

0 commit comments

Comments
 (0)