342 for (
i =
nf - 1;
i >= 0;
i--)
361 Assert(*field[
i] ==
'-' || *field[
i] ==
'+');
372 if (*field[
i] ==
'-')
446 if (*field[
i] ==
'-')
458 if (*field[
i] ==
'-')
461 else if (*
cp ==
'\0')
476 *fsec +=
rint((
val + fval) * 1000);
482 *fsec +=
rint(fval * 1000000);
626 for (
i = 1;
i <
nf;
i++)
628 if (*field[
i] ==
'-' || *field[
i] ==
'+')
706 (
value != 1) ?
"s" :
"");
780 min < 0 || sec < 0 || fsec < 0;
783 min > 0 || sec > 0 || fsec > 0;
786 min != 0 || sec != 0 || fsec != 0;
818 char year_sign = (year < 0 || mon < 0) ?
'-' :
'+';
821 sec < 0 || fsec < 0) ?
'-' :
'+';
852 if (year == 0 && mon == 0 &&
mday == 0 &&
853 hour == 0 && min == 0 && sec == 0 && fsec == 0)
862 if (
hour != 0 || min != 0 || sec != 0 || fsec != 0)
866 if (sec != 0 || fsec != 0)
868 if (sec < 0 || fsec < 0)
882 if (
is_zero ||
hour != 0 || min != 0 || sec != 0 || fsec != 0)
884 bool minus = (
hour < 0 || min < 0 || sec < 0 || fsec < 0);
905 if (sec != 0 || fsec != 0)
908 if (sec < 0 || (sec == 0 && fsec < 0))
921 (
abs(sec) != 1 || fsec != 0) ?
"s" :
"");
1011 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