Skip to content

Commit 7c243f8

Browse files
author
Thomas G. Lockhart
committed
Add comparision routines and catalog entries to support indices on
datetime and timespan.
1 parent bb77313 commit 7c243f8

File tree

5 files changed

+219
-134
lines changed

5 files changed

+219
-134
lines changed

src/backend/utils/adt/dt.c

Lines changed: 56 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
*
88
*
99
* IDENTIFICATION
10-
* $Header: /cvsroot/pgsql/src/backend/utils/adt/Attic/dt.c,v 1.34 1997/09/01 06:13:21 thomas Exp $
10+
* $Header: /cvsroot/pgsql/src/backend/utils/adt/Attic/dt.c,v 1.35 1997/09/04 18:43:21 thomas Exp $
1111
*
1212
*-------------------------------------------------------------------------
1313
*/
@@ -473,6 +473,35 @@ datetime_ge(DateTime *datetime1, DateTime *datetime2)
473473
} /* datetime_ge() */
474474

475475

476+
/* datetime_cmp - 3-state comparison for datetime
477+
* collate invalid datetime at the end
478+
*/
479+
int
480+
datetime_cmp(DateTime *datetime1, DateTime *datetime2)
481+
{
482+
DateTime dt1, dt2;
483+
484+
if (!PointerIsValid(datetime1) || !PointerIsValid(datetime2))
485+
return 0;
486+
487+
dt1 = *datetime1;
488+
dt2 = *datetime2;
489+
490+
if (DATETIME_IS_INVALID(dt1)) {
491+
return( (DATETIME_IS_INVALID(dt2)? 0: 1));
492+
493+
} else if (DATETIME_IS_INVALID(dt2)) {
494+
return( -1);
495+
496+
} else {
497+
if (DATETIME_IS_RELATIVE(dt1)) dt1 = SetDateTime(dt1);
498+
if (DATETIME_IS_RELATIVE(dt2)) dt2 = SetDateTime(dt2);
499+
};
500+
501+
return( ((dt1 < dt2)? -1: ((dt1 > dt2)? 1: 0)));
502+
} /* datetime_cmp() */
503+
504+
476505
/* timespan_relop - is timespan1 relop timespan2
477506
*/
478507
bool
@@ -578,6 +607,32 @@ timespan_ge(TimeSpan *timespan1, TimeSpan *timespan2)
578607
} /* timespan_ge() */
579608

580609

610+
/* timespan_cmp - 3-state comparison for timespan
611+
*/
612+
int
613+
timespan_cmp(TimeSpan *timespan1, TimeSpan *timespan2)
614+
{
615+
double span1, span2;
616+
617+
if (!PointerIsValid(timespan1) || !PointerIsValid(timespan2))
618+
return 0;
619+
620+
if (TIMESPAN_IS_INVALID(*timespan1)) {
621+
return( TIMESPAN_IS_INVALID(*timespan2)? 0: 1);
622+
623+
} else if (TIMESPAN_IS_INVALID(*timespan2)) {
624+
return( -1);
625+
};
626+
627+
span1 = timespan1->time;
628+
if (timespan1->month != 0) span1 += (timespan1->month * (30.0*86400));
629+
span2 = timespan2->time;
630+
if (timespan2->month != 0) span2 += (timespan2->month * (30.0*86400));
631+
632+
return( (span1 < span2)? -1: (span1 > span2)? 1: 0);
633+
} /* timespan_cmp() */
634+
635+
581636
/*----------------------------------------------------------
582637
* "Arithmetic" operators on date/times.
583638
* datetime_foo returns foo as an object (pointer) that

src/include/catalog/pg_amop.h

Lines changed: 76 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
*
88
* Copyright (c) 1994, Regents of the University of California
99
*
10-
* $Id: pg_amop.h,v 1.4 1996/11/13 20:50:50 scrappy Exp $
10+
* $Id: pg_amop.h,v 1.5 1997/09/04 18:43:57 thomas Exp $
1111
*
1212
* NOTES
1313
* the genbki.sh script reads this file and generates .bki
@@ -103,6 +103,19 @@ DATA(insert OID = 0 ( 402 434 490 6 rtsel rtnpage ));
103103
DATA(insert OID = 0 ( 402 434 491 7 rtsel rtnpage ));
104104
DATA(insert OID = 0 ( 402 434 492 8 rtsel rtnpage ));
105105

106+
/*
107+
* rtree circle_ops (supports circles)
108+
*/
109+
110+
DATA(insert OID = 0 ( 402 714 1506 1 rtsel rtnpage ));
111+
DATA(insert OID = 0 ( 402 714 1507 2 rtsel rtnpage ));
112+
DATA(insert OID = 0 ( 402 714 1508 3 rtsel rtnpage ));
113+
DATA(insert OID = 0 ( 402 714 1509 4 rtsel rtnpage ));
114+
DATA(insert OID = 0 ( 402 714 1510 5 rtsel rtnpage ));
115+
DATA(insert OID = 0 ( 402 714 1511 6 rtsel rtnpage ));
116+
DATA(insert OID = 0 ( 402 714 1512 7 rtsel rtnpage ));
117+
DATA(insert OID = 0 ( 402 714 1513 8 rtsel rtnpage ));
118+
106119
/*
107120
* nbtree int2_ops
108121
*/
@@ -324,6 +337,26 @@ DATA(insert OID = 0 ( 403 1115 1108 3 btreesel btreenpage ));
324337
DATA(insert OID = 0 ( 403 1115 1113 4 btreesel btreenpage ));
325338
DATA(insert OID = 0 ( 403 1115 1112 5 btreesel btreenpage ));
326339

