47 #error -ffast-math is known to break this code
50 #define SAMESIGN(a,b) (((a) < 0) == ((b) < 0))
99 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
100 errmsg(
"invalid type modifier")));
111 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
112 errmsg(
"TIMESTAMP(%d)%s precision must not be negative",
113 typmod, (istz ?
" WITH TIME ZONE" :
""))));
117 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
118 errmsg(
"TIMESTAMP(%d)%s precision reduced to maximum allowed, %d",
119 typmod, (istz ?
" WITH TIME ZONE" :
""),
131 const char *tz = istz ?
" with time zone" :
" without time zone";
134 return psprintf(
"(%d)%s", (
int) typmod, tz);
155 Node *escontext = fcinfo->context;
173 &dtype,
tm, &fsec, &tz, &extra);
185 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
186 errmsg(
"timestamp out of range: \"%s\"",
str)));
202 elog(
ERROR,
"unexpected dtype %d while parsing timestamp \"%s\"",
231 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
232 errmsg(
"timestamp out of range")));
263 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
264 errmsg(
"timestamp out of range")));
377 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
378 errmsg(
"timestamp(%d) precision must be between %d and %d",
381 if (*time >= INT64CONST(0))
383 *time = ((*time + TimestampOffsets[typmod]) / TimestampScales[typmod]) *
384 TimestampScales[typmod];
388 *time = -((((-*time) + TimestampOffsets[typmod]) / TimestampScales[typmod])
389 * TimestampScales[typmod]);
407 Node *escontext = fcinfo->context;
425 &dtype,
tm, &fsec, &tz, &extra);
438 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
439 errmsg(
"timestamp out of range: \"%s\"",
str)));
455 elog(
ERROR,
"unexpected dtype %d while parsing timestamptz \"%s\"",
491 if (isdigit((
unsigned char) *tzname))
493 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
494 errmsg(
"invalid input syntax for type %s: \"%s\"",
495 "numeric time zone", tzname),
496 errhint(
"Numeric time zones must have \"-\" or \"+\" as first character.")));
507 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
508 errmsg(
"numeric time zone \"%s\" out of range", tzname)));
511 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
512 errmsg(
"time zone \"%s\" not recognized", tzname)));
557 int hour,
int min,
double sec)
581 (
errcode(ERRCODE_DATETIME_FIELD_OVERFLOW),
582 errmsg(
"date field value out of range: %d-%02d-%02d",
587 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
588 errmsg(
"date out of range: %d-%02d-%02d",
596 (
errcode(ERRCODE_DATETIME_FIELD_OVERFLOW),
597 errmsg(
"time field value out of range: %d:%02d:%02g",
608 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
609 errmsg(
"timestamp out of range: %d-%02d-%02d %d:%02d:%02g",
615 if ((result < 0 && date > 0) ||
616 (result > 0 &&
date < -1))
618 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
619 errmsg(
"timestamp out of range: %d-%02d-%02d %d:%02d:%02g",
626 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
627 errmsg(
"timestamp out of range: %d-%02d-%02d %d:%02d:%02g",
699 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
700 errmsg(
"timestamp out of range")));
708 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
709 errmsg(
"timestamp out of range")));
727 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
728 errmsg(
"timestamp cannot be NaN")));
745 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
746 errmsg(
"timestamp out of range: \"%g\"", seconds)));
752 result = (int64) seconds;
757 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
758 errmsg(
"timestamp out of range: \"%g\"",
786 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
787 errmsg(
"timestamp out of range")));
819 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
820 errmsg(
"timestamp out of range")));
891 Node *escontext = fcinfo->context;
940 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
941 errmsg(
"interval out of range")));
945 elog(
ERROR,
"unexpected dtype %d while parsing interval \"%s\"",
1064 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
1065 errmsg(
"invalid INTERVAL type modifier")));
1080 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
1081 errmsg(
"INTERVAL(%d) precision must not be negative",
1086 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
1087 errmsg(
"INTERVAL(%d) precision reduced to maximum allowed, %d",
1097 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
1098 errmsg(
"invalid INTERVAL type modifier")));
1112 const char *fieldstr;
1129 fieldstr =
" month";
1138 fieldstr =
" minute";
1141 fieldstr =
" second";
1144 fieldstr =
" year to month";
1147 fieldstr =
" day to hour";
1150 fieldstr =
" day to minute";
1153 fieldstr =
" day to second";
1156 fieldstr =
" hour to minute";
1159 fieldstr =
" hour to second";
1162 fieldstr =
" minute to second";
1168 elog(
ERROR,
"invalid INTERVAL typmod: 0x%x", typmod);
1228 elog(
ERROR,
"invalid INTERVAL typmod: 0x%x", typmod);
1271 int old_least_field;
1272 int new_least_field;
1290 noop = (new_least_field <= old_least_field) &&
1291 (old_least_field > 0 ||
1293 new_precis >= old_precis);
1334 INT64CONST(1000000),
1465 elog(
ERROR,
"unrecognized interval typmod: %d", typmod);
1472 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
1473 errmsg(
"interval(%d) precision must be between %d and %d",
1479 IntervalOffsets[precision]) /
1480 IntervalScales[precision]) *
1481 IntervalScales[precision];
1486 IntervalOffsets[precision]) /
1487 IntervalScales[precision]) *
1488 IntervalScales[precision]);
1515 if (isinf(secs) || isnan(secs))
1517 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
1518 errmsg(
"interval out of range")));
1522 result->
day = weeks * 7 +
days;
1543 elog(
ERROR,
"invalid argument for EncodeSpecialTimestamp");
1660 long *secs,
int *microsecs)
1704 return (
long) INT_MAX;
1705 if (diff >= (INT_MAX * INT64CONST(1000) - 999))
1706 return (
long) INT_MAX;
1708 return (
long) ((diff + 999) / 1000);
1725 return (diff >= msec * INT64CONST(1000));
1837 if (attimezone == NULL)
1843 if (time < INT64CONST(0))
1950 if ((*result < 0 && date > 0) ||
1951 (*result > 0 &&
date < -1))
1957 *result =
dt2local(*result, -(*tzp));
1991 itm->
tm_min = (int) tfrac;
1994 itm->
tm_sec = (int) tfrac;
2007 if (total_months > INT_MAX || total_months < INT_MIN)
2036 if (total_months > INT_MAX || total_months < INT_MIN)
2091 elog(
ERROR,
"could not convert epoch to timestamp: %m");
2127 return (dt1 < dt2) ? -1 : ((dt1 > dt2) ? 1 : 0);
2193 #if SIZEOF_DATUM < 8
2210 #if SIZEOF_DATUM >= 8
2553 #define TIMESTAMP_GT(t1,t2) \
2554 DatumGetBool(DirectFunctionCall2(timestamp_gt,t1,t2))
2555 #define TIMESTAMP_LT(t1,t2) \
2556 DatumGetBool(DirectFunctionCall2(timestamp_lt,t1,t2))
2571 else if (!te1IsNull)
2591 else if (!te2IsNull)
2647 if (te1IsNull || te2IsNull)
2702 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
2703 errmsg(
"cannot subtract infinite timestamps")));
2707 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
2708 errmsg(
"interval out of range")));
2770 if ((result->
day > 0 && result->
time > 0) ||
2771 (result->
day < 0 && result->
time < 0))
2777 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
2778 errmsg(
"interval out of range")));
2788 result->
day += wholeday;
2794 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
2795 errmsg(
"interval out of range")));
2797 if (result->
month > 0 &&
2798 (result->
day < 0 || (result->
day == 0 && result->
time < 0)))
2803 else if (result->
month < 0 &&
2804 (result->
day > 0 || (result->
day == 0 && result->
time > 0)))
2810 if (result->
day > 0 && result->
time < 0)
2815 else if (result->
day < 0 && result->
time > 0)
2847 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
2848 errmsg(
"interval out of range")));
2850 if (result->
day > 0 && result->
time < 0)
2855 else if (result->
day < 0 && result->
time > 0)
2886 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
2887 errmsg(
"interval out of range")));
2889 if (result->
month > 0 && result->
day < 0)
2894 else if (result->
month < 0 && result->
day > 0)
2924 if (span->
month != 0)
2932 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
2933 errmsg(
"timestamp out of range")));
2953 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
2954 errmsg(
"timestamp out of range")));
2966 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
2967 errmsg(
"timestamp out of range")));
2975 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
2976 errmsg(
"timestamp out of range")));
2983 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
2984 errmsg(
"timestamp out of range")));
3033 if (attimezone == NULL)
3036 if (span->
month != 0)
3044 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
3045 errmsg(
"timestamp out of range")));
3067 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
3068 errmsg(
"timestamp out of range")));
3080 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
3081 errmsg(
"timestamp out of range")));
3091 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
3092 errmsg(
"timestamp out of range")));
3099 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
3100 errmsg(
"timestamp out of range")));
3183 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
3184 errmsg(
"interval out of range")));
3188 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
3189 errmsg(
"interval out of range")));
3193 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
3194 errmsg(
"interval out of range")));
3243 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
3244 errmsg(
"interval out of range")));
3250 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
3251 errmsg(
"interval out of range")));
3257 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
3258 errmsg(
"interval out of range")));
3277 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
3278 errmsg(
"interval out of range")));
3284 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
3285 errmsg(
"interval out of range")));
3291 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
3292 errmsg(
"interval out of range")));
3308 double month_remainder_days,
3312 orig_day = span->
day;
3317 result_double = span->
month * factor;
3318 if (isnan(result_double) ||
3319 result_double > INT_MAX || result_double < INT_MIN)
3321 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
3322 errmsg(
"interval out of range")));
3325 result_double = span->
day * factor;
3326 if (isnan(result_double) ||
3327 result_double > INT_MAX || result_double < INT_MIN)
3329 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
3330 errmsg(
"interval out of range")));
3331 result->
day = (
int32) result_double;
3352 month_remainder_days =
TSROUND(month_remainder_days);
3353 sec_remainder = (orig_day * factor - result->
day +
3354 month_remainder_days - (int) month_remainder_days) *
SECS_PER_DAY;
3355 sec_remainder =
TSROUND(sec_remainder);
3369 result->
day += (
int32) month_remainder_days;
3373 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
3374 errmsg(
"interval out of range")));
3375 result->
time = (int64) result_double;
3395 double month_remainder_days,
3398 orig_day = span->
day;
3405 (
errcode(ERRCODE_DIVISION_BY_ZERO),
3406 errmsg(
"division by zero")));
3415 month_remainder_days =
TSROUND(month_remainder_days);
3416 sec_remainder = (orig_day / factor - result->
day +
3417 month_remainder_days - (int) month_remainder_days) *
SECS_PER_DAY;
3418 sec_remainder =
TSROUND(sec_remainder);
3426 result->
day += (
int32) month_remainder_days;
3454 (
errcode(ERRCODE_INVALID_PRECEDING_OR_FOLLOWING_SIZE),
3455 errmsg(
"invalid preceding or following size in window function")));
3481 (
errcode(ERRCODE_INVALID_PRECEDING_OR_FOLLOWING_SIZE),
3482 errmsg(
"invalid preceding or following size in window function")));
3512 (
errcode(ERRCODE_INVALID_PRECEDING_OR_FOLLOWING_SIZE),
3513 errmsg(
"invalid preceding or following size in window function")));
3555 INTERVALOID,
sizeof(
Interval),
false, TYPALIGN_DOUBLE,
3556 &transdatums, NULL, &ndatums);
3558 elog(
ERROR,
"expected 2-element interval array");
3572 INTERVALOID,
sizeof(
Interval),
false, TYPALIGN_DOUBLE);
3582 Datum *transdatums1;
3583 Datum *transdatums2;
3595 INTERVALOID,
sizeof(
Interval),
false, TYPALIGN_DOUBLE,
3596 &transdatums1, NULL, &ndatums1);
3598 elog(
ERROR,
"expected 2-element interval array");
3604 INTERVALOID,
sizeof(
Interval),
false, TYPALIGN_DOUBLE,
3605 &transdatums2, NULL, &ndatums2);
3607 elog(
ERROR,
"expected 2-element interval array");
3621 INTERVALOID,
sizeof(
Interval),
false, TYPALIGN_DOUBLE);
3639 INTERVALOID,
sizeof(
Interval),
false, TYPALIGN_DOUBLE,
3640 &transdatums, NULL, &ndatums);
3642 elog(
ERROR,
"expected 2-element interval array");
3656 INTERVALOID,
sizeof(
Interval),
false, TYPALIGN_DOUBLE);
3671 INTERVALOID,
sizeof(
Interval),
false, TYPALIGN_DOUBLE,
3672 &transdatums, NULL, &ndatums);
3674 elog(
ERROR,
"expected 2-element interval array");
3712 if (
timestamp2tm(dt1, NULL, tm1, &fsec1, NULL, NULL) == 0 &&
3716 tm->tm_usec = fsec1 - fsec2;
3727 tm->tm_usec = -
tm->tm_usec;
3737 while (
tm->tm_usec < 0)
3784 tm->tm_usec = -
tm->tm_usec;
3795 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
3796 errmsg(
"interval out of range")));
3800 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
3801 errmsg(
"timestamp out of range")));
3832 if (
timestamp2tm(dt1, &tz1, tm1, &fsec1, NULL, NULL) == 0 &&
3836 tm->tm_usec = fsec1 - fsec2;
3847 tm->tm_usec = -
tm->tm_usec;
3857 while (
tm->tm_usec < 0)
3908 tm->tm_usec = -
tm->tm_usec;
3919 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
3920 errmsg(
"interval out of range")));
3924 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
3925 errmsg(
"timestamp out of range")));
3955 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
3956 errmsg(
"origin out of range")));
3958 if (stride->
month != 0)
3960 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
3961 errmsg(
"timestamps cannot be binned into intervals containing months or years")));
3965 if (stride_usecs <= 0)
3967 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
3968 errmsg(
"stride must be greater than zero")));
3971 tm_delta = tm_diff - tm_diff % stride_usecs;
3977 if (origin >
timestamp && stride_usecs > 1)
3978 tm_delta -= stride_usecs;
3980 result = origin + tm_delta;
4014 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
4015 errmsg(
"timestamp out of range")));
4088 fsec = (fsec / 1000) * 1000;
4096 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
4097 errmsg(
"unit \"%s\" not supported for type %s",
4104 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
4105 errmsg(
"timestamp out of range")));
4110 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
4111 errmsg(
"unit \"%s\" not recognized for type %s",
4138 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
4139 errmsg(
"origin out of range")));
4141 if (stride->
month != 0)
4143 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
4144 errmsg(
"timestamps cannot be binned into intervals containing months or years")));
4148 if (stride_usecs <= 0)
4150 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
4151 errmsg(
"stride must be greater than zero")));
4154 tm_delta = tm_diff - tm_diff % stride_usecs;
4160 if (origin >
timestamp && stride_usecs > 1)
4161 tm_delta -= stride_usecs;
4163 result = origin + tm_delta;
4181 bool redotz =
false;
4197 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
4198 errmsg(
"timestamp out of range")));
4282 fsec = (fsec / 1000) * 1000;
4289 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
4290 errmsg(
"unit \"%s\" not supported for type %s",
4300 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
4301 errmsg(
"timestamp out of range")));
4306 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
4307 errmsg(
"unit \"%s\" not recognized for type %s",
4424 tm->tm_usec = (
tm->tm_usec / 1000) * 1000;
4431 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
4432 errmsg(
"unit \"%s\" not supported for type %s",
4439 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
4440 errmsg(
"interval out of range")));
4445 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
4446 errmsg(
"unit \"%s\" not recognized for type %s",
4465 day4 =
date2j(year, 1, 4);
4468 day0 =
j2day(day4 - 1);
4470 return ((week - 1) * 7) + (day4 - day0);
4502 j2date(jday, year, mon, mday);
4518 dayn =
date2j(year, mon, mday);
4521 day4 =
date2j(year, 1, 4);
4524 day0 =
j2day(day4 - 1);
4530 if (dayn < day4 - day0)
4532 day4 =
date2j(year - 1, 1, 4);
4535 day0 =
j2day(day4 - 1);
4538 result = (dayn - (day4 - day0)) / 7 + 1;
4546 day4 =
date2j(year + 1, 1, 4);
4549 day0 =
j2day(day4 - 1);
4551 if (dayn >= day4 - day0)
4552 result = (dayn - (day4 - day0)) / 7 + 1;
4555 return (
int) result;
4573 dayn =
date2j(year, mon, mday);
4576 day4 =
date2j(year, 1, 4);
4579 day0 =
j2day(day4 - 1);
4585 if (dayn < day4 - day0)
4587 day4 =
date2j(year - 1, 1, 4);
4590 day0 =
j2day(day4 - 1);
4595 result = (dayn - (day4 - day0)) / 7 + 1;
4603 day4 =
date2j(year + 1, 1, 4);
4606 day0 =
j2day(day4 - 1);
4608 if (dayn >= day4 - day0)
4640 bool isNegative,
bool isTz)
4644 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
4645 errmsg(
"unit \"%s\" not recognized for type %s",
4684 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
4685 errmsg(
"unit \"%s\" not supported for type %s",
4749 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
4750 errmsg(
"timestamp out of range")));
4755 intresult =
tm->
tm_sec * INT64CONST(1000000) + fsec;
4797 intresult = (
tm->
tm_mon - 1) / 3 + 1;
4822 intresult = -((8 - (
tm->
tm_year - 1)) / 10);
4837 intresult = -((99 - (
tm->
tm_year - 1)) / 100);
4845 intresult = -((999 - (
tm->
tm_year - 1)) / 1000);
4885 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
4886 errmsg(
"unit \"%s\" not supported for type %s",
4932 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
4933 errmsg(
"unit \"%s\" not supported for type %s",
4941 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
4942 errmsg(
"unit \"%s\" not recognized for type %s",
5023 (
errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
5024 errmsg(
"timestamp out of range")));
5041 intresult =
tm->
tm_sec * INT64CONST(1000000) + fsec;
5083 intresult = (
tm->
tm_mon - 1) / 3 + 1;
5103 intresult = -((8 - (
tm->
tm_year - 1)) / 10);
5111 intresult = -((99 - (
tm->
tm_year - 1)) / 100);
5119 intresult = -((999 - (
tm->
tm_year - 1)) / 1000);
5156 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
5157 errmsg(
"unit \"%s\" not supported for type %s",
5203 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
5204 errmsg(
"unit \"%s\" not supported for type %s",
5212 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),