diff options
Diffstat (limited to 'src/backend/utils/adt/datetime.c')
-rw-r--r-- | src/backend/utils/adt/datetime.c | 110 |
1 files changed, 2 insertions, 108 deletions
diff --git a/src/backend/utils/adt/datetime.c b/src/backend/utils/adt/datetime.c index 8424372bfe..30db3bf7e5 100644 --- a/src/backend/utils/adt/datetime.c +++ b/src/backend/utils/adt/datetime.c @@ -43,11 +43,6 @@ static int DecodeTime(char *str, int fmask, int range, static const datetkn *datebsearch(const char *key, const datetkn *base, int nel); static int DecodeDate(char *str, int fmask, int *tmask, bool *is2digits, struct pg_tm * tm); - -#ifndef HAVE_INT64_TIMESTAMP -static char *TrimTrailingZeros(char *str); -#endif /* HAVE_INT64_TIMESTAMP */ - static char *AppendSeconds(char *cp, int sec, fsec_t fsec, int precision, bool fillzeros); static void AdjustFractSeconds(double frac, struct pg_tm * tm, fsec_t *fsec, @@ -401,28 +396,6 @@ GetCurrentTimeUsec(struct pg_tm * tm, fsec_t *fsec, int *tzp) } -/* TrimTrailingZeros() - * ... resulting from printing numbers with full precision. - * - * Returns a pointer to the new end of string. No NUL terminator is put - * there; callers are responsible for NUL terminating str themselves. - * - * Before Postgres 8.4, this always left at least 2 fractional digits, - * but conversations on the lists suggest this isn't desired - * since showing '0.10' is misleading with values of precision(1). - */ -#ifndef HAVE_INT64_TIMESTAMP -static char * -TrimTrailingZeros(char *str) -{ - int len = strlen(str); - - while (len > 1 && *(str + len - 1) == '0' && *(str + len - 2) != '.') - len--; - return str + len; -} -#endif /* HAVE_INT64_TIMESTAMP */ - /* * Append seconds and fractional seconds (if any) at *cp. * @@ -439,14 +412,12 @@ AppendSeconds(char *cp, int sec, fsec_t fsec, int precision, bool fillzeros) { Assert(precision >= 0); -#ifdef HAVE_INT64_TIMESTAMP - /* fsec_t is just an int32 */ - if (fillzeros) cp = pg_ltostr_zeropad(cp, Abs(sec), 2); else cp = pg_ltostr(cp, Abs(sec)); + /* fsec_t is just an int32 */ if (fsec != 0) { int32 value = Abs(fsec); @@ -490,25 +461,6 @@ AppendSeconds(char *cp, int sec, fsec_t fsec, int precision, bool fillzeros) } else return cp; -#else - /* fsec_t is a double */ - - if (fsec == 0) - { - if (fillzeros) - return pg_ltostr_zeropad(cp, Abs(sec), 2); - else - return pg_ltostr(cp, Abs(sec)); - } - else - { - if (fillzeros) - sprintf(cp, "%0*.*f", precision + 3, precision, fabs(sec + fsec)); - else - sprintf(cp, "%.*f", precision, fabs(sec + fsec)); - return TrimTrailingZeros(cp); - } -#endif /* HAVE_INT64_TIMESTAMP */ } @@ -521,14 +473,6 @@ AppendSeconds(char *cp, int sec, fsec_t fsec, int precision, bool fillzeros) static char * AppendTimestampSeconds(char *cp, struct pg_tm * tm, fsec_t fsec) { - /* - * In float mode, don't print fractional seconds before 1 AD, since it's - * unlikely there's any precision left ... - */ -#ifndef HAVE_INT64_TIMESTAMP - if (tm->tm_year <= 0) - fsec = 0; -#endif return AppendSeconds(cp, tm->tm_sec, fsec, MAX_TIMESTAMP_PRECISION, true); } @@ -547,11 +491,7 @@ AdjustFractSeconds(double frac, struct pg_tm * tm, fsec_t *fsec, int scale) sec = (int) frac; tm->tm_sec += sec; frac -= sec; -#ifdef HAVE_INT64_TIMESTAMP *fsec += rint(frac * 1000000); -#else - *fsec += frac; -#endif } /* As above, but initial scale produces days */ @@ -582,11 +522,7 @@ ParseFractionalSecond(char *cp, fsec_t *fsec) /* check for parse failure */ if (*cp != '\0' || errno != 0) return DTERR_BAD_FORMAT; -#ifdef HAVE_INT64_TIMESTAMP *fsec = rint(frac * 1000000); -#else - *fsec = frac; -#endif return 0; } @@ -1162,12 +1098,7 @@ DecodeDateTime(char **field, int *ftype, int nf, time = strtod(cp, &cp); if (*cp != '\0' || errno != 0) return DTERR_BAD_FORMAT; - -#ifdef HAVE_INT64_TIMESTAMP time *= USECS_PER_DAY; -#else - time *= SECS_PER_DAY; -#endif dt2time(time, &tm->tm_hour, &tm->tm_min, &tm->tm_sec, fsec); @@ -2070,12 +2001,7 @@ DecodeTimeOnly(char **field, int *ftype, int nf, time = strtod(cp, &cp); if (*cp != '\0' || errno != 0) return DTERR_BAD_FORMAT; - -#ifdef HAVE_INT64_TIMESTAMP time *= USECS_PER_DAY; -#else - time *= SECS_PER_DAY; -#endif dt2time(time, &tm->tm_hour, &tm->tm_min, &tm->tm_sec, fsec); @@ -2338,12 +2264,7 @@ DecodeTimeOnly(char **field, int *ftype, int nf, /* test for > 24:00:00 */ (tm->tm_hour == HOURS_PER_DAY && (tm->tm_min > 0 || tm->tm_sec > 0 || *fsec > 0)) || -#ifdef HAVE_INT64_TIMESTAMP - *fsec < INT64CONST(0) || *fsec > USECS_PER_SEC -#else - *fsec < 0 || *fsec > 1 -#endif - ) + *fsec < INT64CONST(0) || *fsec > USECS_PER_SEC) return DTERR_FIELD_OVERFLOW; if ((fmask & DTK_TIME_M) != DTK_TIME_M) @@ -2695,18 +2616,11 @@ DecodeTime(char *str, int fmask, int range, return DTERR_BAD_FORMAT; /* do a sanity check */ -#ifdef HAVE_INT64_TIMESTAMP if (tm->tm_hour < 0 || tm->tm_min < 0 || tm->tm_min > MINS_PER_HOUR - 1 || tm->tm_sec < 0 || tm->tm_sec > SECS_PER_MINUTE || *fsec < INT64CONST(0) || *fsec > USECS_PER_SEC) return DTERR_FIELD_OVERFLOW; -#else - if (tm->tm_hour < 0 || tm->tm_min < 0 || tm->tm_min > MINS_PER_HOUR - 1 || - tm->tm_sec < 0 || tm->tm_sec > SECS_PER_MINUTE || - *fsec < 0 || *fsec > 1) - return DTERR_FIELD_OVERFLOW; -#endif return 0; } @@ -2923,11 +2837,7 @@ DecodeNumberField(int len, char *str, int fmask, frac = strtod(cp, NULL); if (errno != 0) return DTERR_BAD_FORMAT; -#ifdef HAVE_INT64_TIMESTAMP *fsec = rint(frac * 1000000); -#else - *fsec = frac; -#endif /* Now truncate off the fraction for further processing */ *cp = '\0'; len = strlen(str); @@ -3336,11 +3246,7 @@ DecodeInterval(char **field, int *ftype, int nf, int range, switch (type) { case DTK_MICROSEC: -#ifdef HAVE_INT64_TIMESTAMP *fsec += rint(val + fval); -#else - *fsec += (val + fval) * 1e-6; -#endif tmask = DTK_M(MICROSECOND); break; @@ -3348,21 +3254,13 @@ DecodeInterval(char **field, int *ftype, int nf, int range, /* avoid overflowing the fsec field */ tm->tm_sec += val / 1000; val -= (val / 1000) * 1000; -#ifdef HAVE_INT64_TIMESTAMP *fsec += rint((val + fval) * 1000); -#else - *fsec += (val + fval) * 1e-3; -#endif tmask = DTK_M(MILLISECOND); break; case DTK_SECOND: tm->tm_sec += val; -#ifdef HAVE_INT64_TIMESTAMP *fsec += rint(fval * 1000000); -#else - *fsec += fval; -#endif /* * If any subseconds were specified, consider this @@ -3484,12 +3382,8 @@ DecodeInterval(char **field, int *ftype, int nf, int range, { int sec; -#ifdef HAVE_INT64_TIMESTAMP sec = *fsec / USECS_PER_SEC; *fsec -= sec * USECS_PER_SEC; -#else - TMODULO(*fsec, sec, 1.0); -#endif tm->tm_sec += sec; } |