340+
/*
341+
* nbtree datetime_ops
342+
*/
343+
344+
DATA(insert OID = 0 ( 403 1312 1322 1 btreesel btreenpage ));
345+
DATA(insert OID = 0 ( 403 1312 1323 2 btreesel btreenpage ));
346+
DATA(insert OID = 0 ( 403 1312 1320 3 btreesel btreenpage ));
347+
DATA(insert OID = 0 ( 403 1312 1325 4 btreesel btreenpage ));
348+
DATA(insert OID = 0 ( 403 1312 1324 5 btreesel btreenpage ));
349+
350+
/*
351+
* nbtree timespan_ops
352+
*/
353+
354+
DATA(insert OID = 0 ( 403 1313 1332 1 btreesel btreenpage ));
355+
DATA(insert OID = 0 ( 403 1313 1333 2 btreesel btreenpage ));
356+
DATA(insert OID = 0 ( 403 1313 1330 3 btreesel btreenpage ));
357+
DATA(insert OID = 0 ( 403 1313 1335 4 btreesel btreenpage ));
358+
DATA(insert OID = 0 ( 403 1313 1334 5 btreesel btreenpage ));
359+
327360
BKI_BEGIN
328361
#ifdef NOBTREE
329362
BKI_END
@@ -477,78 +510,69 @@ DATA(insert OID = 0 ( 404 432 560 3 btreesel btreenpage ));
477510
DATA(insert OID = 0 ( 404 432 565 4 btreesel btreenpage ));
478511
DATA(insert OID = 0 ( 404 432 563 5 btreesel btreenpage ));
479512

513+
/*
514+
* nobtree datetime_ops
515+
*/
516+
517+
DATA(insert OID = 0 ( 404 1312 1322 1 btreesel btreenpage ));
518+
DATA(insert OID = 0 ( 404 1312 1323 2 btreesel btreenpage ));
519+
DATA(insert OID = 0 ( 404 1312 1320 3 btreesel btreenpage ));
520+
DATA(insert OID = 0 ( 404 1312 1325 4 btreesel btreenpage ));
521+
DATA(insert OID = 0 ( 404 1312 1324 5 btreesel btreenpage ));
522+
523+
/*
524+
* nobtree timespan_ops
525+
*/
526+
527+
DATA(insert OID = 0 ( 404 1313 1332 1 btreesel btreenpage ));
528+
DATA(insert OID = 0 ( 404 1313 1333 2 btreesel btreenpage ));
529+
DATA(insert OID = 0 ( 404 1313 1330 3 btreesel btreenpage ));
530+
DATA(insert OID = 0 ( 404 1313 1335 4 btreesel btreenpage ));
531+
DATA(insert OID = 0 ( 404 1313 1334 5 btreesel btreenpage ));
532+
480533
BKI_BEGIN
481534
#endif /* NOBTREE */
482535
BKI_END
483536

