47 #error -ffast-math is known to break this code
50 #define SAMESIGN(a,b) (((a) < 0) == ((b) < 0))
97 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
98 errmsg(
"invalid type modifier")));
109 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
110 errmsg(
"TIMESTAMP(%d)%s precision must not be negative",
111 typmod, (istz ?
" WITH TIME ZONE" :
""))));
115 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
116 errmsg(
"TIMESTAMP(%d)%s precision reduced to maximum allowed, %d",
117 typmod, (istz ?
" WITH TIME ZONE" :
""),
129 const char *tz = istz ?
" with time zone" :
" without time zone";
132 return psprintf(
"(%d)%s", (
int) typmod, tz);
178 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
179 errmsg(
"timestamp out of range: \"%s\"",
str)));
195 elog(
ERROR,
"unexpected dtype %d while parsing timestamp \"%s\"",
224 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
225 errmsg(
"timestamp out of range")));
256 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
257 errmsg(
"timestamp out of range")));
374 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
375 errmsg(
"timestamp(%d) precision must be between %d and %d",
379 if (*time >= INT64CONST(0))
381 *time = ((*time + TimestampOffsets[typmod]) / TimestampScales[typmod]) *
382 TimestampScales[typmod];
386 *time = -((((-*time) + TimestampOffsets[typmod]) / TimestampScales[typmod])
387 * TimestampScales[typmod]);
436 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
437 errmsg(
"timestamp out of range: \"%s\"",
str)));
453 elog(
ERROR,
"unexpected dtype %d while parsing timestamptz \"%s\"",
494 if (isdigit((
unsigned char) *tzname))
496 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
497 errmsg(
"invalid input syntax for type %s: \"%s\"",
498 "numeric time zone", tzname),
499 errhint(
"Numeric time zones must have \"-\" or \"+\" as first character.")));
511 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
512 errmsg(
"numeric time zone \"%s\" out of range", tzname)));
515 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
516 errmsg(
"time zone \"%s\" not recognized", tzname)));
542 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
543 errmsg(
"time zone \"%s\" not recognized", tzname)));
556 int hour,
int min,
double sec)
580 (
errcode(ERRCODE_DATETIME_FIELD_OVERFLOW),
581 errmsg(
"date field value out of range: %d-%02d-%02d",
586 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
587 errmsg(
"date out of range: %d-%02d-%02d",
595 (
errcode(ERRCODE_DATETIME_FIELD_OVERFLOW),
596 errmsg(
"time field value out of range: %d:%02d:%02g",
607 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
608 errmsg(
"timestamp out of range: %d-%02d-%02d %d:%02d:%02g",
614 if ((result < 0 && date > 0) ||
615 (result > 0 &&
date < -1))
617 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
618 errmsg(
"timestamp out of range: %d-%02d-%02d %d:%02d:%02g",
625 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
626 errmsg(
"timestamp out of range: %d-%02d-%02d %d:%02d:%02g",
698 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
699 errmsg(
"timestamp out of range")));
707 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
708 errmsg(
"timestamp out of range")));
726 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
727 errmsg(
"timestamp cannot be NaN")));
744 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
745 errmsg(
"timestamp out of range: \"%g\"", seconds)));
751 result = (int64) seconds;
756 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
757 errmsg(
"timestamp out of range: \"%g\"",
785 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
786 errmsg(
"timestamp out of range")));
818 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
819 errmsg(
"timestamp out of range")));
937 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
938 errmsg(
"interval out of range")));
942 elog(
ERROR,
"unexpected dtype %d while parsing interval \"%s\"",
1061 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
1062 errmsg(
"invalid INTERVAL type modifier")));
1077 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
1078 errmsg(
"INTERVAL(%d) precision must not be negative",
1083 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
1084 errmsg(
"INTERVAL(%d) precision reduced to maximum allowed, %d",
1094 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
1095 errmsg(
"invalid INTERVAL type modifier")));
1109 const char *fieldstr;
1126 fieldstr =
" month";
1135 fieldstr =
" minute";
1138 fieldstr =
" second";
1141 fieldstr =
" year to month";
1144 fieldstr =
" day to hour";
1147 fieldstr =
" day to minute";
1150 fieldstr =
" day to second";
1153 fieldstr =
" hour to minute";
1156 fieldstr =
" hour to second";
1159 fieldstr =
" minute to second";
1165 elog(
ERROR,
"invalid INTERVAL typmod: 0x%x", typmod);
1225 elog(
ERROR,
"invalid INTERVAL typmod: 0x%x", typmod);
1268 int old_least_field;
1269 int new_least_field;
1287 noop = (new_least_field <= old_least_field) &&
1288 (old_least_field > 0 ||
1290 new_precis >= old_precis);
1327 INT64CONST(1000000),
1458 elog(
ERROR,
"unrecognized interval typmod: %d", typmod);
1465 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
1466 errmsg(
"interval(%d) precision must be between %d and %d",
1472 IntervalOffsets[precision]) /
1473 IntervalScales[precision]) *
1474 IntervalScales[precision];
1479 IntervalOffsets[precision]) /
1480 IntervalScales[precision]) *
1481 IntervalScales[precision]);
1506 if (isinf(secs) || isnan(secs))
1508 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
1509 errmsg(
"interval out of range")));
1513 result->
day = weeks * 7 +
days;
1534 elog(
ERROR,
"invalid argument for EncodeSpecialTimestamp");
1629 pg_strftime(templ,
sizeof(templ),
"%a %b %d %H:%M:%S.%%06d %Y %Z",
1651 long *secs,
int *microsecs)
1694 return (
long) ((diff + 999) / 1000);
1711 return (diff >= msec * INT64CONST(1000));
1823 if (attimezone == NULL)
1829 if (time < INT64CONST(0))
1936 if ((*result < 0 && date > 0) ||
1937 (*result > 0 &&
date < -1))
1943 *result =
dt2local(*result, -(*tzp));
1977 itm->
tm_min = (int) tfrac;
1980 itm->
tm_sec = (int) tfrac;
1993 if (total_months > INT_MAX || total_months < INT_MIN)
2022 if (total_months > INT_MAX || total_months < INT_MIN)
2077 elog(
ERROR,
"could not convert epoch to timestamp: %m");
2113 return (dt1 < dt2) ? -1 : ((dt1 > dt2) ? 1 : 0);
2179 #if SIZEOF_DATUM < 8
2196 #if SIZEOF_DATUM >= 8
2539 #define TIMESTAMP_GT(t1,t2) \
2540 DatumGetBool(DirectFunctionCall2(timestamp_gt,t1,t2))
2541 #define TIMESTAMP_LT(t1,t2) \
2542 DatumGetBool(DirectFunctionCall2(timestamp_lt,t1,t2))
2557 else if (!te1IsNull)
2577 else if (!te2IsNull)
2633 if (te1IsNull || te2IsNull)
2688 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
2689 errmsg(
"cannot subtract infinite timestamps")));
2691 result->
time = dt1 - dt2;
2753 if ((result->
day > 0 && result->
time > 0) ||
2754 (result->
day < 0 && result->
time < 0))
2760 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
2761 errmsg(
"interval out of range")));
2771 result->
day += wholeday;
2777 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
2778 errmsg(
"interval out of range")));
2780 if (result->
month > 0 &&
2781 (result->
day < 0 || (result->
day == 0 && result->
time < 0)))
2786 else if (result->
month < 0 &&
2787 (result->
day > 0 || (result->
day == 0 && result->
time > 0)))
2793 if (result->
day > 0 && result->
time < 0)
2798 else if (result->
day < 0 && result->
time > 0)
2830 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
2831 errmsg(
"interval out of range")));
2833 if (result->
day > 0 && result->
time < 0)
2838 else if (result->
day < 0 && result->
time > 0)
2869 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
2870 errmsg(
"interval out of range")));
2872 if (result->
month > 0 && result->
day < 0)
2877 else if (result->
month < 0 && result->
day > 0)
2907 if (span->
month != 0)
2915 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
2916 errmsg(
"timestamp out of range")));
2936 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
2937 errmsg(
"timestamp out of range")));
2949 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
2950 errmsg(
"timestamp out of range")));
2958 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
2959 errmsg(
"timestamp out of range")));
2966 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
2967 errmsg(
"timestamp out of range")));
3013 if (span->
month != 0)
3021 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
3022 errmsg(
"timestamp out of range")));
3044 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
3045 errmsg(
"timestamp out of range")));
3057 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
3058 errmsg(
"timestamp out of range")));
3068 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
3069 errmsg(
"timestamp out of range")));
3076 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
3077 errmsg(
"timestamp out of range")));
3114 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
3115 errmsg(
"interval out of range")));
3119 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
3120 errmsg(
"interval out of range")));
3124 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
3125 errmsg(
"interval out of range")));
3174 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
3175 errmsg(
"interval out of range")));
3181 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
3182 errmsg(
"interval out of range")));
3188 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
3189 errmsg(
"interval out of range")));
3208 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
3209 errmsg(
"interval out of range")));
3215 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
3216 errmsg(
"interval out of range")));
3222 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
3223 errmsg(
"interval out of range")));
3239 double month_remainder_days,
3243 orig_day = span->
day;
3248 result_double = span->
month * factor;
3249 if (isnan(result_double) ||
3250 result_double > INT_MAX || result_double < INT_MIN)
3252 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
3253 errmsg(
"interval out of range")));
3256 result_double = span->
day * factor;
3257 if (isnan(result_double) ||
3258 result_double > INT_MAX || result_double < INT_MIN)
3260 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
3261 errmsg(
"interval out of range")));
3262 result->
day = (
int32) result_double;
3283 month_remainder_days =
TSROUND(month_remainder_days);
3284 sec_remainder = (orig_day * factor - result->
day +
3285 month_remainder_days - (int) month_remainder_days) *
SECS_PER_DAY;
3286 sec_remainder =
TSROUND(sec_remainder);
3300 result->
day += (
int32) month_remainder_days;
3304 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
3305 errmsg(
"interval out of range")));
3306 result->
time = (int64) result_double;
3326 double month_remainder_days,
3329 orig_day = span->
day;
3336 (
errcode(ERRCODE_DIVISION_BY_ZERO),
3337 errmsg(
"division by zero")));
3346 month_remainder_days =
TSROUND(month_remainder_days);
3347 sec_remainder = (orig_day / factor - result->
day +
3348 month_remainder_days - (int) month_remainder_days) *
SECS_PER_DAY;
3349 sec_remainder =
TSROUND(sec_remainder);
3357 result->
day += (
int32) month_remainder_days;
3385 (
errcode(ERRCODE_INVALID_PRECEDING_OR_FOLLOWING_SIZE),
3386 errmsg(
"invalid preceding or following size in window function")));
3416 (
errcode(ERRCODE_INVALID_PRECEDING_OR_FOLLOWING_SIZE),
3417 errmsg(
"invalid preceding or following size in window function")));
3447 (
errcode(ERRCODE_INVALID_PRECEDING_OR_FOLLOWING_SIZE),
3448 errmsg(
"invalid preceding or following size in window function")));
3490 INTERVALOID,
sizeof(
Interval),
false, TYPALIGN_DOUBLE,
3491 &transdatums, NULL, &ndatums);
3493 elog(
ERROR,
"expected 2-element interval array");
3507 INTERVALOID,
sizeof(
Interval),
false, TYPALIGN_DOUBLE);
3517 Datum *transdatums1;
3518 Datum *transdatums2;
3530 INTERVALOID,
sizeof(
Interval),
false, TYPALIGN_DOUBLE,
3531 &transdatums1, NULL, &ndatums1);
3533 elog(
ERROR,
"expected 2-element interval array");
3539 INTERVALOID,
sizeof(
Interval),
false, TYPALIGN_DOUBLE,
3540 &transdatums2, NULL, &ndatums2);
3542 elog(
ERROR,
"expected 2-element interval array");
3556 INTERVALOID,
sizeof(
Interval),
false, TYPALIGN_DOUBLE);
3574 INTERVALOID,
sizeof(
Interval),
false, TYPALIGN_DOUBLE,
3575 &transdatums, NULL, &ndatums);
3577 elog(
ERROR,
"expected 2-element interval array");
3591 INTERVALOID,
sizeof(
Interval),
false, TYPALIGN_DOUBLE);
3606 INTERVALOID,
sizeof(
Interval),
false, TYPALIGN_DOUBLE,
3607 &transdatums, NULL, &ndatums);
3609 elog(
ERROR,
"expected 2-element interval array");
3647 if (
timestamp2tm(dt1, NULL, tm1, &fsec1, NULL, NULL) == 0 &&
3651 tm->tm_usec = fsec1 - fsec2;
3662 tm->tm_usec = -
tm->tm_usec;
3672 while (
tm->tm_usec < 0)
3719 tm->tm_usec = -
tm->tm_usec;
3730 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
3731 errmsg(
"interval out of range")));
3735 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
3736 errmsg(
"timestamp out of range")));
3767 if (
timestamp2tm(dt1, &tz1, tm1, &fsec1, NULL, NULL) == 0 &&
3771 tm->tm_usec = fsec1 - fsec2;
3782 tm->tm_usec = -
tm->tm_usec;
3792 while (
tm->tm_usec < 0)
3843 tm->tm_usec = -
tm->tm_usec;
3854 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
3855 errmsg(
"interval out of range")));
3859 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
3860 errmsg(
"timestamp out of range")));
3890 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
3891 errmsg(
"origin out of range")));
3893 if (stride->
month != 0)
3895 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
3896 errmsg(
"timestamps cannot be binned into intervals containing months or years")));
3900 if (stride_usecs <= 0)
3902 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
3903 errmsg(
"stride must be greater than zero")));
3906 tm_delta = tm_diff - tm_diff % stride_usecs;
3912 if (origin >
timestamp && stride_usecs > 1)
3913 tm_delta -= stride_usecs;
3915 result = origin + tm_delta;
3949 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
3950 errmsg(
"timestamp out of range")));
4023 fsec = (fsec / 1000) * 1000;
4031 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
4032 errmsg(
"unit \"%s\" not supported for type %s",
4039 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
4040 errmsg(
"timestamp out of range")));
4045 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
4046 errmsg(
"unit \"%s\" not recognized for type %s",
4073 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
4074 errmsg(
"origin out of range")));
4076 if (stride->
month != 0)
4078 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
4079 errmsg(
"timestamps cannot be binned into intervals containing months or years")));
4083 if (stride_usecs <= 0)
4085 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
4086 errmsg(
"stride must be greater than zero")));
4089 tm_delta = tm_diff - tm_diff % stride_usecs;
4095 if (origin >
timestamp && stride_usecs > 1)
4096 tm_delta -= stride_usecs;
4098 result = origin + tm_delta;
4116 bool redotz =
false;
4132 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
4133 errmsg(
"timestamp out of range")));
4217 fsec = (fsec / 1000) * 1000;
4224 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
4225 errmsg(
"unit \"%s\" not supported for type %s",
4235 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
4236 errmsg(
"timestamp out of range")));
4241 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
4242 errmsg(
"unit \"%s\" not recognized for type %s",
4318 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
4319 errmsg(
"time zone \"%s\" not recognized", tzname)));
4389 tm->tm_usec = (
tm->tm_usec / 1000) * 1000;
4396 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
4397 errmsg(
"unit \"%s\" not supported for type %s",
4404 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
4405 errmsg(
"interval out of range")));
4410 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
4411 errmsg(
"unit \"%s\" not recognized for type %s",
4430 day4 =
date2j(year, 1, 4);
4433 day0 =
j2day(day4 - 1);
4435 return ((week - 1) * 7) + (day4 - day0);
4467 j2date(jday, year, mon, mday);
4483 dayn =
date2j(year, mon, mday);
4486 day4 =
date2j(year, 1, 4);
4489 day0 =
j2day(day4 - 1);
4495 if (dayn < day4 - day0)
4497 day4 =
date2j(year - 1, 1, 4);
4500 day0 =
j2day(day4 - 1);
4503 result = (dayn - (day4 - day0)) / 7 + 1;
4511 day4 =
date2j(year + 1, 1, 4);
4514 day0 =
j2day(day4 - 1);
4516 if (dayn >= day4 - day0)
4517 result = (dayn - (day4 - day0)) / 7 + 1;
4520 return (
int) result;
4538 dayn =
date2j(year, mon, mday);
4541 day4 =
date2j(year, 1, 4);
4544 day0 =
j2day(day4 - 1);
4550 if (dayn < day4 - day0)
4552 day4 =
date2j(year - 1, 1, 4);
4555 day0 =
j2day(day4 - 1);
4560 result = (dayn - (day4 - day0)) / 7 + 1;
4568 day4 =
date2j(year + 1, 1, 4);
4571 day0 =
j2day(day4 - 1);
4573 if (dayn >= day4 - day0)
4605 bool isNegative,
bool isTz)
4609 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
4610 errmsg(
"unit \"%s\" not recognized for type %s",
4649 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
4650 errmsg(
"unit \"%s\" not supported for type %s",
4714 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
4715 errmsg(
"timestamp out of range")));
4720 intresult =
tm->
tm_sec * INT64CONST(1000000) + fsec;
4762 intresult = (
tm->
tm_mon - 1) / 3 + 1;
4787 intresult = -((8 - (
tm->
tm_year - 1)) / 10);
4802 intresult = -((99 - (
tm->
tm_year - 1)) / 100);
4810 intresult = -((999 - (
tm->
tm_year - 1)) / 1000);
4850 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
4851 errmsg(
"unit \"%s\" not supported for type %s",
4897 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
4898 errmsg(
"unit \"%s\" not supported for type %s",
4906 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
4907 errmsg(
"unit \"%s\" not recognized for type %s",
4988 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
4989 errmsg(
"timestamp out of range")));
5006 intresult =
tm->
tm_sec * INT64CONST(1000000) + fsec;
5048 intresult = (
tm->
tm_mon - 1) / 3 + 1;
5068 intresult = -((8 - (
tm->
tm_year - 1)) / 10);
5076 intresult = -((99 - (
tm->
tm_year - 1)) / 100);
5084 intresult = -((999 - (
tm->
tm_year - 1)) / 1000);
5121 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
5122 errmsg(
"unit \"%s\" not supported for type %s",
5168 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
5169 errmsg(
"unit \"%s\" not supported for type %s",
5177 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
5178 errmsg(
"unit \"%s\" not recognized for type %s",