10#error -ffast-math is known to break this code
346 for (
i =
nf - 1;
i >= 0;
i--)
365 Assert(*field[
i] ==
'-' || *field[
i] ==
'+');
376 if (*field[
i] ==
'-')
450 if (*field[
i] ==
'-')
462 if (*field[
i] ==
'-')
465 else if (*
cp ==
'\0')
480 *fsec +=
rint((
val + fval) * 1000);
486 *fsec +=
rint(fval * 1000000);
630 for (
i = 1;
i <
nf;
i++)
632 if (*field[
i] ==
'-' || *field[
i] ==
'+')
710 (
value != 1) ?
"s" :
"");
784 min < 0 || sec < 0 || fsec < 0;
787 min > 0 || sec > 0 || fsec > 0;
790 min != 0 || sec != 0 || fsec != 0;
822 char year_sign = (year < 0 || mon < 0) ?
'-' :
'+';
825 sec < 0 || fsec < 0) ?
'-' :
'+';
856 if (year == 0 && mon == 0 &&
mday == 0 &&
857 hour == 0 && min == 0 && sec == 0 && fsec == 0)
866 if (
hour != 0 || min != 0 || sec != 0 || fsec != 0)
870 if (sec != 0 || fsec != 0)
872 if (sec < 0 || fsec < 0)
886 if (
is_zero ||
hour != 0 || min != 0 || sec != 0 || fsec != 0)
888 bool minus = (
hour < 0 || min < 0 || sec < 0 || fsec < 0);
909 if (sec != 0 || fsec != 0)
912 if (sec < 0 || (sec == 0 && fsec < 0))
925 (
abs(sec) != 1 || fsec != 0) ?
"s" :
"");
1015 char **ptr = (endptr !=
NULL) ? endptr : &
realptr;
int DecodeUnits(int field, const char *lowtoken, int *val)
int ParseDateTime(const char *timestr, char *workbuf, size_t buflen, char **field, int *ftype, int maxfields, int *numfields)
static int DecodeTime(char *str, int fmask, int range, int *tmask, struct pg_tm *tm, fsec_t *fsec)
#define Assert(condition)
#define MAX_INTERVAL_PRECISION
void TrimTrailingZeros(char *str)
#define DTERR_FIELD_OVERFLOW
char * pgtypes_strdup(const char *str)
char * pgtypes_alloc(long size)
interval * PGTYPESinterval_new(void)
void PGTYPESinterval_free(interval *intvl)
static char * AddISO8601IntPart(char *cp, int value, char units)
static void AdjustFractDays(double frac, struct tm *tm, fsec_t *fsec, int scale)
static int DecodeISO8601Interval(char *str, int *dtype, struct tm *tm, fsec_t *fsec)
int PGTYPESinterval_copy(interval *intvlsrc, interval *intvldest)
static int interval2tm(interval span, struct tm *tm, fsec_t *fsec)
static int tm2interval(struct tm *tm, fsec_t fsec, interval *span)
void EncodeInterval(struct tm *tm, fsec_t fsec, int style, char *str)
static int ParseISO8601Number(const char *str, char **endptr, int *ipart, double *fpart)
static void ClearPgTm(struct tm *tm, fsec_t *fsec)
static char * AddPostgresIntPart(char *cp, int value, const char *units, bool *is_zero, bool *is_before)
static void AdjustFractSeconds(double frac, struct tm *tm, fsec_t *fsec, int scale)
static void AppendSeconds(char *cp, int sec, fsec_t fsec, int precision, bool fillzeros)
int DecodeInterval(char **field, int *ftype, int nf, int *dtype, struct tm *tm, fsec_t *fsec)
interval * PGTYPESinterval_from_asc(char *str, char **endptr)
static char * AddVerboseIntPart(char *cp, int value, const char *units, bool *is_zero, bool *is_before)
char * PGTYPESinterval_to_asc(interval *span)
static int ISO8601IntegerWidth(const char *fieldstart)
#define INTSTYLE_SQL_STANDARD
#define INTSTYLE_POSTGRES_VERBOSE
#define INTSTYLE_ISO_8601
#define INTSTYLE_POSTGRES
static char buf[DEFAULT_XLOG_SEG_SIZE]
#define PGTYPES_INTVL_BAD_INTERVAL
static struct cvec * range(struct vars *v, chr a, chr b, int cases)
int strtoint(const char *pg_restrict str, char **pg_restrict endptr, int base)
#define INTERVAL_FULL_RANGE