484537
/*
485-
* hash table int2_ops
538+
* hash table _ops
486539
*/
540+
541+
/* hash table int2_ops */
487542
DATA(insert OID = 0 ( 405 421 94 1 btreesel btreenpage ));
488-
/*
489-
* hash table float8_ops
490-
*/
543+
/* hash table float8_ops */
491544
DATA(insert OID = 0 ( 405 423 670 1 btreesel btreenpage ));
492-
/*
493-
* hash table int4_ops
494-
*/
545+
/* hash table int4_ops */
495546
DATA(insert OID = 0 ( 405 426 96 1 hashsel hashnpage ));
496-
/*
497-
* hash table oid_ops
498-
*/
547+
/* hash table oid_ops */
499548
DATA(insert OID = 0 ( 405 427 607 1 hashsel hashnpage ));
500-
/*
501-
* hash table float4_ops
502-
*/
549+
/* hash table float4_ops */
503550
DATA(insert OID = 0 ( 405 428 620 1 hashsel hashnpage ));
504-
/*
505-
* hash table char_ops
506-
*/
551+
/* hash table char_ops */
507552
DATA(insert OID = 0 ( 405 429 92 1 hashsel hashnpage ));
508-
/*
509-
* hash table char2_ops
510-
*/
553+
/* hash table char2_ops */
511554
DATA(insert OID = 0 ( 405 406 412 1 hashsel hashnpage ));
512-
/*
513-
* hash table char4_ops
514-
*/
555+
/* hash table char4_ops */
515556
DATA(insert OID = 0 ( 405 407 413 1 hashsel hashnpage ));
516-
/*
517-
* hash table char8_ops
518-
*/
557+
/* hash table char8_ops */
519558
DATA(insert OID = 0 ( 405 408 414 1 hashsel hashnpage ));
520-
/*
521-
* hash table char16_ops
522-
*/
559+
/* hash table char16_ops */
523560
DATA(insert OID = 0 ( 405 430 1267 1 hashsel hashnpage ));
524-
/*
525-
* hash table name_ops
526-
*/
561+
/* hash table name_ops */
527562
DATA(insert OID = 0 ( 405 1181 93 1 hashsel hashnpage ));
528-
/*
529-
* hash table text_ops
530-
*/
563+
/* hash table text_ops */
531564
DATA(insert OID = 0 ( 405 431 98 1 hashsel hashnpage ));
532-
533-
/*
534-
* hash table bpchar_ops
535-
*/
565+
/* hash table bpchar_ops */
536566
DATA(insert OID = 0 ( 405 1076 1054 1 hashsel hashnpage ));
537-
538-
/*
539-
* hash table varchar_ops
540-
*/
567+
/* hash table varchar_ops */
541568
DATA(insert OID = 0 ( 405 1077 1062 1 hashsel hashnpage ));
542-
543-
/*
544-
* hash table date_ops
545-
*/
569+
/* hash table date_ops */
546570
DATA(insert OID = 0 ( 405 1114 1093 1 hashsel hashnpage ));
547-
548-
/*
549-
* hash table time_ops
550-
*/
571+
/* hash table time_ops */
551572
DATA(insert OID = 0 ( 405 1115 1108 1 hashsel hashnpage ));
552-
573+
/* hash table datetime_ops */
574+
DATA(insert OID = 0 ( 405 1312 1320 1 hashsel hashnpage ));
575+
/* hash table timespan_ops */
576+
DATA(insert OID = 0 ( 405 1313 1330 1 hashsel hashnpage ));
553577

554578
#endif /* PG_AMOP_H */

src/include/catalog/pg_amproc.h

