@@ -483,21 +483,75 @@ leftmostvalue_timestamp(void)
483
483
return TimestampGetDatum (DT_NOBEGIN );
484
484
}
485
485
486
+ static Datum
487
+ cvt_date_timestamp (Datum input )
488
+ {
489
+ DateADT val = DatumGetDateADT (input );
490
+ Timestamp result ;
491
+ int overflow ;
492
+
493
+ result = date2timestamp_opt_overflow (val , & overflow );
494
+ /* We can ignore the overflow result, since result is useful as-is */
495
+ return TimestampGetDatum (result );
496
+ }
497
+
498
+ static Datum
499
+ cvt_timestamptz_timestamp (Datum input )
500
+ {
501
+ TimestampTz val = DatumGetTimestampTz (input );
502
+ Timestamp result ;
503
+ int overflow ;
504
+
505
+ result = timestamptz2timestamp_opt_overflow (val , & overflow );
506
+ /* We can ignore the overflow result, since result is useful as-is */
507
+ return TimestampGetDatum (result );
508
+ }
509
+
486
510
static const bool timestamp_rhs_is_varlena [] =
487
- {false};
511
+ {false, false, false};
512
+
513
+ static const btree_gin_convert_function timestamp_cvt_fns [] =
514
+ {NULL , cvt_date_timestamp , cvt_timestamptz_timestamp };
488
515
489
516
static const PGFunction timestamp_cmp_fns [] =
490
- {timestamp_cmp };
517
+ {timestamp_cmp , date_cmp_timestamp , timestamptz_cmp_timestamp };
518
+
519
+ GIN_SUPPORT (timestamp , leftmostvalue_timestamp , timestamp_rhs_is_varlena , timestamp_cvt_fns , timestamp_cmp_fns )
520
+
521
+ static Datum
522
+ cvt_date_timestamptz (Datum input )
523
+ {
524
+ DateADT val = DatumGetDateADT (input );
525
+ TimestampTz result ;
526
+ int overflow ;
491
527
492
- GIN_SUPPORT (timestamp , leftmostvalue_timestamp , timestamp_rhs_is_varlena , NULL , timestamp_cmp_fns )
528
+ result = date2timestamptz_opt_overflow (val , & overflow );
529
+ /* We can ignore the overflow result, since result is useful as-is */
530
+ return TimestampTzGetDatum (result );
531
+ }
532
+
533
+ static Datum
534
+ cvt_timestamp_timestamptz (Datum input )
535
+ {
536
+ Timestamp val = DatumGetTimestamp (input );
537
+ TimestampTz result ;
538
+ int overflow ;
539
+
540
+ result = timestamp2timestamptz_opt_overflow (val , & overflow );
541
+ /* We can ignore the overflow result, since result is useful as-is */
542
+ return TimestampTzGetDatum (result );
543
+ }
493
544
494
545
static const bool timestamptz_rhs_is_varlena [] =
495
- {false};
546
+ {false, false, false};
547
+
548
+ static const btree_gin_convert_function timestamptz_cvt_fns [] =
549
+ {NULL , cvt_date_timestamptz , cvt_timestamp_timestamptz };
496
550
497
551
static const PGFunction timestamptz_cmp_fns [] =
498
- {timestamp_cmp };
552
+ {timestamp_cmp , date_cmp_timestamptz , timestamp_cmp_timestamptz };
499
553
500
- GIN_SUPPORT (timestamptz , leftmostvalue_timestamp , timestamptz_rhs_is_varlena , NULL , timestamptz_cmp_fns )
554
+ GIN_SUPPORT (timestamptz , leftmostvalue_timestamp , timestamptz_rhs_is_varlena , timestamptz_cvt_fns , timestamptz_cmp_fns )
501
555
502
556
static Datum
503
557
leftmostvalue_time (void )
@@ -538,13 +592,40 @@ leftmostvalue_date(void)
538
592
return DateADTGetDatum (DATEVAL_NOBEGIN );
539
593
}
540
594
595
+ static Datum
596
+ cvt_timestamp_date (Datum input )
597
+ {
598
+ Timestamp val = DatumGetTimestamp (input );
599
+ DateADT result ;
600
+ int overflow ;
601
+
602
+ result = timestamp2date_opt_overflow (val , & overflow );
603
+ /* We can ignore the overflow result, since result is useful as-is */
604
+ return DateADTGetDatum (result );
605
+ }
606
+
607
+ static Datum
608
+ cvt_timestamptz_date (Datum input )
609
+ {
610
+ TimestampTz val = DatumGetTimestampTz (input );
611
+ DateADT result ;
612
+ int overflow ;
613
+
614
+ result = timestamptz2date_opt_overflow (val , & overflow );
615
+ /* We can ignore the overflow result, since result is useful as-is */
616
+ return DateADTGetDatum (result );
617
+ }
618
+
541
619
static const bool date_rhs_is_varlena [] =
542
- {false};
620
+ {false, false, false};
621
+
622
+ static const btree_gin_convert_function date_cvt_fns [] =
623
+ {NULL , cvt_timestamp_date , cvt_timestamptz_date };
543
624
544
625
static const PGFunction date_cmp_fns [] =
545
- {date_cmp };
626
+ {date_cmp , timestamp_cmp_date , timestamptz_cmp_date };
546
627
547
- GIN_SUPPORT (date , leftmostvalue_date , date_rhs_is_varlena , NULL , date_cmp_fns )
628
+ GIN_SUPPORT (date , leftmostvalue_date , date_rhs_is_varlena , date_cvt_fns , date_cmp_fns )
548
629
549
630
static Datum
550
631
leftmostvalue_interval (void )
0 commit comments