mirror of
https://github.com/postgres/postgres.git
synced 2025-07-31 22:04:40 +03:00
8.4 pgindent run, with new combined Linux/FreeBSD/MinGW typedef list
provided by Andrew.
This commit is contained in:
@ -1,7 +1,7 @@
|
||||
/* -----------------------------------------------------------------------
|
||||
* formatting.c
|
||||
*
|
||||
* $PostgreSQL: pgsql/src/backend/utils/adt/formatting.c,v 1.156 2009/03/15 20:31:19 tgl Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/utils/adt/formatting.c,v 1.157 2009/06/11 14:49:03 momjian Exp $
|
||||
*
|
||||
*
|
||||
* Portions Copyright (c) 1999-2009, PostgreSQL Global Development Group
|
||||
@ -148,9 +148,9 @@ typedef struct
|
||||
*/
|
||||
typedef enum
|
||||
{
|
||||
FROM_CHAR_DATE_NONE = 0, /* Value does not affect date mode. */
|
||||
FROM_CHAR_DATE_GREGORIAN, /* Gregorian (day, month, year) style date */
|
||||
FROM_CHAR_DATE_ISOWEEK /* ISO 8601 week date */
|
||||
FROM_CHAR_DATE_NONE = 0, /* Value does not affect date mode. */
|
||||
FROM_CHAR_DATE_GREGORIAN, /* Gregorian (day, month, year) style date */
|
||||
FROM_CHAR_DATE_ISOWEEK /* ISO 8601 week date */
|
||||
} FromCharDateMode;
|
||||
|
||||
typedef struct FormatNode FormatNode;
|
||||
@ -286,9 +286,9 @@ static char *numth[] = {"st", "nd", "rd", "th", NULL};
|
||||
* Flags & Options:
|
||||
* ----------
|
||||
*/
|
||||
#define ONE_UPPER 1 /* Name */
|
||||
#define ALL_UPPER 2 /* NAME */
|
||||
#define ALL_LOWER 3 /* name */
|
||||
#define ONE_UPPER 1 /* Name */
|
||||
#define ALL_UPPER 2 /* NAME */
|
||||
#define ALL_LOWER 3 /* name */
|
||||
|
||||
#define FULL_SIZ 0
|
||||
|
||||
@ -421,8 +421,8 @@ typedef struct
|
||||
cc,
|
||||
j,
|
||||
us,
|
||||
yysz, /* is it YY or YYYY ? */
|
||||
clock; /* 12 or 24 hour clock? */
|
||||
yysz, /* is it YY or YYYY ? */
|
||||
clock; /* 12 or 24 hour clock? */
|
||||
} TmFromChar;
|
||||
|
||||
#define ZERO_tmfc(_X) memset(_X, 0, sizeof(TmFromChar))
|
||||
@ -709,94 +709,94 @@ typedef enum
|
||||
*/
|
||||
static const KeyWord DCH_keywords[] = {
|
||||
/* name, len, id, is_digit, date_mode */
|
||||
{"A.D.", 4, DCH_A_D, FALSE, FROM_CHAR_DATE_NONE}, /* A */
|
||||
{"A.D.", 4, DCH_A_D, FALSE, FROM_CHAR_DATE_NONE}, /* A */
|
||||
{"A.M.", 4, DCH_A_M, FALSE, FROM_CHAR_DATE_NONE},
|
||||
{"AD", 2, DCH_AD, FALSE, FROM_CHAR_DATE_NONE},
|
||||
{"AM", 2, DCH_AM, FALSE, FROM_CHAR_DATE_NONE},
|
||||
{"B.C.", 4, DCH_B_C, FALSE, FROM_CHAR_DATE_NONE}, /* B */
|
||||
{"B.C.", 4, DCH_B_C, FALSE, FROM_CHAR_DATE_NONE}, /* B */
|
||||
{"BC", 2, DCH_BC, FALSE, FROM_CHAR_DATE_NONE},
|
||||
{"CC", 2, DCH_CC, TRUE, FROM_CHAR_DATE_NONE}, /* C */
|
||||
{"DAY", 3, DCH_DAY, FALSE, FROM_CHAR_DATE_NONE}, /* D */
|
||||
{"CC", 2, DCH_CC, TRUE, FROM_CHAR_DATE_NONE}, /* C */
|
||||
{"DAY", 3, DCH_DAY, FALSE, FROM_CHAR_DATE_NONE}, /* D */
|
||||
{"DDD", 3, DCH_DDD, TRUE, FROM_CHAR_DATE_GREGORIAN},
|
||||
{"DD", 2, DCH_DD, TRUE, FROM_CHAR_DATE_GREGORIAN},
|
||||
{"DY", 2, DCH_DY, FALSE, FROM_CHAR_DATE_NONE},
|
||||
{"Day", 3, DCH_Day, FALSE, FROM_CHAR_DATE_NONE},
|
||||
{"Dy", 2, DCH_Dy, FALSE, FROM_CHAR_DATE_NONE},
|
||||
{"D", 1, DCH_D, TRUE, FROM_CHAR_DATE_GREGORIAN},
|
||||
{"FX", 2, DCH_FX, FALSE, FROM_CHAR_DATE_NONE}, /* F */
|
||||
{"HH24", 4, DCH_HH24, TRUE, FROM_CHAR_DATE_NONE}, /* H */
|
||||
{"FX", 2, DCH_FX, FALSE, FROM_CHAR_DATE_NONE}, /* F */
|
||||
{"HH24", 4, DCH_HH24, TRUE, FROM_CHAR_DATE_NONE}, /* H */
|
||||
{"HH12", 4, DCH_HH12, TRUE, FROM_CHAR_DATE_NONE},
|
||||
{"HH", 2, DCH_HH, TRUE, FROM_CHAR_DATE_NONE},
|
||||
{"IDDD", 4, DCH_IDDD, TRUE, FROM_CHAR_DATE_ISOWEEK}, /* I */
|
||||
{"IDDD", 4, DCH_IDDD, TRUE, FROM_CHAR_DATE_ISOWEEK}, /* I */
|
||||
{"ID", 2, DCH_ID, TRUE, FROM_CHAR_DATE_ISOWEEK},
|
||||
{"IW", 2, DCH_IW, TRUE, FROM_CHAR_DATE_ISOWEEK},
|
||||
{"IYYY", 4, DCH_IYYY, TRUE, FROM_CHAR_DATE_ISOWEEK},
|
||||
{"IYY", 3, DCH_IYY, TRUE, FROM_CHAR_DATE_ISOWEEK},
|
||||
{"IY", 2, DCH_IY, TRUE, FROM_CHAR_DATE_ISOWEEK},
|
||||
{"I", 1, DCH_I, TRUE, FROM_CHAR_DATE_ISOWEEK},
|
||||
{"J", 1, DCH_J, TRUE, FROM_CHAR_DATE_NONE}, /* J */
|
||||
{"MI", 2, DCH_MI, TRUE, FROM_CHAR_DATE_NONE}, /* M */
|
||||
{"J", 1, DCH_J, TRUE, FROM_CHAR_DATE_NONE}, /* J */
|
||||
{"MI", 2, DCH_MI, TRUE, FROM_CHAR_DATE_NONE}, /* M */
|
||||
{"MM", 2, DCH_MM, TRUE, FROM_CHAR_DATE_GREGORIAN},
|
||||
{"MONTH", 5, DCH_MONTH, FALSE, FROM_CHAR_DATE_GREGORIAN},
|
||||
{"MON", 3, DCH_MON, FALSE, FROM_CHAR_DATE_GREGORIAN},
|
||||
{"MS", 2, DCH_MS, TRUE, FROM_CHAR_DATE_NONE},
|
||||
{"Month", 5, DCH_Month, FALSE, FROM_CHAR_DATE_GREGORIAN},
|
||||
{"Mon", 3, DCH_Mon, FALSE, FROM_CHAR_DATE_GREGORIAN},
|
||||
{"P.M.", 4, DCH_P_M, FALSE, FROM_CHAR_DATE_NONE}, /* P */
|
||||
{"P.M.", 4, DCH_P_M, FALSE, FROM_CHAR_DATE_NONE}, /* P */
|
||||
{"PM", 2, DCH_PM, FALSE, FROM_CHAR_DATE_NONE},
|
||||
{"Q", 1, DCH_Q, TRUE, FROM_CHAR_DATE_NONE}, /* Q */
|
||||
{"RM", 2, DCH_RM, FALSE, FROM_CHAR_DATE_GREGORIAN}, /* R */
|
||||
{"SSSS", 4, DCH_SSSS, TRUE, FROM_CHAR_DATE_NONE}, /* S */
|
||||
{"Q", 1, DCH_Q, TRUE, FROM_CHAR_DATE_NONE}, /* Q */
|
||||
{"RM", 2, DCH_RM, FALSE, FROM_CHAR_DATE_GREGORIAN}, /* R */
|
||||
{"SSSS", 4, DCH_SSSS, TRUE, FROM_CHAR_DATE_NONE}, /* S */
|
||||
{"SS", 2, DCH_SS, TRUE, FROM_CHAR_DATE_NONE},
|
||||
{"TZ", 2, DCH_TZ, FALSE, FROM_CHAR_DATE_NONE}, /* T */
|
||||
{"US", 2, DCH_US, TRUE, FROM_CHAR_DATE_NONE}, /* U */
|
||||
{"WW", 2, DCH_WW, TRUE, FROM_CHAR_DATE_GREGORIAN}, /* W */
|
||||
{"TZ", 2, DCH_TZ, FALSE, FROM_CHAR_DATE_NONE}, /* T */
|
||||
{"US", 2, DCH_US, TRUE, FROM_CHAR_DATE_NONE}, /* U */
|
||||
{"WW", 2, DCH_WW, TRUE, FROM_CHAR_DATE_GREGORIAN}, /* W */
|
||||
{"W", 1, DCH_W, TRUE, FROM_CHAR_DATE_GREGORIAN},
|
||||
{"Y,YYY", 5, DCH_Y_YYY, TRUE, FROM_CHAR_DATE_GREGORIAN},/* Y */
|
||||
{"Y,YYY", 5, DCH_Y_YYY, TRUE, FROM_CHAR_DATE_GREGORIAN}, /* Y */
|
||||
{"YYYY", 4, DCH_YYYY, TRUE, FROM_CHAR_DATE_GREGORIAN},
|
||||
{"YYY", 3, DCH_YYY, TRUE, FROM_CHAR_DATE_GREGORIAN},
|
||||
{"YY", 2, DCH_YY, TRUE, FROM_CHAR_DATE_GREGORIAN},
|
||||
{"Y", 1, DCH_Y, TRUE, FROM_CHAR_DATE_GREGORIAN},
|
||||
{"a.d.", 4, DCH_a_d, FALSE, FROM_CHAR_DATE_NONE}, /* a */
|
||||
{"a.d.", 4, DCH_a_d, FALSE, FROM_CHAR_DATE_NONE}, /* a */
|
||||
{"a.m.", 4, DCH_a_m, FALSE, FROM_CHAR_DATE_NONE},
|
||||
{"ad", 2, DCH_ad, FALSE, FROM_CHAR_DATE_NONE},
|
||||
{"am", 2, DCH_am, FALSE, FROM_CHAR_DATE_NONE},
|
||||
{"b.c.", 4, DCH_b_c, FALSE, FROM_CHAR_DATE_NONE}, /* b */
|
||||
{"b.c.", 4, DCH_b_c, FALSE, FROM_CHAR_DATE_NONE}, /* b */
|
||||
{"bc", 2, DCH_bc, FALSE, FROM_CHAR_DATE_NONE},
|
||||
{"cc", 2, DCH_CC, TRUE, FROM_CHAR_DATE_NONE}, /* c */
|
||||
{"day", 3, DCH_day, FALSE, FROM_CHAR_DATE_NONE}, /* d */
|
||||
{"cc", 2, DCH_CC, TRUE, FROM_CHAR_DATE_NONE}, /* c */
|
||||
{"day", 3, DCH_day, FALSE, FROM_CHAR_DATE_NONE}, /* d */
|
||||
{"ddd", 3, DCH_DDD, TRUE, FROM_CHAR_DATE_GREGORIAN},
|
||||
{"dd", 2, DCH_DD, TRUE, FROM_CHAR_DATE_GREGORIAN},
|
||||
{"dy", 2, DCH_dy, FALSE, FROM_CHAR_DATE_NONE},
|
||||
{"d", 1, DCH_D, TRUE, FROM_CHAR_DATE_GREGORIAN},
|
||||
{"fx", 2, DCH_FX, FALSE, FROM_CHAR_DATE_NONE}, /* f */
|
||||
{"hh24", 4, DCH_HH24, TRUE, FROM_CHAR_DATE_NONE}, /* h */
|
||||
{"fx", 2, DCH_FX, FALSE, FROM_CHAR_DATE_NONE}, /* f */
|
||||
{"hh24", 4, DCH_HH24, TRUE, FROM_CHAR_DATE_NONE}, /* h */
|
||||
{"hh12", 4, DCH_HH12, TRUE, FROM_CHAR_DATE_NONE},
|
||||
{"hh", 2, DCH_HH, TRUE, FROM_CHAR_DATE_NONE},
|
||||
{"iddd", 4, DCH_IDDD, TRUE, FROM_CHAR_DATE_ISOWEEK}, /* i */
|
||||
{"iddd", 4, DCH_IDDD, TRUE, FROM_CHAR_DATE_ISOWEEK}, /* i */
|
||||
{"id", 2, DCH_ID, TRUE, FROM_CHAR_DATE_ISOWEEK},
|
||||
{"iw", 2, DCH_IW, TRUE, FROM_CHAR_DATE_ISOWEEK},
|
||||
{"iyyy", 4, DCH_IYYY, TRUE, FROM_CHAR_DATE_ISOWEEK},
|
||||
{"iyy", 3, DCH_IYY, TRUE, FROM_CHAR_DATE_ISOWEEK},
|
||||
{"iy", 2, DCH_IY, TRUE, FROM_CHAR_DATE_ISOWEEK},
|
||||
{"i", 1, DCH_I, TRUE, FROM_CHAR_DATE_ISOWEEK},
|
||||
{"j", 1, DCH_J, TRUE, FROM_CHAR_DATE_NONE}, /* j */
|
||||
{"mi", 2, DCH_MI, TRUE, FROM_CHAR_DATE_NONE}, /* m */
|
||||
{"j", 1, DCH_J, TRUE, FROM_CHAR_DATE_NONE}, /* j */
|
||||
{"mi", 2, DCH_MI, TRUE, FROM_CHAR_DATE_NONE}, /* m */
|
||||
{"mm", 2, DCH_MM, TRUE, FROM_CHAR_DATE_GREGORIAN},
|
||||
{"month", 5, DCH_month, FALSE, FROM_CHAR_DATE_GREGORIAN},
|
||||
{"mon", 3, DCH_mon, FALSE, FROM_CHAR_DATE_GREGORIAN},
|
||||
{"ms", 2, DCH_MS, TRUE, FROM_CHAR_DATE_NONE},
|
||||
{"p.m.", 4, DCH_p_m, FALSE, FROM_CHAR_DATE_NONE}, /* p */
|
||||
{"p.m.", 4, DCH_p_m, FALSE, FROM_CHAR_DATE_NONE}, /* p */
|
||||
{"pm", 2, DCH_pm, FALSE, FROM_CHAR_DATE_NONE},
|
||||
{"q", 1, DCH_Q, TRUE, FROM_CHAR_DATE_NONE}, /* q */
|
||||
{"rm", 2, DCH_rm, FALSE, FROM_CHAR_DATE_GREGORIAN}, /* r */
|
||||
{"ssss", 4, DCH_SSSS, TRUE, FROM_CHAR_DATE_NONE}, /* s */
|
||||
{"q", 1, DCH_Q, TRUE, FROM_CHAR_DATE_NONE}, /* q */
|
||||
{"rm", 2, DCH_rm, FALSE, FROM_CHAR_DATE_GREGORIAN}, /* r */
|
||||
{"ssss", 4, DCH_SSSS, TRUE, FROM_CHAR_DATE_NONE}, /* s */
|
||||
{"ss", 2, DCH_SS, TRUE, FROM_CHAR_DATE_NONE},
|
||||
{"tz", 2, DCH_tz, FALSE, FROM_CHAR_DATE_NONE}, /* t */
|
||||
{"us", 2, DCH_US, TRUE, FROM_CHAR_DATE_NONE}, /* u */
|
||||
{"ww", 2, DCH_WW, TRUE, FROM_CHAR_DATE_GREGORIAN}, /* w */
|
||||
{"tz", 2, DCH_tz, FALSE, FROM_CHAR_DATE_NONE}, /* t */
|
||||
{"us", 2, DCH_US, TRUE, FROM_CHAR_DATE_NONE}, /* u */
|
||||
{"ww", 2, DCH_WW, TRUE, FROM_CHAR_DATE_GREGORIAN}, /* w */
|
||||
{"w", 1, DCH_W, TRUE, FROM_CHAR_DATE_GREGORIAN},
|
||||
{"y,yyy", 5, DCH_Y_YYY, TRUE, FROM_CHAR_DATE_GREGORIAN},/* y */
|
||||
{"y,yyy", 5, DCH_Y_YYY, TRUE, FROM_CHAR_DATE_GREGORIAN}, /* y */
|
||||
{"yyyy", 4, DCH_YYYY, TRUE, FROM_CHAR_DATE_GREGORIAN},
|
||||
{"yyy", 3, DCH_YYY, TRUE, FROM_CHAR_DATE_GREGORIAN},
|
||||
{"yy", 2, DCH_YY, TRUE, FROM_CHAR_DATE_GREGORIAN},
|
||||
@ -814,42 +814,42 @@ static const KeyWord DCH_keywords[] = {
|
||||
*/
|
||||
static const KeyWord NUM_keywords[] = {
|
||||
/* name, len, id is in Index */
|
||||
{",", 1, NUM_COMMA}, /* , */
|
||||
{".", 1, NUM_DEC}, /* . */
|
||||
{"0", 1, NUM_0}, /* 0 */
|
||||
{"9", 1, NUM_9}, /* 9 */
|
||||
{"B", 1, NUM_B}, /* B */
|
||||
{"C", 1, NUM_C}, /* C */
|
||||
{"D", 1, NUM_D}, /* D */
|
||||
{"E", 1, NUM_E}, /* E */
|
||||
{"FM", 2, NUM_FM}, /* F */
|
||||
{"G", 1, NUM_G}, /* G */
|
||||
{"L", 1, NUM_L}, /* L */
|
||||
{"MI", 2, NUM_MI}, /* M */
|
||||
{"PL", 2, NUM_PL}, /* P */
|
||||
{",", 1, NUM_COMMA}, /* , */
|
||||
{".", 1, NUM_DEC}, /* . */
|
||||
{"0", 1, NUM_0}, /* 0 */
|
||||
{"9", 1, NUM_9}, /* 9 */
|
||||
{"B", 1, NUM_B}, /* B */
|
||||
{"C", 1, NUM_C}, /* C */
|
||||
{"D", 1, NUM_D}, /* D */
|
||||
{"E", 1, NUM_E}, /* E */
|
||||
{"FM", 2, NUM_FM}, /* F */
|
||||
{"G", 1, NUM_G}, /* G */
|
||||
{"L", 1, NUM_L}, /* L */
|
||||
{"MI", 2, NUM_MI}, /* M */
|
||||
{"PL", 2, NUM_PL}, /* P */
|
||||
{"PR", 2, NUM_PR},
|
||||
{"RN", 2, NUM_RN}, /* R */
|
||||
{"SG", 2, NUM_SG}, /* S */
|
||||
{"RN", 2, NUM_RN}, /* R */
|
||||
{"SG", 2, NUM_SG}, /* S */
|
||||
{"SP", 2, NUM_SP},
|
||||
{"S", 1, NUM_S},
|
||||
{"TH", 2, NUM_TH}, /* T */
|
||||
{"V", 1, NUM_V}, /* V */
|
||||
{"b", 1, NUM_B}, /* b */
|
||||
{"c", 1, NUM_C}, /* c */
|
||||
{"d", 1, NUM_D}, /* d */
|
||||
{"e", 1, NUM_E}, /* e */
|
||||
{"fm", 2, NUM_FM}, /* f */
|
||||
{"g", 1, NUM_G}, /* g */
|
||||
{"l", 1, NUM_L}, /* l */
|
||||
{"mi", 2, NUM_MI}, /* m */
|
||||
{"pl", 2, NUM_PL}, /* p */
|
||||
{"TH", 2, NUM_TH}, /* T */
|
||||
{"V", 1, NUM_V}, /* V */
|
||||
{"b", 1, NUM_B}, /* b */
|
||||
{"c", 1, NUM_C}, /* c */
|
||||
{"d", 1, NUM_D}, /* d */
|
||||
{"e", 1, NUM_E}, /* e */
|
||||
{"fm", 2, NUM_FM}, /* f */
|
||||
{"g", 1, NUM_G}, /* g */
|
||||
{"l", 1, NUM_L}, /* l */
|
||||
{"mi", 2, NUM_MI}, /* m */
|
||||
{"pl", 2, NUM_PL}, /* p */
|
||||
{"pr", 2, NUM_PR},
|
||||
{"rn", 2, NUM_rn}, /* r */
|
||||
{"sg", 2, NUM_SG}, /* s */
|
||||
{"rn", 2, NUM_rn}, /* r */
|
||||
{"sg", 2, NUM_SG}, /* s */
|
||||
{"sp", 2, NUM_SP},
|
||||
{"s", 1, NUM_S},
|
||||
{"th", 2, NUM_th}, /* t */
|
||||
{"v", 1, NUM_V}, /* v */
|
||||
{"th", 2, NUM_th}, /* t */
|
||||
{"v", 1, NUM_V}, /* v */
|
||||
|
||||
/* last */
|
||||
{NULL, 0, 0}
|
||||
@ -950,7 +950,7 @@ static void parse_format(FormatNode *node, char *str, const KeyWord *kw,
|
||||
KeySuffix *suf, const int *index, int ver, NUMDesc *Num);
|
||||
|
||||
static void DCH_to_char(FormatNode *node, bool is_interval,
|
||||
TmToChar *in, char *out);
|
||||
TmToChar *in, char *out);
|
||||
static void DCH_from_char(FormatNode *node, char *in, TmFromChar *out);
|
||||
|
||||
#ifdef DEBUG_TO_FROM_CHAR
|
||||
@ -1474,7 +1474,7 @@ str_numth(char *dest, char *num, int type)
|
||||
char *
|
||||
str_tolower(const char *buff, size_t nbytes)
|
||||
{
|
||||
char *result;
|
||||
char *result;
|
||||
|
||||
if (!buff)
|
||||
return NULL;
|
||||
@ -1482,7 +1482,7 @@ str_tolower(const char *buff, size_t nbytes)
|
||||
#ifdef USE_WIDE_UPPER_LOWER
|
||||
if (pg_database_encoding_max_length() > 1 && !lc_ctype_is_c())
|
||||
{
|
||||
wchar_t *workspace;
|
||||
wchar_t *workspace;
|
||||
size_t curr_char;
|
||||
size_t result_size;
|
||||
|
||||
@ -1508,9 +1508,9 @@ str_tolower(const char *buff, size_t nbytes)
|
||||
pfree(workspace);
|
||||
}
|
||||
else
|
||||
#endif /* USE_WIDE_UPPER_LOWER */
|
||||
#endif /* USE_WIDE_UPPER_LOWER */
|
||||
{
|
||||
char *p;
|
||||
char *p;
|
||||
|
||||
result = pnstrdup(buff, nbytes);
|
||||
|
||||
@ -1530,7 +1530,7 @@ str_tolower(const char *buff, size_t nbytes)
|
||||
char *
|
||||
str_toupper(const char *buff, size_t nbytes)
|
||||
{
|
||||
char *result;
|
||||
char *result;
|
||||
|
||||
if (!buff)
|
||||
return NULL;
|
||||
@ -1538,7 +1538,7 @@ str_toupper(const char *buff, size_t nbytes)
|
||||
#ifdef USE_WIDE_UPPER_LOWER
|
||||
if (pg_database_encoding_max_length() > 1 && !lc_ctype_is_c())
|
||||
{
|
||||
wchar_t *workspace;
|
||||
wchar_t *workspace;
|
||||
size_t curr_char;
|
||||
size_t result_size;
|
||||
|
||||
@ -1564,9 +1564,9 @@ str_toupper(const char *buff, size_t nbytes)
|
||||
pfree(workspace);
|
||||
}
|
||||
else
|
||||
#endif /* USE_WIDE_UPPER_LOWER */
|
||||
#endif /* USE_WIDE_UPPER_LOWER */
|
||||
{
|
||||
char *p;
|
||||
char *p;
|
||||
|
||||
result = pnstrdup(buff, nbytes);
|
||||
|
||||
@ -1586,7 +1586,7 @@ str_toupper(const char *buff, size_t nbytes)
|
||||
char *
|
||||
str_initcap(const char *buff, size_t nbytes)
|
||||
{
|
||||
char *result;
|
||||
char *result;
|
||||
int wasalnum = false;
|
||||
|
||||
if (!buff)
|
||||
@ -1595,7 +1595,7 @@ str_initcap(const char *buff, size_t nbytes)
|
||||
#ifdef USE_WIDE_UPPER_LOWER
|
||||
if (pg_database_encoding_max_length() > 1 && !lc_ctype_is_c())
|
||||
{
|
||||
wchar_t *workspace;
|
||||
wchar_t *workspace;
|
||||
size_t curr_char;
|
||||
size_t result_size;
|
||||
|
||||
@ -1627,9 +1627,9 @@ str_initcap(const char *buff, size_t nbytes)
|
||||
pfree(workspace);
|
||||
}
|
||||
else
|
||||
#endif /* USE_WIDE_UPPER_LOWER */
|
||||
#endif /* USE_WIDE_UPPER_LOWER */
|
||||
{
|
||||
char *p;
|
||||
char *p;
|
||||
|
||||
result = pnstrdup(buff, nbytes);
|
||||
|
||||
@ -1805,8 +1805,8 @@ from_char_set_int(int *dest, const int value, const FormatNode *node)
|
||||
if (*dest != 0 && *dest != value)
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_INVALID_DATETIME_FORMAT),
|
||||
errmsg("conflicting values for \"%s\" field in formatting string",
|
||||
node->key->name),
|
||||
errmsg("conflicting values for \"%s\" field in formatting string",
|
||||
node->key->name),
|
||||
errdetail("This value contradicts a previous setting for "
|
||||
"the same field type.")));
|
||||
*dest = value;
|
||||
@ -1847,8 +1847,7 @@ from_char_parse_int_len(int *dest, char **src, const int len, FormatNode *node)
|
||||
{
|
||||
/*
|
||||
* This node is in Fill Mode, or the next node is known to be a
|
||||
* non-digit value, so we just slurp as many characters as we
|
||||
* can get.
|
||||
* non-digit value, so we just slurp as many characters as we can get.
|
||||
*/
|
||||
errno = 0;
|
||||
result = strtol(init, src, 10);
|
||||
@ -1859,13 +1858,13 @@ from_char_parse_int_len(int *dest, char **src, const int len, FormatNode *node)
|
||||
* We need to pull exactly the number of characters given in 'len' out
|
||||
* of the string, and convert those.
|
||||
*/
|
||||
char *last;
|
||||
char *last;
|
||||
|
||||
if (used < len)
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_INVALID_DATETIME_FORMAT),
|
||||
errmsg("source string too short for \"%s\" formatting field",
|
||||
node->key->name),
|
||||
errmsg("source string too short for \"%s\" formatting field",
|
||||
node->key->name),
|
||||
errdetail("Field requires %d characters, but only %d "
|
||||
"remain.",
|
||||
len, used),
|
||||
@ -1879,12 +1878,12 @@ from_char_parse_int_len(int *dest, char **src, const int len, FormatNode *node)
|
||||
if (used > 0 && used < len)
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_INVALID_DATETIME_FORMAT),
|
||||
errmsg("invalid value \"%s\" for \"%s\"",
|
||||
copy, node->key->name),
|
||||
errmsg("invalid value \"%s\" for \"%s\"",
|
||||
copy, node->key->name),
|
||||
errdetail("Field requires %d characters, but only %d "
|
||||
"could be parsed.", len, used),
|
||||
"could be parsed.", len, used),
|
||||
errhint("If your source string is not fixed-width, try "
|
||||
"using the \"FM\" modifier.")));
|
||||
"using the \"FM\" modifier.")));
|
||||
|
||||
*src += used;
|
||||
}
|
||||
@ -1893,14 +1892,14 @@ from_char_parse_int_len(int *dest, char **src, const int len, FormatNode *node)
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_INVALID_DATETIME_FORMAT),
|
||||
errmsg("invalid value \"%s\" for \"%s\"",
|
||||
copy, node->key->name),
|
||||
copy, node->key->name),
|
||||
errdetail("Value must be an integer.")));
|
||||
|
||||
if (errno == ERANGE || result < INT_MIN || result > INT_MAX)
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
|
||||
errmsg("value for \"%s\" in source string is out of range",
|
||||
node->key->name),
|
||||
node->key->name),
|
||||
errdetail("Value must be in the range %d to %d.",
|
||||
INT_MIN, INT_MAX)));
|
||||
|
||||
@ -1998,7 +1997,7 @@ seq_search(char *name, char **array, int type, int max, int *len)
|
||||
|
||||
/*
|
||||
* Perform a sequential search in 'array' for text matching the first 'max'
|
||||
* characters of the source string.
|
||||
* characters of the source string.
|
||||
*
|
||||
* If a match is found, copy the array index of the match into the integer
|
||||
* pointed to by 'dest', advance 'src' to the end of the part of the string
|
||||
@ -2007,15 +2006,15 @@ seq_search(char *name, char **array, int type, int max, int *len)
|
||||
* If the string doesn't match, throw an error.
|
||||
*/
|
||||
static int
|
||||
from_char_seq_search(int *dest, char **src, char **array, int type, int max,
|
||||
from_char_seq_search(int *dest, char **src, char **array, int type, int max,
|
||||
FormatNode *node)
|
||||
{
|
||||
int len;
|
||||
int len;
|
||||
|
||||
*dest = seq_search(*src, array, type, max, &len);
|
||||
if (len <= 0)
|
||||
{
|
||||
char copy[DCH_MAX_ITEM_SIZ + 1];
|
||||
char copy[DCH_MAX_ITEM_SIZ + 1];
|
||||
|
||||
Assert(max <= DCH_MAX_ITEM_SIZ);
|
||||
strlcpy(copy, *src, max + 1);
|
||||
@ -2023,9 +2022,9 @@ from_char_seq_search(int *dest, char **src, char **array, int type, int max,
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_INVALID_DATETIME_FORMAT),
|
||||
errmsg("invalid value \"%s\" for \"%s\"",
|
||||
copy, node->key->name),
|
||||
copy, node->key->name),
|
||||
errdetail("The given value did not match any of the allowed "
|
||||
"values for this field.")));
|
||||
"values for this field.")));
|
||||
}
|
||||
*src += len;
|
||||
return len;
|
||||
@ -2111,7 +2110,7 @@ DCH_to_char(FormatNode *node, bool is_interval, TmToChar *in, char *out)
|
||||
str_numth(s, s, S_TH_TYPE(n->suffix));
|
||||
s += strlen(s);
|
||||
break;
|
||||
case DCH_MS: /* millisecond */
|
||||
case DCH_MS: /* millisecond */
|
||||
#ifdef HAVE_INT64_TIMESTAMP
|
||||
sprintf(s, "%03d", (int) (in->fsec / INT64CONST(1000)));
|
||||
#else
|
||||
@ -2122,7 +2121,7 @@ DCH_to_char(FormatNode *node, bool is_interval, TmToChar *in, char *out)
|
||||
str_numth(s, s, S_TH_TYPE(n->suffix));
|
||||
s += strlen(s);
|
||||
break;
|
||||
case DCH_US: /* microsecond */
|
||||
case DCH_US: /* microsecond */
|
||||
#ifdef HAVE_INT64_TIMESTAMP
|
||||
sprintf(s, "%06d", (int) in->fsec);
|
||||
#else
|
||||
@ -2263,7 +2262,7 @@ DCH_to_char(FormatNode *node, bool is_interval, TmToChar *in, char *out)
|
||||
strcpy(s, str_toupper_z(localized_full_days[tm->tm_wday]));
|
||||
else
|
||||
sprintf(s, "%*s", S_FM(n->suffix) ? 0 : -9,
|
||||
str_toupper_z(days[tm->tm_wday]));
|
||||
str_toupper_z(days[tm->tm_wday]));
|
||||
s += strlen(s);
|
||||
break;
|
||||
case DCH_Day:
|
||||
@ -2317,7 +2316,7 @@ DCH_to_char(FormatNode *node, bool is_interval, TmToChar *in, char *out)
|
||||
sprintf(s, "%0*d", S_FM(n->suffix) ? 0 : 3,
|
||||
(n->key->id == DCH_DDD) ?
|
||||
tm->tm_yday :
|
||||
date2isoyearday(tm->tm_year, tm->tm_mon, tm->tm_mday));
|
||||
date2isoyearday(tm->tm_year, tm->tm_mon, tm->tm_mday));
|
||||
if (S_THth(n->suffix))
|
||||
str_numth(s, s, S_TH_TYPE(n->suffix));
|
||||
s += strlen(s);
|
||||
@ -2365,9 +2364,9 @@ DCH_to_char(FormatNode *node, bool is_interval, TmToChar *in, char *out)
|
||||
s += strlen(s);
|
||||
break;
|
||||
case DCH_CC:
|
||||
if (is_interval) /* straight calculation */
|
||||
if (is_interval) /* straight calculation */
|
||||
i = tm->tm_year / 100;
|
||||
else /* century 21 starts in 2001 */
|
||||
else /* century 21 starts in 2001 */
|
||||
i = (tm->tm_year - 1) / 100 + 1;
|
||||
if (i <= 99 && i >= -99)
|
||||
sprintf(s, "%0*d", S_FM(n->suffix) ? 0 : 2, i);
|
||||
@ -2556,7 +2555,7 @@ DCH_from_char(FormatNode *node, char *in, TmFromChar *out)
|
||||
from_char_parse_int(&out->ss, &s, n);
|
||||
s += SKIP_THth(n->suffix);
|
||||
break;
|
||||
case DCH_MS: /* millisecond */
|
||||
case DCH_MS: /* millisecond */
|
||||
len = from_char_parse_int_len(&out->ms, &s, 3, n);
|
||||
|
||||
/*
|
||||
@ -2567,7 +2566,7 @@ DCH_from_char(FormatNode *node, char *in, TmFromChar *out)
|
||||
|
||||
s += SKIP_THth(n->suffix);
|
||||
break;
|
||||
case DCH_US: /* microsecond */
|
||||
case DCH_US: /* microsecond */
|
||||
len = from_char_parse_int_len(&out->us, &s, 6, n);
|
||||
|
||||
out->us *= len == 1 ? 100000 :
|
||||
@ -2662,6 +2661,7 @@ DCH_from_char(FormatNode *node, char *in, TmFromChar *out)
|
||||
s += SKIP_THth(n->suffix);
|
||||
break;
|
||||
case DCH_Q:
|
||||
|
||||
/*
|
||||
* We ignore Q when converting to date because it is not
|
||||
* normative.
|
||||
@ -2678,13 +2678,15 @@ DCH_from_char(FormatNode *node, char *in, TmFromChar *out)
|
||||
break;
|
||||
case DCH_Y_YYY:
|
||||
{
|
||||
int matched, years, millenia;
|
||||
int matched,
|
||||
years,
|
||||
millenia;
|
||||
|
||||
matched = sscanf(s, "%d,%03d", &millenia, &years);
|
||||
if (matched != 2)
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_INVALID_DATETIME_FORMAT),
|
||||
errmsg("invalid input string for \"Y,YYY\"")));
|
||||
errmsg("invalid input string for \"Y,YYY\"")));
|
||||
years += (millenia * 1000);
|
||||
from_char_set_int(&out->year, years, n);
|
||||
out->yysz = 4;
|
||||
@ -2739,12 +2741,12 @@ DCH_from_char(FormatNode *node, char *in, TmFromChar *out)
|
||||
s += SKIP_THth(n->suffix);
|
||||
break;
|
||||
case DCH_RM:
|
||||
from_char_seq_search(&value, &s, rm_months_upper,
|
||||
from_char_seq_search(&value, &s, rm_months_upper,
|
||||
ALL_UPPER, MAX_RM_LEN, n);
|
||||
from_char_set_int(&out->mm, 12 - value, n);
|
||||
break;
|
||||
case DCH_rm:
|
||||
from_char_seq_search(&value, &s, rm_months_lower,
|
||||
from_char_seq_search(&value, &s, rm_months_lower,
|
||||
ALL_LOWER, MAX_RM_LEN, n);
|
||||
from_char_set_int(&out->mm, 12 - value, n);
|
||||
break;
|
||||
@ -3276,16 +3278,16 @@ do_to_timestamp(text *date_txt, text *fmt,
|
||||
if (tmfc.ddd && (tm->tm_mon <= 1 || tm->tm_mday <= 1))
|
||||
{
|
||||
/*
|
||||
* The month and day field have not been set, so we use the day-of-year
|
||||
* field to populate them. Depending on the date mode, this field may
|
||||
* be interpreted as a Gregorian day-of-year, or an ISO week date
|
||||
* day-of-year.
|
||||
* The month and day field have not been set, so we use the
|
||||
* day-of-year field to populate them. Depending on the date mode,
|
||||
* this field may be interpreted as a Gregorian day-of-year, or an ISO
|
||||
* week date day-of-year.
|
||||
*/
|
||||
|
||||
if (!tm->tm_year && !tmfc.bc)
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_INVALID_DATETIME_FORMAT),
|
||||
errmsg("cannot calculate day of year without year information")));
|
||||
errmsg("cannot calculate day of year without year information")));
|
||||
|
||||
if (tmfc.mode == FROM_CHAR_DATE_ISOWEEK)
|
||||
{
|
||||
@ -3302,7 +3304,7 @@ do_to_timestamp(text *date_txt, text *fmt,
|
||||
|
||||
static const int ysum[2][13] = {
|
||||
{0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365},
|
||||
{0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366}};
|
||||
{0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366}};
|
||||
|
||||
y = ysum[isleap(tm->tm_year)];
|
||||
|
||||
@ -3388,8 +3390,8 @@ NUM_cache_getnew(char *str)
|
||||
for (ent = NUMCache; ent <= (NUMCache + NUM_CACHE_FIELDS); ent++)
|
||||
{
|
||||
/*
|
||||
* entry removed via NUM_cache_remove() can be used here,
|
||||
* which is why it's worth scanning first entry again
|
||||
* entry removed via NUM_cache_remove() can be used here, which is
|
||||
* why it's worth scanning first entry again
|
||||
*/
|
||||
if (ent->str[0] == '\0')
|
||||
{
|
||||
@ -3621,6 +3623,7 @@ NUM_prepare_locale(NUMProc *Np)
|
||||
*/
|
||||
if (lconv->decimal_point && *lconv->decimal_point)
|
||||
Np->decimal = lconv->decimal_point;
|
||||
|
||||
else
|
||||
Np->decimal = ".";
|
||||
|
||||
@ -3637,7 +3640,7 @@ NUM_prepare_locale(NUMProc *Np)
|
||||
if (lconv->thousands_sep && *lconv->thousands_sep)
|
||||
Np->L_thousands_sep = lconv->thousands_sep;
|
||||
/* Make sure thousands separator doesn't match decimal point symbol. */
|
||||
else if (strcmp(Np->decimal, ",") != 0)
|
||||
else if (strcmp(Np->decimal, ",") !=0)
|
||||
Np->L_thousands_sep = ",";
|
||||
else
|
||||
Np->L_thousands_sep = ".";
|
||||
|
Reference in New Issue
Block a user