Lines changed: 59 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
*
1010
* Copyright (c) 1994, Regents of the University of California
1111
*
12-
* $Id: pg_amproc.h,v 1.3 1996/11/13 20:50:52 scrappy Exp $
12+
* $Id: pg_amproc.h,v 1.4 1997/09/04 18:43:57 thomas Exp $
1313
*
1414
* NOTES
1515
* the genbki.sh script reads this file and generates .bki
@@ -61,75 +61,77 @@ typedef FormData_pg_amproc *Form_pg_amproc;
6161
* ----------------
6262
*/
6363

64-
DATA(insert OID = 0 (402 422 193 1));
65-
DATA(insert OID = 0 (402 422 194 2));
66-
DATA(insert OID = 0 (402 422 195 3));
67-
DATA(insert OID = 0 (402 433 193 1));
68-
DATA(insert OID = 0 (402 433 194 2));
69-
DATA(insert OID = 0 (402 433 196 3));
70-
DATA(insert OID = 0 (402 434 197 1));
71-
DATA(insert OID = 0 (402 434 198 2));
72-
DATA(insert OID = 0 (402 434 199 3));
73-
DATA(insert OID = 0 (403 421 350 1));
74-
DATA(insert OID = 0 (403 423 355 1));
75-
DATA(insert OID = 0 (403 424 353 1));
76-
DATA(insert OID = 0 (403 425 352 1));
77-
DATA(insert OID = 0 (403 426 351 1));
78-
DATA(insert OID = 0 (403 427 356 1));
79-
DATA(insert OID = 0 (403 428 354 1));
80-
DATA(insert OID = 0 (403 429 358 1));
81-
DATA(insert OID = 0 (403 406 689 1));
82-
DATA(insert OID = 0 (403 407 690 1));
83-
DATA(insert OID = 0 (403 408 691 1));
84-
DATA(insert OID = 0 (403 1181 359 1));
85-
DATA(insert OID = 0 (403 430 1274 1));
86-
DATA(insert OID = 0 (403 431 360 1));
87-
DATA(insert OID = 0 (403 432 357 1));
88-
DATA(insert OID = 0 (403 435 928 1));
89-
DATA(insert OID = 0 (403 436 948 1));
90-
DATA(insert OID = 0 (403 437 828 1));
64+
DATA(insert OID = 0 (402 422 193 1));
65+
DATA(insert OID = 0 (402 422 194 2));
66+
DATA(insert OID = 0 (402 422 195 3));
67+
DATA(insert OID = 0 (402 433 193 1));
68+
DATA(insert OID = 0 (402 433 194 2));
69+
DATA(insert OID = 0 (402 433 196 3));
70+
DATA(insert OID = 0 (402 434 197 1));
71+
DATA(insert OID = 0 (402 434 198 2));
72+
DATA(insert OID = 0 (402 434 199 3));
73+
DATA(insert OID = 0 (403 421 350 1));
74+
DATA(insert OID = 0 (403 423 355 1));
75+
DATA(insert OID = 0 (403 424 353 1));
76+
DATA(insert OID = 0 (403 425 352 1));
77+
DATA(insert OID = 0 (403 426 351 1));
78+
DATA(insert OID = 0 (403 427 356 1));
79+
DATA(insert OID = 0 (403 428 354 1));
80+
DATA(insert OID = 0 (403 429 358 1));
81+
DATA(insert OID = 0 (403 406 689 1));
82+
DATA(insert OID = 0 (403 407 690 1));
83+
DATA(insert OID = 0 (403 408 691 1));
84+
DATA(insert OID = 0 (403 1181 359 1));
85+
DATA(insert OID = 0 (403 430 1274 1));
86+
DATA(insert OID = 0 (403 431 360 1));
87+
DATA(insert OID = 0 (403 432 357 1));
88+
DATA(insert OID = 0 (403 435 928 1));
89+
DATA(insert OID = 0 (403 436 948 1));
90+
DATA(insert OID = 0 (403 437 828 1));
9191
DATA(insert OID = 0 (403 1076 1078 1));
9292
DATA(insert OID = 0 (403 1077 1079 1));
9393
DATA(insert OID = 0 (403 1114 1092 1));
9494
DATA(insert OID = 0 (403 1115 1107 1));
95+
DATA(insert OID = 0 (403 1312 1314 1));
96+
DATA(insert OID = 0 (403 1313 1315 1));
9597

