@@ -554,11 +554,12 @@ date_mii(PG_FUNCTION_ARGS)
554
554
/*
555
555
* Promote date to timestamp.
556
556
*
557
- * If 'have_error' is NULL, then errors are thrown, else '*have_error' is set
558
- * and zero is returned.
557
+ * On overflow error is thrown if 'overflow' is NULL. Otherwise, '*overflow'
558
+ * is set to -1 (+1) when result value exceed lower (upper) boundary and zero
559
+ * returned.
559
560
*/
560
561
Timestamp
561
- date2timestamp_opt_error (DateADT dateVal , bool * have_error )
562
+ date2timestamp_opt_overflow (DateADT dateVal , int * overflow )
562
563
{
563
564
Timestamp result ;
564
565
@@ -575,9 +576,9 @@ date2timestamp_opt_error(DateADT dateVal, bool *have_error)
575
576
*/
576
577
if (dateVal >= (TIMESTAMP_END_JULIAN - POSTGRES_EPOCH_JDATE ))
577
578
{
578
- if (have_error )
579
+ if (overflow )
579
580
{
580
- * have_error = true ;
581
+ * overflow = 1 ;
581
582
return (Timestamp ) 0 ;
582
583
}
583
584
else
@@ -596,22 +597,23 @@ date2timestamp_opt_error(DateADT dateVal, bool *have_error)
596
597
}
597
598
598
599
/*
599
- * Single-argument version of date2timestamp_opt_error ().
600
+ * Single-argument version of date2timestamp_opt_overflow ().
600
601
*/
601
602
static TimestampTz
602
603
date2timestamp (DateADT dateVal )
603
604
{
604
- return date2timestamp_opt_error (dateVal , NULL );
605
+ return date2timestamp_opt_overflow (dateVal , NULL );
605
606
}
606
607
607
608
/*
608
609
* Promote date to timestamp with time zone.
609
610
*
610
- * If 'have_error' is NULL, then errors are thrown, else '*have_error' is set
611
- * and zero is returned.
611
+ * On overflow error is thrown if 'overflow' is NULL. Otherwise, '*overflow'
612
+ * is set to -1 (+1) when result value exceed lower (upper) boundary and zero
613
+ * returned.
612
614
*/
613
615
TimestampTz
614
- date2timestamptz_opt_error (DateADT dateVal , bool * have_error )
616
+ date2timestamptz_opt_overflow (DateADT dateVal , int * overflow )
615
617
{
616
618
TimestampTz result ;
617
619
struct pg_tm tt ,
@@ -631,9 +633,9 @@ date2timestamptz_opt_error(DateADT dateVal, bool *have_error)
631
633
*/
632
634
if (dateVal >= (TIMESTAMP_END_JULIAN - POSTGRES_EPOCH_JDATE ))
633
635
{
634
- if (have_error )
636
+ if (overflow )
635
637
{
636
- * have_error = true ;
638
+ * overflow = 1 ;
637
639
return (TimestampTz ) 0 ;
638
640
}
639
641
else
@@ -659,9 +661,15 @@ date2timestamptz_opt_error(DateADT dateVal, bool *have_error)
659
661
*/
660
662
if (!IS_VALID_TIMESTAMP (result ))
661
663
{
662
- if (have_error )
664
+ if (overflow )
663
665
{
664
- * have_error = true;
666
+ if (result < MIN_TIMESTAMP )
667
+ * overflow = -1 ;
668
+ else
669
+ {
670
+ Assert (result >= END_TIMESTAMP );
671
+ * overflow = 1 ;
672
+ }
665
673
return (TimestampTz ) 0 ;
666
674
}
667
675
else
@@ -677,12 +685,12 @@ date2timestamptz_opt_error(DateADT dateVal, bool *have_error)
677
685
}
678
686
679
687
/*
680
- * Single-argument version of date2timestamptz_opt_error ().
688
+ * Single-argument version of date2timestamptz_opt_overflow ().
681
689
*/
682
690
static TimestampTz
683
691
date2timestamptz (DateADT dateVal )
684
692
{
685
- return date2timestamptz_opt_error (dateVal , NULL );
693
+ return date2timestamptz_opt_overflow (dateVal , NULL );
686
694
}
687
695
688
696
/*
0 commit comments