@@ -491,21 +491,75 @@ leftmostvalue_timestamp(void)
491491 return TimestampGetDatum (DT_NOBEGIN );
492492}
493493
494+ static Datum
495+ cvt_date_timestamp (Datum input )
496+ {
497+ DateADT val = DatumGetDateADT (input );
498+ Timestamp result ;
499+ int overflow ;
500+
501+ result = date2timestamp_opt_overflow (val , & overflow );
502+ /* We can ignore the overflow result, since result is useful as-is */
503+ return TimestampGetDatum (result );
504+ }
505+
506+ static Datum
507+ cvt_timestamptz_timestamp (Datum input )
508+ {
509+ TimestampTz val = DatumGetTimestampTz (input );
510+ Timestamp result ;
511+ int overflow ;
512+
513+ result = timestamptz2timestamp_opt_overflow (val , & overflow );
514+ /* We can ignore the overflow result, since result is useful as-is */
515+ return TimestampGetDatum (result );
516+ }
517+
494518static const bool timestamp_rhs_is_varlena [] =
495- {false};
519+ {false, false, false};
520+
521+ static const btree_gin_convert_function timestamp_cvt_fns [] =
522+ {NULL , cvt_date_timestamp , cvt_timestamptz_timestamp };
496523
497524static const PGFunction timestamp_cmp_fns [] =
498- {timestamp_cmp };
525+ {timestamp_cmp , date_cmp_timestamp , timestamptz_cmp_timestamp };
526+
527+ GIN_SUPPORT (timestamp , leftmostvalue_timestamp , timestamp_rhs_is_varlena , timestamp_cvt_fns , timestamp_cmp_fns )
528+
529+ static Datum
530+ cvt_date_timestamptz (Datum input )
531+ {
532+ DateADT val = DatumGetDateADT (input );
533+ TimestampTz result ;
534+ int overflow ;
499535
500- GIN_SUPPORT (timestamp , leftmostvalue_timestamp , timestamp_rhs_is_varlena , NULL , timestamp_cmp_fns )
536+ result = date2timestamptz_opt_overflow (val , & overflow );
537+ /* We can ignore the overflow result, since result is useful as-is */
538+ return TimestampTzGetDatum (result );
539+ }
540+
541+ static Datum
542+ cvt_timestamp_timestamptz (Datum input )
543+ {
544+ Timestamp val = DatumGetTimestamp (input );
545+ TimestampTz result ;
546+ int overflow ;
547+
548+ result = timestamp2timestamptz_opt_overflow (val , & overflow );
549+ /* We can ignore the overflow result, since result is useful as-is */
550+ return TimestampTzGetDatum (result );
551+ }
501552
502553static const bool timestamptz_rhs_is_varlena [] =
503- {false};
554+ {false, false, false};
555+
556+ static const btree_gin_convert_function timestamptz_cvt_fns [] =
557+ {NULL , cvt_date_timestamptz , cvt_timestamp_timestamptz };
504558
505559static const PGFunction timestamptz_cmp_fns [] =
506- {timestamp_cmp };
560+ {timestamp_cmp , date_cmp_timestamptz , timestamp_cmp_timestamptz };
507561
508- GIN_SUPPORT (timestamptz , leftmostvalue_timestamp , timestamptz_rhs_is_varlena , NULL , timestamptz_cmp_fns )
562+ GIN_SUPPORT (timestamptz , leftmostvalue_timestamp , timestamptz_rhs_is_varlena , timestamptz_cvt_fns , timestamptz_cmp_fns )
509563
510564static Datum
511565leftmostvalue_time (void )
@@ -546,13 +600,40 @@ leftmostvalue_date(void)
546600 return DateADTGetDatum (DATEVAL_NOBEGIN );
547601}
548602
603+ static Datum
604+ cvt_timestamp_date (Datum input )
605+ {
606+ Timestamp val = DatumGetTimestamp (input );
607+ DateADT result ;
608+ int overflow ;
609+
610+ result = timestamp2date_opt_overflow (val , & overflow );
611+ /* We can ignore the overflow result, since result is useful as-is */
612+ return DateADTGetDatum (result );
613+ }
614+
615+ static Datum
616+ cvt_timestamptz_date (Datum input )
617+ {
618+ TimestampTz val = DatumGetTimestampTz (input );
619+ DateADT result ;
620+ int overflow ;
621+
622+ result = timestamptz2date_opt_overflow (val , & overflow );
623+ /* We can ignore the overflow result, since result is useful as-is */
624+ return DateADTGetDatum (result );
625+ }
626+
549627static const bool date_rhs_is_varlena [] =
550- {false};
628+ {false, false, false};
629+
630+ static const btree_gin_convert_function date_cvt_fns [] =
631+ {NULL , cvt_timestamp_date , cvt_timestamptz_date };
551632
552633static const PGFunction date_cmp_fns [] =
553- {date_cmp };
634+ {date_cmp , timestamp_cmp_date , timestamptz_cmp_date };
554635
555- GIN_SUPPORT (date , leftmostvalue_date , date_rhs_is_varlena , NULL , date_cmp_fns )
636+ GIN_SUPPORT (date , leftmostvalue_date , date_rhs_is_varlena , date_cvt_fns , date_cmp_fns )
556637
557638static Datum
558639leftmostvalue_interval (void )
0 commit comments