9698
BKI_BEGIN
9799
#ifdef NOBTREE
98100
BKI_END
99-
DATA(insert OID = 0 (404 421 350 1));
100-
DATA(insert OID = 0 (404 423 355 1));
101-
DATA(insert OID = 0 (404 424 353 1));
102-
DATA(insert OID = 0 (404 425 352 1));
103-
DATA(insert OID = 0 (404 426 351 1));
104-
DATA(insert OID = 0 (404 427 356 1));
105-
DATA(insert OID = 0 (404 428 354 1));
106-
DATA(insert OID = 0 (404 429 358 1));
107-
DATA(insert OID = 0 (404 406 689 1));
108-
DATA(insert OID = 0 (404 407 690 1));
109-
DATA(insert OID = 0 (404 408 691 1));
110-
DATA(insert OID = 0 (404 1181 359 1));
111-
DATA(insert OID = 0 (404 430 1274 1));
112-
DATA(insert OID = 0 (404 431 360 1));
113-
DATA(insert OID = 0 (404 432 357 1));
101+
DATA(insert OID = 0 (404 421 350 1));
102+
DATA(insert OID = 0 (404 423 355 1));
103+
DATA(insert OID = 0 (404 424 353 1));
104+
DATA(insert OID = 0 (404 425 352 1));
105+
DATA(insert OID = 0 (404 426 351 1));
106+
DATA(insert OID = 0 (404 427 356 1));
107+
DATA(insert OID = 0 (404 428 354 1));
108+
DATA(insert OID = 0 (404 429 358 1));
109+
DATA(insert OID = 0 (404 406 689 1));
110+
DATA(insert OID = 0 (404 407 690 1));
111+
DATA(insert OID = 0 (404 408 691 1));
112+
DATA(insert OID = 0 (404 1181 359 1));
113+
DATA(insert OID = 0 (404 430 1274 1));
114+
DATA(insert OID = 0 (404 431 360 1));
115+
DATA(insert OID = 0 (404 432 357 1));
114116
BKI_BEGIN
115117
#endif /* NOBTREE */
116118
BKI_END
117119

118-
DATA(insert OID = 0 (405 421 449 1));
119-
DATA(insert OID = 0 (405 423 452 1));
120-
DATA(insert OID = 0 (405 426 450 1));
121-
DATA(insert OID = 0 (405 427 453 1));
122-
DATA(insert OID = 0 (405 428 451 1));
123-
DATA(insert OID = 0 (405 429 454 1));
124-
DATA(insert OID = 0 (405 406 692 1));
125-
DATA(insert OID = 0 (405 407 693 1));
126-
DATA(insert OID = 0 (405 408 694 1));
127-
DATA(insert OID = 0 (405 1181 455 1));
128-
DATA(insert OID = 0 (405 430 1281 1));
129-
DATA(insert OID = 0 (405 431 456 1));
120+
DATA(insert OID = 0 (405 421 449 1));
121+
DATA(insert OID = 0 (405 423 452 1));
122+
DATA(insert OID = 0 (405 426 450 1));
123+
DATA(insert OID = 0 (405 427 453 1));
124+
DATA(insert OID = 0 (405 428 451 1));
125+
DATA(insert OID = 0 (405 429 454 1));
126+
DATA(insert OID = 0 (405 406 692 1));
127+
DATA(insert OID = 0 (405 407 693 1));
128+
DATA(insert OID = 0 (405 408 694 1));
129+
DATA(insert OID = 0 (405 1181 455 1));
130+
DATA(insert OID = 0 (405 430 1281 1));
131+
DATA(insert OID = 0 (405 431 456 1));
130132
DATA(insert OID = 0 (405 1076 1080 1));
131133
DATA(insert OID = 0 (405 1077 1081 1));
132-
DATA(insert OID = 0 (405 1114 450 1));
133-
DATA(insert OID = 0 (405 1115 694 1));
134+
DATA(insert OID = 0 (405 1114 450 1));
135+
DATA(insert OID = 0 (405 1115 694 1));
134136

135137
#endif /* PG_AMPROC_H */

0 commit comments

Comments
 (0)