From 95c38a989569abe4981ae25ef03ffb2c328f6c83 Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Fri, 12 Sep 2014 20:42:19 -0400 Subject: [PATCH] Revert f68dc5d86b9f287f80f4417f5a24d876eb13771d Renaming will have to be more comprehensive, so I need approval. --- src/backend/utils/adt/formatting.c | 620 ++++++++++++++--------------- 1 file changed, 310 insertions(+), 310 deletions(-) diff --git a/src/backend/utils/adt/formatting.c b/src/backend/utils/adt/formatting.c index d9d97ca6d6..d5ff246c7b 100644 --- a/src/backend/utils/adt/formatting.c +++ b/src/backend/utils/adt/formatting.c @@ -310,7 +310,7 @@ typedef struct zero_start, /* position of first zero */ zero_end, /* position of last zero */ need_locale; /* needs it locale */ -} FmtDesc; +} NUMDesc; /* ---------- * Flags for NUMBER version @@ -377,7 +377,7 @@ typedef struct FormatNode format[NUM_CACHE_SIZE + 1]; char str[NUM_CACHE_SIZE + 1]; int age; - FmtDesc Fmt; + NUMDesc Num; } NUMCacheEntry; /* global cache for --- date/time part */ @@ -910,7 +910,7 @@ static const int NUM_index[KeyWord_INDEX_SIZE] = { typedef struct NUMProc { bool is_to_char; - FmtDesc *Fmt; /* number description */ + NUMDesc *Num; /* number description */ int sign, /* '-' or '+' */ sign_wrote, /* was sign write */ @@ -923,8 +923,8 @@ typedef struct NUMProc read_post, /* to_number - number of dec. digit */ read_pre; /* to_number - number non-dec. digit */ - char *numstr, /* string with number */ - *numstr_p, /* pointer to current number position */ + char *number, /* string with number */ + *number_p, /* pointer to current number position */ *inout, /* in / out buffer */ *inout_p, /* pointer to current inout position */ *last_relevant, /* last relevant number after decimal point */ @@ -944,9 +944,9 @@ typedef struct NUMProc static const KeyWord *index_seq_search(char *str, const KeyWord *kw, const int *index); static const KeySuffix *suff_search(char *str, const KeySuffix *suf, int type); -static void FmtDesc_prepare(FmtDesc *Fmt, FormatNode *n); +static void NUMDesc_prepare(NUMDesc *num, FormatNode *n); static void parse_format(FormatNode *node, char *str, const KeyWord *kw, - const KeySuffix *suf, const int *index, int ver, FmtDesc *Fmt); + const KeySuffix *suf, const int *index, int ver, NUMDesc *Num); static void DCH_to_char(FormatNode *node, bool is_interval, TmToChar *in, char *out, Oid collid); @@ -971,14 +971,14 @@ static int from_char_seq_search(int *dest, char **src, const char *const * array static void do_to_timestamp(text *date_txt, text *fmt, struct pg_tm * tm, fsec_t *fsec); static char *fill_str(char *str, int c, int max); -static FormatNode *NUM_cache(int len, FmtDesc *Fmt, text *pars_str, bool *shouldFree); +static FormatNode *NUM_cache(int len, NUMDesc *Num, text *pars_str, bool *shouldFree); static char *int_to_roman(int number); static void NUM_prepare_locale(NUMProc *Np); static char *get_last_relevant_decnum(char *num); static void NUM_numpart_from_char(NUMProc *Np, int id, int input_len); static void NUM_numpart_to_char(NUMProc *Np, int id); -static char *NUM_processor(FormatNode *node, FmtDesc *Fmt, char *inout, - char *numstr, int from_char_input_len, int to_char_out_pre_spaces, +static char *NUM_processor(FormatNode *node, NUMDesc *Num, char *inout, + char *number, int from_char_input_len, int to_char_out_pre_spaces, int sign, bool is_to_char, Oid collid); static DCHCacheEntry *DCH_cache_search(char *str); static DCHCacheEntry *DCH_cache_getnew(char *str); @@ -1035,11 +1035,11 @@ suff_search(char *str, const KeySuffix *suf, int type) } /* ---------- - * Prepare FmtDesc (number description struct) via FormatNode struct + * Prepare NUMDesc (number description struct) via FormatNode struct * ---------- */ static void -FmtDesc_prepare(FmtDesc *Fmt, FormatNode *n) +NUMDesc_prepare(NUMDesc *num, FormatNode *n) { if (n->type != NODE_TYPE_ACTION) return; @@ -1050,7 +1050,7 @@ FmtDesc_prepare(FmtDesc *Fmt, FormatNode *n) */ PG_TRY(); { - if (IS_EEEE(Fmt) && n->key->id != NUM_E) + if (IS_EEEE(num) && n->key->id != NUM_E) ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), errmsg("\"EEEE\" must be the last pattern used"))); @@ -1058,156 +1058,156 @@ FmtDesc_prepare(FmtDesc *Fmt, FormatNode *n) switch (n->key->id) { case NUM_9: - if (IS_BRACKET(Fmt)) + if (IS_BRACKET(num)) ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), errmsg("\"9\" must be ahead of \"PR\""))); - if (IS_MULTI(Fmt)) + if (IS_MULTI(num)) { - ++Fmt->multi; + ++num->multi; break; } - if (IS_DECIMAL(Fmt)) - ++Fmt->post; + if (IS_DECIMAL(num)) + ++num->post; else - ++Fmt->pre; + ++num->pre; break; case NUM_0: - if (IS_BRACKET(Fmt)) + if (IS_BRACKET(num)) ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), errmsg("\"0\" must be ahead of \"PR\""))); - if (!IS_ZERO(Fmt) && !IS_DECIMAL(Fmt)) + if (!IS_ZERO(num) && !IS_DECIMAL(num)) { - Fmt->flag |= NUM_F_ZERO; - Fmt->zero_start = Fmt->pre + 1; + num->flag |= NUM_F_ZERO; + num->zero_start = num->pre + 1; } - if (!IS_DECIMAL(Fmt)) - ++Fmt->pre; + if (!IS_DECIMAL(num)) + ++num->pre; else - ++Fmt->post; + ++num->post; - Fmt->zero_end = Fmt->pre + Fmt->post; + num->zero_end = num->pre + num->post; break; case NUM_B: - if (Fmt->pre == 0 && Fmt->post == 0 && (!IS_ZERO(Fmt))) - Fmt->flag |= NUM_F_BLANK; + if (num->pre == 0 && num->post == 0 && (!IS_ZERO(num))) + num->flag |= NUM_F_BLANK; break; case NUM_D: - Fmt->flag |= NUM_F_LDECIMAL; - Fmt->need_locale = TRUE; + num->flag |= NUM_F_LDECIMAL; + num->need_locale = TRUE; /* FALLTHROUGH */ case NUM_DEC: - if (IS_DECIMAL(Fmt)) + if (IS_DECIMAL(num)) ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), errmsg("multiple decimal points"))); - if (IS_MULTI(Fmt)) + if (IS_MULTI(num)) ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), errmsg("cannot use \"V\" and decimal point together"))); - Fmt->flag |= NUM_F_DECIMAL; + num->flag |= NUM_F_DECIMAL; break; case NUM_FM: - Fmt->flag |= NUM_F_FILLMODE; + num->flag |= NUM_F_FILLMODE; break; case NUM_S: - if (IS_LSIGN(Fmt)) + if (IS_LSIGN(num)) ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), errmsg("cannot use \"S\" twice"))); - if (IS_PLUS(Fmt) || IS_MINUS(Fmt) || IS_BRACKET(Fmt)) + if (IS_PLUS(num) || IS_MINUS(num) || IS_BRACKET(num)) ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), errmsg("cannot use \"S\" and \"PL\"/\"MI\"/\"SG\"/\"PR\" together"))); - if (!IS_DECIMAL(Fmt)) + if (!IS_DECIMAL(num)) { - Fmt->lsign = NUM_LSIGN_PRE; - Fmt->pre_lsign_num = Fmt->pre; - Fmt->need_locale = TRUE; - Fmt->flag |= NUM_F_LSIGN; + num->lsign = NUM_LSIGN_PRE; + num->pre_lsign_num = num->pre; + num->need_locale = TRUE; + num->flag |= NUM_F_LSIGN; } - else if (Fmt->lsign == NUM_LSIGN_NONE) + else if (num->lsign == NUM_LSIGN_NONE) { - Fmt->lsign = NUM_LSIGN_POST; - Fmt->need_locale = TRUE; - Fmt->flag |= NUM_F_LSIGN; + num->lsign = NUM_LSIGN_POST; + num->need_locale = TRUE; + num->flag |= NUM_F_LSIGN; } break; case NUM_MI: - if (IS_LSIGN(Fmt)) + if (IS_LSIGN(num)) ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), errmsg("cannot use \"S\" and \"MI\" together"))); - Fmt->flag |= NUM_F_MINUS; - if (IS_DECIMAL(Fmt)) - Fmt->flag |= NUM_F_MINUS_POST; + num->flag |= NUM_F_MINUS; + if (IS_DECIMAL(num)) + num->flag |= NUM_F_MINUS_POST; break; case NUM_PL: - if (IS_LSIGN(Fmt)) + if (IS_LSIGN(num)) ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), errmsg("cannot use \"S\" and \"PL\" together"))); - Fmt->flag |= NUM_F_PLUS; - if (IS_DECIMAL(Fmt)) - Fmt->flag |= NUM_F_PLUS_POST; + num->flag |= NUM_F_PLUS; + if (IS_DECIMAL(num)) + num->flag |= NUM_F_PLUS_POST; break; case NUM_SG: - if (IS_LSIGN(Fmt)) + if (IS_LSIGN(num)) ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), errmsg("cannot use \"S\" and \"SG\" together"))); - Fmt->flag |= NUM_F_MINUS; - Fmt->flag |= NUM_F_PLUS; + num->flag |= NUM_F_MINUS; + num->flag |= NUM_F_PLUS; break; case NUM_PR: - if (IS_LSIGN(Fmt) || IS_PLUS(Fmt) || IS_MINUS(Fmt)) + if (IS_LSIGN(num) || IS_PLUS(num) || IS_MINUS(num)) ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), errmsg("cannot use \"PR\" and \"S\"/\"PL\"/\"MI\"/\"SG\" together"))); - Fmt->flag |= NUM_F_BRACKET; + num->flag |= NUM_F_BRACKET; break; case NUM_rn: case NUM_RN: - Fmt->flag |= NUM_F_ROMAN; + num->flag |= NUM_F_ROMAN; break; case NUM_L: case NUM_G: - Fmt->need_locale = TRUE; + num->need_locale = TRUE; break; case NUM_V: - if (IS_DECIMAL(Fmt)) + if (IS_DECIMAL(num)) ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), errmsg("cannot use \"V\" and decimal point together"))); - Fmt->flag |= NUM_F_MULTI; + num->flag |= NUM_F_MULTI; break; case NUM_E: - if (IS_EEEE(Fmt)) + if (IS_EEEE(num)) ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), errmsg("cannot use \"EEEE\" twice"))); - if (IS_BLANK(Fmt) || IS_FILLMODE(Fmt) || IS_LSIGN(Fmt) || - IS_BRACKET(Fmt) || IS_MINUS(Fmt) || IS_PLUS(Fmt) || - IS_ROMAN(Fmt) || IS_MULTI(Fmt)) + if (IS_BLANK(num) || IS_FILLMODE(num) || IS_LSIGN(num) || + IS_BRACKET(num) || IS_MINUS(num) || IS_PLUS(num) || + IS_ROMAN(num) || IS_MULTI(num)) ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), errmsg("\"EEEE\" is incompatible with other formats"), errdetail("\"EEEE\" may only be used together with digit and decimal point patterns."))); - Fmt->flag |= NUM_F_EEEE; + num->flag |= NUM_F_EEEE; break; } } @@ -1231,7 +1231,7 @@ FmtDesc_prepare(FmtDesc *Fmt, FormatNode *n) */ static void parse_format(FormatNode *node, char *str, const KeyWord *kw, - const KeySuffix *suf, const int *index, int ver, FmtDesc *Fmt) + const KeySuffix *suf, const int *index, int ver, NUMDesc *Num) { const KeySuffix *s; FormatNode *n; @@ -1271,10 +1271,10 @@ parse_format(FormatNode *node, char *str, const KeyWord *kw, str += n->key->len; /* - * NUM version: Prepare global FmtDesc struct + * NUM version: Prepare global NUMDesc struct */ if (ver == NUM_TYPE) - FmtDesc_prepare(Fmt, n); + NUMDesc_prepare(Num, n); /* * Postfix @@ -3772,7 +3772,7 @@ NUM_cache_getnew(char *str) ++n_NUMCache; } - zeroize_NUM(&ent->Fmt); + zeroize_NUM(&ent->Num); last_NUMCacheEntry = ent; return ent; @@ -3821,7 +3821,7 @@ NUM_cache_remove(NUMCacheEntry *ent) * ---------- */ static FormatNode * -NUM_cache(int len, FmtDesc *Fmt, text *pars_str, bool *shouldFree) +NUM_cache(int len, NUMDesc *Num, text *pars_str, bool *shouldFree) { FormatNode *format = NULL; char *str; @@ -3839,10 +3839,10 @@ NUM_cache(int len, FmtDesc *Fmt, text *pars_str, bool *shouldFree) *shouldFree = true; - zeroize_NUM(Fmt); + zeroize_NUM(Num); parse_format(format, str, NUM_keywords, - NULL, NUM_index, NUM_TYPE, Fmt); + NULL, NUM_index, NUM_TYPE, Num); (format + len)->type = NODE_TYPE_END; /* Paranoia? */ } @@ -3864,7 +3864,7 @@ NUM_cache(int len, FmtDesc *Fmt, text *pars_str, bool *shouldFree) * to the cache. */ parse_format(ent->format, str, NUM_keywords, - NULL, NUM_index, NUM_TYPE, &ent->Fmt); + NULL, NUM_index, NUM_TYPE, &ent->Num); (ent->format + len)->type = NODE_TYPE_END; /* Paranoia? */ } @@ -3874,15 +3874,15 @@ NUM_cache(int len, FmtDesc *Fmt, text *pars_str, bool *shouldFree) /* * Copy cache to used struct */ - Fmt->flag = ent->Fmt.flag; - Fmt->lsign = ent->Fmt.lsign; - Fmt->pre = ent->Fmt.pre; - Fmt->post = ent->Fmt.post; - Fmt->pre_lsign_num = ent->Fmt.pre_lsign_num; - Fmt->need_locale = ent->Fmt.need_locale; - Fmt->multi = ent->Fmt.multi; - Fmt->zero_start = ent->Fmt.zero_start; - Fmt->zero_end = ent->Fmt.zero_end; + Num->flag = ent->Num.flag; + Num->lsign = ent->Num.lsign; + Num->pre = ent->Num.pre; + Num->post = ent->Num.post; + Num->pre_lsign_num = ent->Num.pre_lsign_num; + Num->need_locale = ent->Num.need_locale; + Num->multi = ent->Num.multi; + Num->zero_start = ent->Num.zero_start; + Num->zero_end = ent->Num.zero_end; } #ifdef DEBUG_TO_FROM_CHAR @@ -3947,7 +3947,7 @@ int_to_roman(int number) static void NUM_prepare_locale(NUMProc *Np) { - if (Np->Fmt->need_locale) + if (Np->Num->need_locale) { struct lconv *lconv; @@ -3978,7 +3978,7 @@ NUM_prepare_locale(NUMProc *Np) else Np->decimal = "."; - if (!IS_LDECIMAL(Np->Fmt)) + if (!IS_LDECIMAL(Np->Num)) Np->decimal = "."; /* @@ -4079,7 +4079,7 @@ NUM_numpart_from_char(NUMProc *Np, int id, int input_len) /* * read sign before number */ - if (*Np->numstr == ' ' && (id == NUM_0 || id == NUM_9) && + if (*Np->number == ' ' && (id == NUM_0 || id == NUM_9) && (Np->read_pre + Np->read_post) == 0) { #ifdef DEBUG_TO_FROM_CHAR @@ -4090,7 +4090,7 @@ NUM_numpart_from_char(NUMProc *Np, int id, int input_len) /* * locale sign */ - if (IS_LSIGN(Np->Fmt) && Np->Fmt->lsign == NUM_LSIGN_PRE) + if (IS_LSIGN(Np->Num) && Np->Num->lsign == NUM_LSIGN_PRE) { int x = 0; @@ -4102,14 +4102,14 @@ NUM_numpart_from_char(NUMProc *Np, int id, int input_len) strncmp(Np->inout_p, Np->L_negative_sign, x) == 0) { Np->inout_p += x; - *Np->numstr = '-'; + *Np->number = '-'; } else if ((x = strlen(Np->L_positive_sign)) && AMOUNT_TEST(x) && strncmp(Np->inout_p, Np->L_positive_sign, x) == 0) { Np->inout_p += x; - *Np->numstr = '+'; + *Np->number = '+'; } } else @@ -4121,15 +4121,15 @@ NUM_numpart_from_char(NUMProc *Np, int id, int input_len) /* * simple + - < > */ - if (*Np->inout_p == '-' || (IS_BRACKET(Np->Fmt) && + if (*Np->inout_p == '-' || (IS_BRACKET(Np->Num) && *Np->inout_p == '<')) { - *Np->numstr = '-'; /* set - */ + *Np->number = '-'; /* set - */ Np->inout_p++; } else if (*Np->inout_p == '+') { - *Np->numstr = '+'; /* set + */ + *Np->number = '+'; /* set + */ Np->inout_p++; } } @@ -4139,7 +4139,7 @@ NUM_numpart_from_char(NUMProc *Np, int id, int input_len) return; #ifdef DEBUG_TO_FROM_CHAR - elog(DEBUG_elog_output, "Scan for numbers (%c), current number: '%s'", *Np->inout_p, Np->numstr); + elog(DEBUG_elog_output, "Scan for numbers (%c), current number: '%s'", *Np->inout_p, Np->number); #endif /* @@ -4147,11 +4147,11 @@ NUM_numpart_from_char(NUMProc *Np, int id, int input_len) */ if (isdigit((unsigned char) *Np->inout_p)) { - if (Np->read_dec && Np->read_post == Np->Fmt->post) + if (Np->read_dec && Np->read_post == Np->Num->post) return; - *Np->numstr_p = *Np->inout_p; - Np->numstr_p++; + *Np->number_p = *Np->inout_p; + Np->number_p++; if (Np->read_dec) Np->read_post++; @@ -4164,10 +4164,10 @@ NUM_numpart_from_char(NUMProc *Np, int id, int input_len) elog(DEBUG_elog_output, "Read digit (%c)", *Np->inout_p); #endif } - else if (IS_DECIMAL(Np->Fmt) && Np->read_dec == FALSE) + else if (IS_DECIMAL(Np->Num) && Np->read_dec == FALSE) { /* - * We need not test IS_LDECIMAL(Np->Fmt) explicitly here, because + * We need not test IS_LDECIMAL(Np->Num) explicitly here, because * Np->decimal is always just "." if we don't have a D format token. * So we just unconditionally match to Np->decimal. */ @@ -4180,8 +4180,8 @@ NUM_numpart_from_char(NUMProc *Np, int id, int input_len) if (x && AMOUNT_TEST(x) && strncmp(Np->inout_p, Np->decimal, x) == 0) { Np->inout_p += x - 1; - *Np->numstr_p = '.'; - Np->numstr_p++; + *Np->number_p = '.'; + Np->number_p++; Np->read_dec = TRUE; isread = TRUE; } @@ -4199,14 +4199,14 @@ NUM_numpart_from_char(NUMProc *Np, int id, int input_len) * FM9999.9999999S -> 123.001- 9.9S -> .5- FM9.999999MI -> * 5.01- */ - if (*Np->numstr == ' ' && Np->read_pre + Np->read_post > 0) + if (*Np->number == ' ' && Np->read_pre + Np->read_post > 0) { /* * locale sign (NUM_S) is always anchored behind a last number, if: - * locale sign expected - last read char was NUM_0/9 or NUM_DEC - and * next char is not digit */ - if (IS_LSIGN(Np->Fmt) && isread && + if (IS_LSIGN(Np->Num) && isread && (Np->inout_p + 1) <= Np->inout + input_len && !isdigit((unsigned char) *(Np->inout_p + 1))) { @@ -4221,16 +4221,16 @@ NUM_numpart_from_char(NUMProc *Np, int id, int input_len) strncmp(Np->inout_p, Np->L_negative_sign, x) == 0) { Np->inout_p += x - 1; /* -1 .. NUM_processor() do inout_p++ */ - *Np->numstr = '-'; + *Np->number = '-'; } else if ((x = strlen(Np->L_positive_sign)) && AMOUNT_TEST(x) && strncmp(Np->inout_p, Np->L_positive_sign, x) == 0) { Np->inout_p += x - 1; /* -1 .. NUM_processor() do inout_p++ */ - *Np->numstr = '+'; + *Np->number = '+'; } - if (*Np->numstr == ' ') + if (*Np->number == ' ') /* no sign read */ Np->inout_p = tmp; } @@ -4241,12 +4241,12 @@ NUM_numpart_from_char(NUMProc *Np, int id, int input_len) * * FM9.999999MI -> 5.01- * - * if (.... && IS_LSIGN(Np->Fmt)==FALSE) prevents read wrong formats + * if (.... && IS_LSIGN(Np->Num)==FALSE) prevents read wrong formats * like to_number('1 -', '9S') where sign is not anchored to last * number. */ - else if (isread == FALSE && IS_LSIGN(Np->Fmt) == FALSE && - (IS_PLUS(Np->Fmt) || IS_MINUS(Np->Fmt))) + else if (isread == FALSE && IS_LSIGN(Np->Num) == FALSE && + (IS_PLUS(Np->Num) || IS_MINUS(Np->Num))) { #ifdef DEBUG_TO_FROM_CHAR elog(DEBUG_elog_output, "Try read simple post-sign (%c)", *Np->inout_p); @@ -4257,16 +4257,16 @@ NUM_numpart_from_char(NUMProc *Np, int id, int input_len) */ if (*Np->inout_p == '-' || *Np->inout_p == '+') /* NUM_processor() do inout_p++ */ - *Np->numstr = *Np->inout_p; + *Np->number = *Np->inout_p; } } } #define IS_PREDEC_SPACE(_n) \ - (IS_ZERO((_n)->Fmt)==FALSE && \ - (_n)->numstr == (_n)->numstr_p && \ - *(_n)->numstr == '0' && \ - (_n)->Fmt->post != 0) + (IS_ZERO((_n)->Num)==FALSE && \ + (_n)->number == (_n)->number_p && \ + *(_n)->number == '0' && \ + (_n)->Num->post != 0) /* ---------- * Add digit or sign to number-string @@ -4277,7 +4277,7 @@ NUM_numpart_to_char(NUMProc *Np, int id) { int end; - if (IS_ROMAN(Np->Fmt)) + if (IS_ROMAN(Np->Num)) return; /* Note: in this elog() output not set '\0' in 'inout' */ @@ -4292,7 +4292,7 @@ NUM_numpart_to_char(NUMProc *Np, int id) "SIGN_WROTE: %d, CURRENT: %d, NUMBER_P: \"%s\", INOUT: \"%s\"", Np->sign_wrote, Np->num_curr, - Np->numstr_p, + Np->number_p, Np->inout); #endif Np->num_in = FALSE; @@ -4302,12 +4302,12 @@ NUM_numpart_to_char(NUMProc *Np, int id) * handle "9.9" --> " .1" */ if (Np->sign_wrote == FALSE && - (Np->num_curr >= Np->out_pre_spaces || (IS_ZERO(Np->Fmt) && Np->Fmt->zero_start == Np->num_curr)) && + (Np->num_curr >= Np->out_pre_spaces || (IS_ZERO(Np->Num) && Np->Num->zero_start == Np->num_curr)) && (IS_PREDEC_SPACE(Np) == FALSE || (Np->last_relevant && *Np->last_relevant == '.'))) { - if (IS_LSIGN(Np->Fmt)) + if (IS_LSIGN(Np->Num)) { - if (Np->Fmt->lsign == NUM_LSIGN_PRE) + if (Np->Num->lsign == NUM_LSIGN_PRE) { if (Np->sign == '-') strcpy(Np->inout_p, Np->L_negative_sign); @@ -4317,7 +4317,7 @@ NUM_numpart_to_char(NUMProc *Np, int id) Np->sign_wrote = TRUE; } } - else if (IS_BRACKET(Np->Fmt)) + else if (IS_BRACKET(Np->Num)) { *Np->inout_p = Np->sign == '+' ? ' ' : '<'; ++Np->inout_p; @@ -4325,7 +4325,7 @@ NUM_numpart_to_char(NUMProc *Np, int id) } else if (Np->sign == '+') { - if (!IS_FILLMODE(Np->Fmt)) + if (!IS_FILLMODE(Np->Num)) { *Np->inout_p = ' '; /* Write + */ ++Np->inout_p; @@ -4347,20 +4347,20 @@ NUM_numpart_to_char(NUMProc *Np, int id) if (id == NUM_9 || id == NUM_0 || id == NUM_D || id == NUM_DEC) { if (Np->num_curr < Np->out_pre_spaces && - (Np->Fmt->zero_start > Np->num_curr || !IS_ZERO(Np->Fmt))) + (Np->Num->zero_start > Np->num_curr || !IS_ZERO(Np->Num))) { /* * Write blank space */ - if (!IS_FILLMODE(Np->Fmt)) + if (!IS_FILLMODE(Np->Num)) { *Np->inout_p = ' '; /* Write ' ' */ ++Np->inout_p; } } - else if (IS_ZERO(Np->Fmt) && + else if (IS_ZERO(Np->Num) && Np->num_curr < Np->out_pre_spaces && - Np->Fmt->zero_start <= Np->num_curr) + Np->Num->zero_start <= Np->num_curr) { /* * Write ZERO @@ -4374,7 +4374,7 @@ NUM_numpart_to_char(NUMProc *Np, int id) /* * Write Decimal point */ - if (*Np->numstr_p == '.') + if (*Np->number_p == '.') { if (!Np->last_relevant || *Np->last_relevant != '.') { @@ -4385,7 +4385,7 @@ NUM_numpart_to_char(NUMProc *Np, int id) /* * Ora 'n' -- FM9.9 --> 'n.' */ - else if (IS_FILLMODE(Np->Fmt) && + else if (IS_FILLMODE(Np->Num) && Np->last_relevant && *Np->last_relevant == '.') { strcpy(Np->inout_p, Np->decimal); /* Write DEC/D */ @@ -4397,7 +4397,7 @@ NUM_numpart_to_char(NUMProc *Np, int id) /* * Write Digits */ - if (Np->last_relevant && Np->numstr_p > Np->last_relevant && + if (Np->last_relevant && Np->number_p > Np->last_relevant && id != NUM_0) ; @@ -4406,7 +4406,7 @@ NUM_numpart_to_char(NUMProc *Np, int id) */ else if (IS_PREDEC_SPACE(Np)) { - if (!IS_FILLMODE(Np->Fmt)) + if (!IS_FILLMODE(Np->Num)) { *Np->inout_p = ' '; ++Np->inout_p; @@ -4423,27 +4423,27 @@ NUM_numpart_to_char(NUMProc *Np, int id) } else { - *Np->inout_p = *Np->numstr_p; /* Write DIGIT */ + *Np->inout_p = *Np->number_p; /* Write DIGIT */ ++Np->inout_p; Np->num_in = TRUE; } } - ++Np->numstr_p; + ++Np->number_p; } - end = Np->num_count + (Np->out_pre_spaces ? 1 : 0) + (IS_DECIMAL(Np->Fmt) ? 1 : 0); + end = Np->num_count + (Np->out_pre_spaces ? 1 : 0) + (IS_DECIMAL(Np->Num) ? 1 : 0); - if (Np->last_relevant && Np->last_relevant == Np->numstr_p) + if (Np->last_relevant && Np->last_relevant == Np->number_p) end = Np->num_curr; if (Np->num_curr + 1 == end) { - if (Np->sign_wrote == TRUE && IS_BRACKET(Np->Fmt)) + if (Np->sign_wrote == TRUE && IS_BRACKET(Np->Num)) { *Np->inout_p = Np->sign == '+' ? ' ' : '>'; ++Np->inout_p; } - else if (IS_LSIGN(Np->Fmt) && Np->Fmt->lsign == NUM_LSIGN_POST) + else if (IS_LSIGN(Np->Num) && Np->Num->lsign == NUM_LSIGN_POST) { if (Np->sign == '-') strcpy(Np->inout_p, Np->L_negative_sign); @@ -4458,8 +4458,8 @@ NUM_numpart_to_char(NUMProc *Np, int id) } static char * -NUM_processor(FormatNode *node, FmtDesc *Fmt, char *inout, - char *numstr, int from_char_input_len, int to_char_out_pre_spaces, +NUM_processor(FormatNode *node, NUMDesc *Num, char *inout, + char *number, int from_char_input_len, int to_char_out_pre_spaces, int sign, bool is_to_char, Oid collid) { FormatNode *n; @@ -4468,48 +4468,48 @@ NUM_processor(FormatNode *node, FmtDesc *Fmt, char *inout, MemSet(Np, 0, sizeof(NUMProc)); - Np->Fmt = Fmt; + Np->Num = Num; Np->is_to_char = is_to_char; - Np->numstr = numstr; + Np->number = number; Np->inout = inout; Np->last_relevant = NULL; Np->read_post = 0; Np->read_pre = 0; Np->read_dec = FALSE; - if (Np->Fmt->zero_start) - --Np->Fmt->zero_start; + if (Np->Num->zero_start) + --Np->Num->zero_start; - if (IS_EEEE(Np->Fmt)) + if (IS_EEEE(Np->Num)) { if (!Np->is_to_char) ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("\"EEEE\" not supported for input"))); - return strcpy(inout, numstr); + return strcpy(inout, number); } /* * Roman correction */ - if (IS_ROMAN(Np->Fmt)) + if (IS_ROMAN(Np->Num)) { if (!Np->is_to_char) ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("\"RN\" not supported for input"))); - Np->Fmt->lsign = Np->Fmt->pre_lsign_num = Np->Fmt->post = - Np->Fmt->pre = Np->out_pre_spaces = Np->sign = 0; + Np->Num->lsign = Np->Num->pre_lsign_num = Np->Num->post = + Np->Num->pre = Np->out_pre_spaces = Np->sign = 0; - if (IS_FILLMODE(Np->Fmt)) + if (IS_FILLMODE(Np->Num)) { - Np->Fmt->flag = 0; - Np->Fmt->flag |= NUM_F_FILLMODE; + Np->Num->flag = 0; + Np->Num->flag |= NUM_F_FILLMODE; } else - Np->Fmt->flag = 0; - Np->Fmt->flag |= NUM_F_ROMAN; + Np->Num->flag = 0; + Np->Num->flag |= NUM_F_ROMAN; } /* @@ -4520,9 +4520,9 @@ NUM_processor(FormatNode *node, FmtDesc *Fmt, char *inout, Np->sign = sign; /* MI/PL/SG - write sign itself and not in number */ - if (IS_PLUS(Np->Fmt) || IS_MINUS(Np->Fmt)) + if (IS_PLUS(Np->Num) || IS_MINUS(Np->Num)) { - if (IS_PLUS(Np->Fmt) && IS_MINUS(Np->Fmt) == FALSE) + if (IS_PLUS(Np->Num) && IS_MINUS(Np->Num) == FALSE) Np->sign_wrote = FALSE; /* need sign */ else Np->sign_wrote = TRUE; /* needn't sign */ @@ -4531,21 +4531,21 @@ NUM_processor(FormatNode *node, FmtDesc *Fmt, char *inout, { if (Np->sign != '-') { - if (IS_BRACKET(Np->Fmt) && IS_FILLMODE(Np->Fmt)) - Np->Fmt->flag &= ~NUM_F_BRACKET; - if (IS_MINUS(Np->Fmt)) - Np->Fmt->flag &= ~NUM_F_MINUS; + if (IS_BRACKET(Np->Num) && IS_FILLMODE(Np->Num)) + Np->Num->flag &= ~NUM_F_BRACKET; + if (IS_MINUS(Np->Num)) + Np->Num->flag &= ~NUM_F_MINUS; } - else if (Np->sign != '+' && IS_PLUS(Np->Fmt)) - Np->Fmt->flag &= ~NUM_F_PLUS; + else if (Np->sign != '+' && IS_PLUS(Np->Num)) + Np->Num->flag &= ~NUM_F_PLUS; - if (Np->sign == '+' && IS_FILLMODE(Np->Fmt) && IS_LSIGN(Np->Fmt) == FALSE) + if (Np->sign == '+' && IS_FILLMODE(Np->Num) && IS_LSIGN(Np->Num) == FALSE) Np->sign_wrote = TRUE; /* needn't sign */ else Np->sign_wrote = FALSE; /* need sign */ - if (Np->Fmt->lsign == NUM_LSIGN_PRE && Np->Fmt->pre == Np->Fmt->pre_lsign_num) - Np->Fmt->lsign = NUM_LSIGN_POST; + if (Np->Num->lsign == NUM_LSIGN_PRE && Np->Num->pre == Np->Num->pre_lsign_num) + Np->Num->lsign = NUM_LSIGN_POST; } } else @@ -4554,25 +4554,25 @@ NUM_processor(FormatNode *node, FmtDesc *Fmt, char *inout, /* * Count */ - Np->num_count = Np->Fmt->post + Np->Fmt->pre - 1; + Np->num_count = Np->Num->post + Np->Num->pre - 1; if (is_to_char) { Np->out_pre_spaces = to_char_out_pre_spaces; - if (IS_FILLMODE(Np->Fmt) && IS_DECIMAL(Np->Fmt)) + if (IS_FILLMODE(Np->Num) && IS_DECIMAL(Np->Num)) { - Np->last_relevant = get_last_relevant_decnum(Np->numstr); + Np->last_relevant = get_last_relevant_decnum(Np->number); /* * If any '0' specifiers are present, make sure we don't strip * those digits. */ - if (Np->last_relevant && Np->Fmt->zero_end > Np->out_pre_spaces) + if (Np->last_relevant && Np->Num->zero_end > Np->out_pre_spaces) { char *last_zero; - last_zero = Np->numstr + (Np->Fmt->zero_end - Np->out_pre_spaces); + last_zero = Np->number + (Np->Num->zero_end - Np->out_pre_spaces); if (Np->last_relevant < last_zero) Np->last_relevant = last_zero; } @@ -4584,8 +4584,8 @@ NUM_processor(FormatNode *node, FmtDesc *Fmt, char *inout, else { Np->out_pre_spaces = 0; - *Np->numstr = ' '; /* sign space */ - *(Np->numstr + 1) = '\0'; + *Np->number = ' '; /* sign space */ + *(Np->number + 1) = '\0'; } Np->num_in = 0; @@ -4595,22 +4595,22 @@ NUM_processor(FormatNode *node, FmtDesc *Fmt, char *inout, elog(DEBUG_elog_output, "\n\tSIGN: '%c'\n\tNUM: '%s'\n\tPRE: %d\n\tPOST: %d\n\tNUM_COUNT: %d\n\tNUM_PRE: %d\n\tSIGN_WROTE: %s\n\tZERO: %s\n\tZERO_START: %d\n\tZERO_END: %d\n\tLAST_RELEVANT: %s\n\tBRACKET: %s\n\tPLUS: %s\n\tMINUS: %s\n\tFILLMODE: %s\n\tROMAN: %s\n\tEEEE: %s", Np->sign, - Np->numstr, - Np->Fmt->pre, - Np->Fmt->post, + Np->number, + Np->Num->pre, + Np->Num->post, Np->num_count, Np->out_pre_spaces, Np->sign_wrote ? "Yes" : "No", - IS_ZERO(Np->Fmt) ? "Yes" : "No", - Np->Fmt->zero_start, - Np->Fmt->zero_end, + IS_ZERO(Np->Num) ? "Yes" : "No", + Np->Num->zero_start, + Np->Num->zero_end, Np->last_relevant ? Np->last_relevant : "", - IS_BRACKET(Np->Fmt) ? "Yes" : "No", - IS_PLUS(Np->Fmt) ? "Yes" : "No", - IS_MINUS(Np->Fmt) ? "Yes" : "No", - IS_FILLMODE(Np->Fmt) ? "Yes" : "No", - IS_ROMAN(Np->Fmt) ? "Yes" : "No", - IS_EEEE(Np->Fmt) ? "Yes" : "No" + IS_BRACKET(Np->Num) ? "Yes" : "No", + IS_PLUS(Np->Num) ? "Yes" : "No", + IS_MINUS(Np->Num) ? "Yes" : "No", + IS_FILLMODE(Np->Num) ? "Yes" : "No", + IS_ROMAN(Np->Num) ? "Yes" : "No", + IS_EEEE(Np->Num) ? "Yes" : "No" ); #endif @@ -4623,9 +4623,9 @@ NUM_processor(FormatNode *node, FmtDesc *Fmt, char *inout, * Processor direct cycle */ if (Np->is_to_char) - Np->numstr_p = Np->numstr; + Np->number_p = Np->number; else - Np->numstr_p = Np->numstr + 1; /* first char is space for sign */ + Np->number_p = Np->number + 1; /* first char is space for sign */ for (n = node, Np->inout_p = Np->inout; n->type != NODE_TYPE_END; n++) { @@ -4673,7 +4673,7 @@ NUM_processor(FormatNode *node, FmtDesc *Fmt, char *inout, { if (!Np->num_in) { - if (IS_FILLMODE(Np->Fmt)) + if (IS_FILLMODE(Np->Num)) continue; else *Np->inout_p = ' '; @@ -4685,7 +4685,7 @@ NUM_processor(FormatNode *node, FmtDesc *Fmt, char *inout, { if (!Np->num_in) { - if (IS_FILLMODE(Np->Fmt)) + if (IS_FILLMODE(Np->Num)) continue; } } @@ -4696,7 +4696,7 @@ NUM_processor(FormatNode *node, FmtDesc *Fmt, char *inout, { if (!Np->num_in) { - if (IS_FILLMODE(Np->Fmt)) + if (IS_FILLMODE(Np->Num)) continue; else { @@ -4716,7 +4716,7 @@ NUM_processor(FormatNode *node, FmtDesc *Fmt, char *inout, { if (!Np->num_in) { - if (IS_FILLMODE(Np->Fmt)) + if (IS_FILLMODE(Np->Num)) continue; } Np->inout_p += strlen(Np->L_thousands_sep) - 1; @@ -4734,48 +4734,48 @@ NUM_processor(FormatNode *node, FmtDesc *Fmt, char *inout, break; case NUM_RN: - if (IS_FILLMODE(Np->Fmt)) + if (IS_FILLMODE(Np->Num)) { - strcpy(Np->inout_p, Np->numstr_p); + strcpy(Np->inout_p, Np->number_p); Np->inout_p += strlen(Np->inout_p) - 1; } else { - sprintf(Np->inout_p, "%15s", Np->numstr_p); + sprintf(Np->inout_p, "%15s", Np->number_p); Np->inout_p += strlen(Np->inout_p) - 1; } break; case NUM_rn: - if (IS_FILLMODE(Np->Fmt)) + if (IS_FILLMODE(Np->Num)) { - strcpy(Np->inout_p, asc_tolower_z(Np->numstr_p)); + strcpy(Np->inout_p, asc_tolower_z(Np->number_p)); Np->inout_p += strlen(Np->inout_p) - 1; } else { - sprintf(Np->inout_p, "%15s", asc_tolower_z(Np->numstr_p)); + sprintf(Np->inout_p, "%15s", asc_tolower_z(Np->number_p)); Np->inout_p += strlen(Np->inout_p) - 1; } break; case NUM_th: - if (IS_ROMAN(Np->Fmt) || *Np->numstr == '#' || - Np->sign == '-' || IS_DECIMAL(Np->Fmt)) + if (IS_ROMAN(Np->Num) || *Np->number == '#' || + Np->sign == '-' || IS_DECIMAL(Np->Num)) continue; if (Np->is_to_char) - strcpy(Np->inout_p, get_th(Np->numstr, TH_LOWER)); + strcpy(Np->inout_p, get_th(Np->number, TH_LOWER)); Np->inout_p += 1; break; case NUM_TH: - if (IS_ROMAN(Np->Fmt) || *Np->numstr == '#' || - Np->sign == '-' || IS_DECIMAL(Np->Fmt)) + if (IS_ROMAN(Np->Num) || *Np->number == '#' || + Np->sign == '-' || IS_DECIMAL(Np->Num)) continue; if (Np->is_to_char) - strcpy(Np->inout_p, get_th(Np->numstr, TH_UPPER)); + strcpy(Np->inout_p, get_th(Np->number, TH_UPPER)); Np->inout_p += 1; break; @@ -4784,7 +4784,7 @@ NUM_processor(FormatNode *node, FmtDesc *Fmt, char *inout, { if (Np->sign == '-') *Np->inout_p = '-'; - else if (IS_FILLMODE(Np->Fmt)) + else if (IS_FILLMODE(Np->Num)) continue; else *Np->inout_p = ' '; @@ -4792,7 +4792,7 @@ NUM_processor(FormatNode *node, FmtDesc *Fmt, char *inout, else { if (*Np->inout_p == '-') - *Np->numstr = '-'; + *Np->number = '-'; } break; @@ -4801,7 +4801,7 @@ NUM_processor(FormatNode *node, FmtDesc *Fmt, char *inout, { if (Np->sign == '+') *Np->inout_p = '+'; - else if (IS_FILLMODE(Np->Fmt)) + else if (IS_FILLMODE(Np->Num)) continue; else *Np->inout_p = ' '; @@ -4809,7 +4809,7 @@ NUM_processor(FormatNode *node, FmtDesc *Fmt, char *inout, else { if (*Np->inout_p == '+') - *Np->numstr = '+'; + *Np->number = '+'; } break; @@ -4820,9 +4820,9 @@ NUM_processor(FormatNode *node, FmtDesc *Fmt, char *inout, else { if (*Np->inout_p == '-') - *Np->numstr = '-'; + *Np->number = '-'; else if (*Np->inout_p == '+') - *Np->numstr = '+'; + *Np->number = '+'; } break; @@ -4850,20 +4850,20 @@ NUM_processor(FormatNode *node, FmtDesc *Fmt, char *inout, } else { - if (*(Np->numstr_p - 1) == '.') - *(Np->numstr_p - 1) = '\0'; + if (*(Np->number_p - 1) == '.') + *(Np->number_p - 1) = '\0'; else - *Np->numstr_p = '\0'; + *Np->number_p = '\0'; /* * Correction - precision of dec. number */ - Np->Fmt->post = Np->read_post; + Np->Num->post = Np->read_post; #ifdef DEBUG_TO_FROM_CHAR - elog(DEBUG_elog_output, "TO_NUMBER (numstr): '%s'", Np->numstr); + elog(DEBUG_elog_output, "TO_NUMBER (number): '%s'", Np->number); #endif - return Np->numstr; + return Np->number; } } @@ -4878,7 +4878,7 @@ do { \ if (len <= 0 || len >= (INT_MAX-VARHDRSZ)/NUM_MAX_ITEM_SIZ) \ PG_RETURN_TEXT_P(cstring_to_text("")); \ result = (text *) palloc0((len * NUM_MAX_ITEM_SIZ) + 1 + VARHDRSZ); \ - format = NUM_cache(len, &Fmt, fmt, &shouldFree); \ + format = NUM_cache(len, &Num, fmt, &shouldFree); \ } while (0) /* ---------- @@ -4889,7 +4889,7 @@ do { \ do { \ int len; \ \ - NUM_processor(format, &Fmt, VARDATA(result), numstr, 0, out_pre_spaces, sign, true, PG_GET_COLLATION()); \ + NUM_processor(format, &Num, VARDATA(result), numstr, 0, out_pre_spaces, sign, true, PG_GET_COLLATION()); \ \ if (shouldFree) \ pfree(format); \ @@ -4912,7 +4912,7 @@ numeric_to_number(PG_FUNCTION_ARGS) { text *value = PG_GETARG_TEXT_P(0); text *fmt = PG_GETARG_TEXT_P(1); - FmtDesc Fmt; + NUMDesc Num; Datum result; FormatNode *format; char *numstr; @@ -4926,15 +4926,15 @@ numeric_to_number(PG_FUNCTION_ARGS) if (len <= 0 || len >= INT_MAX / NUM_MAX_ITEM_SIZ) PG_RETURN_NULL(); - format = NUM_cache(len, &Fmt, fmt, &shouldFree); + format = NUM_cache(len, &Num, fmt, &shouldFree); numstr = (char *) palloc((len * NUM_MAX_ITEM_SIZ) + 1); - NUM_processor(format, &Fmt, VARDATA(value), numstr, + NUM_processor(format, &Num, VARDATA(value), numstr, VARSIZE(value) - VARHDRSZ, 0, 0, false, PG_GET_COLLATION()); - scale = Fmt.post; - precision = Max(0, Fmt.pre) + scale; + scale = Num.post; + precision = Max(0, Num.pre) + scale; if (shouldFree) pfree(format); @@ -4956,7 +4956,7 @@ numeric_to_char(PG_FUNCTION_ARGS) { Numeric value = PG_GETARG_NUMERIC(0); text *fmt = PG_GETARG_TEXT_P(1); - FmtDesc Fmt; + NUMDesc Num; FormatNode *format; text *result; bool shouldFree; @@ -4972,7 +4972,7 @@ numeric_to_char(PG_FUNCTION_ARGS) /* * On DateType depend part (numeric) */ - if (IS_ROMAN(&Fmt)) + if (IS_ROMAN(&Num)) { x = DatumGetNumeric(DirectFunctionCall2(numeric_round, NumericGetDatum(value), @@ -4981,9 +4981,9 @@ numeric_to_char(PG_FUNCTION_ARGS) int_to_roman(DatumGetInt32(DirectFunctionCall1(numeric_int4, NumericGetDatum(x)))); } - else if (IS_EEEE(&Fmt)) + else if (IS_EEEE(&Num)) { - orgnum = numeric_out_sci(value, Fmt.post); + orgnum = numeric_out_sci(value, Num.post); /* * numeric_out_sci() does not emit a sign for positive numbers. We @@ -4996,10 +4996,10 @@ numeric_to_char(PG_FUNCTION_ARGS) * Allow 6 characters for the leading sign, the decimal point, * "e", the exponent's sign and two exponent digits. */ - numstr = (char *) palloc(Fmt.pre + Fmt.post + 7); - fill_str(numstr, '#', Fmt.pre + Fmt.post + 6); + numstr = (char *) palloc(Num.pre + Num.post + 7); + fill_str(numstr, '#', Num.pre + Num.post + 6); *numstr = ' '; - *(numstr + Fmt.pre + 1) = '.'; + *(numstr + Num.pre + 1) = '.'; } else if (*orgnum != '-') { @@ -5017,12 +5017,12 @@ numeric_to_char(PG_FUNCTION_ARGS) int numstr_pre_len; Numeric val = value; - if (IS_MULTI(&Fmt)) + if (IS_MULTI(&Num)) { Numeric a = DatumGetNumeric(DirectFunctionCall1(int4_numeric, Int32GetDatum(10))); Numeric b = DatumGetNumeric(DirectFunctionCall1(int4_numeric, - Int32GetDatum(Fmt.multi))); + Int32GetDatum(Num.multi))); x = DatumGetNumeric(DirectFunctionCall2(numeric_power, NumericGetDatum(a), @@ -5030,12 +5030,12 @@ numeric_to_char(PG_FUNCTION_ARGS) val = DatumGetNumeric(DirectFunctionCall2(numeric_mul, NumericGetDatum(value), NumericGetDatum(x))); - Fmt.pre += Fmt.multi; + Num.pre += Num.multi; } x = DatumGetNumeric(DirectFunctionCall2(numeric_round, NumericGetDatum(val), - Int32GetDatum(Fmt.post))); + Int32GetDatum(Num.post))); orgnum = DatumGetCString(DirectFunctionCall1(numeric_out, NumericGetDatum(x))); @@ -5056,14 +5056,14 @@ numeric_to_char(PG_FUNCTION_ARGS) numstr_pre_len = strlen(numstr); /* needs padding? */ - if (numstr_pre_len < Fmt.pre) - out_pre_spaces = Fmt.pre - numstr_pre_len; + if (numstr_pre_len < Num.pre) + out_pre_spaces = Num.pre - numstr_pre_len; /* overflowed prefix digit format? */ - else if (numstr_pre_len > Fmt.pre) + else if (numstr_pre_len > Num.pre) { - numstr = (char *) palloc(Fmt.pre + Fmt.post + 2); - fill_str(numstr, '#', Fmt.pre + Fmt.post + 1); - *(numstr + Fmt.pre) = '.'; + numstr = (char *) palloc(Num.pre + Num.post + 2); + fill_str(numstr, '#', Num.pre + Num.post + 1); + *(numstr + Num.pre) = '.'; } } @@ -5080,7 +5080,7 @@ int4_to_char(PG_FUNCTION_ARGS) { int32 value = PG_GETARG_INT32(0); text *fmt = PG_GETARG_TEXT_P(1); - FmtDesc Fmt; + NUMDesc Num; FormatNode *format; text *result; bool shouldFree; @@ -5094,15 +5094,15 @@ int4_to_char(PG_FUNCTION_ARGS) /* * On DateType depend part (int32) */ - if (IS_ROMAN(&Fmt)) + if (IS_ROMAN(&Num)) numstr = orgnum = int_to_roman(value); - else if (IS_EEEE(&Fmt)) + else if (IS_EEEE(&Num)) { /* we can do it easily because float8 won't lose any precision */ float8 val = (float8) value; orgnum = (char *) palloc(MAXDOUBLEWIDTH + 1); - snprintf(orgnum, MAXDOUBLEWIDTH + 1, "%+.*e", Fmt.post, val); + snprintf(orgnum, MAXDOUBLEWIDTH + 1, "%+.*e", Num.post, val); /* * Swap a leading positive sign for a space. @@ -5116,11 +5116,11 @@ int4_to_char(PG_FUNCTION_ARGS) { int numstr_pre_len; - if (IS_MULTI(&Fmt)) + if (IS_MULTI(&Num)) { orgnum = DatumGetCString(DirectFunctionCall1(int4out, - Int32GetDatum(value * ((int32) pow((double) 10, (double) Fmt.multi))))); - Fmt.pre += Fmt.multi; + Int32GetDatum(value * ((int32) pow((double) 10, (double) Num.multi))))); + Num.pre += Num.multi; } else { @@ -5139,26 +5139,26 @@ int4_to_char(PG_FUNCTION_ARGS) numstr_pre_len = strlen(orgnum); /* post-decimal digits? Pad out with zeros. */ - if (Fmt.post) + if (Num.post) { - numstr = (char *) palloc(numstr_pre_len + Fmt.post + 2); + numstr = (char *) palloc(numstr_pre_len + Num.post + 2); strcpy(numstr, orgnum); *(numstr + numstr_pre_len) = '.'; - memset(numstr + numstr_pre_len + 1, '0', Fmt.post); - *(numstr + numstr_pre_len + Fmt.post + 1) = '\0'; + memset(numstr + numstr_pre_len + 1, '0', Num.post); + *(numstr + numstr_pre_len + Num.post + 1) = '\0'; } else numstr = orgnum; /* needs padding? */ - if (numstr_pre_len < Fmt.pre) - out_pre_spaces = Fmt.pre - numstr_pre_len; + if (numstr_pre_len < Num.pre) + out_pre_spaces = Num.pre - numstr_pre_len; /* overflowed prefix digit format? */ - else if (numstr_pre_len > Fmt.pre) + else if (numstr_pre_len > Num.pre) { - numstr = (char *) palloc(Fmt.pre + Fmt.post + 2); - fill_str(numstr, '#', Fmt.pre + Fmt.post + 1); - *(numstr + Fmt.pre) = '.'; + numstr = (char *) palloc(Num.pre + Num.post + 2); + fill_str(numstr, '#', Num.pre + Num.post + 1); + *(numstr + Num.pre) = '.'; } } @@ -5175,7 +5175,7 @@ int8_to_char(PG_FUNCTION_ARGS) { int64 value = PG_GETARG_INT64(0); text *fmt = PG_GETARG_TEXT_P(1); - FmtDesc Fmt; + NUMDesc Num; FormatNode *format; text *result; bool shouldFree; @@ -5189,20 +5189,20 @@ int8_to_char(PG_FUNCTION_ARGS) /* * On DateType depend part (int32) */ - if (IS_ROMAN(&Fmt)) + if (IS_ROMAN(&Num)) { /* Currently don't support int8 conversion to roman... */ numstr = orgnum = int_to_roman(DatumGetInt32( DirectFunctionCall1(int84, Int64GetDatum(value)))); } - else if (IS_EEEE(&Fmt)) + else if (IS_EEEE(&Num)) { /* to avoid loss of precision, must go via numeric not float8 */ Numeric val; val = DatumGetNumeric(DirectFunctionCall1(int8_numeric, Int64GetDatum(value))); - orgnum = numeric_out_sci(val, Fmt.post); + orgnum = numeric_out_sci(val, Num.post); /* * numeric_out_sci() does not emit a sign for positive numbers. We @@ -5224,15 +5224,15 @@ int8_to_char(PG_FUNCTION_ARGS) { int numstr_pre_len; - if (IS_MULTI(&Fmt)) + if (IS_MULTI(&Num)) { - double multi = pow((double) 10, (double) Fmt.multi); + double multi = pow((double) 10, (double) Num.multi); value = DatumGetInt64(DirectFunctionCall2(int8mul, Int64GetDatum(value), DirectFunctionCall1(dtoi8, Float8GetDatum(multi)))); - Fmt.pre += Fmt.multi; + Num.pre += Num.multi; } orgnum = DatumGetCString(DirectFunctionCall1(int8out, @@ -5249,26 +5249,26 @@ int8_to_char(PG_FUNCTION_ARGS) numstr_pre_len = strlen(orgnum); /* post-decimal digits? Pad out with zeros. */ - if (Fmt.post) + if (Num.post) { - numstr = (char *) palloc(numstr_pre_len + Fmt.post + 2); + numstr = (char *) palloc(numstr_pre_len + Num.post + 2); strcpy(numstr, orgnum); *(numstr + numstr_pre_len) = '.'; - memset(numstr + numstr_pre_len + 1, '0', Fmt.post); - *(numstr + numstr_pre_len + Fmt.post + 1) = '\0'; + memset(numstr + numstr_pre_len + 1, '0', Num.post); + *(numstr + numstr_pre_len + Num.post + 1) = '\0'; } else numstr = orgnum; /* needs padding? */ - if (numstr_pre_len < Fmt.pre) - out_pre_spaces = Fmt.pre - numstr_pre_len; + if (numstr_pre_len < Num.pre) + out_pre_spaces = Num.pre - numstr_pre_len; /* overflowed prefix digit format? */ - else if (numstr_pre_len > Fmt.pre) + else if (numstr_pre_len > Num.pre) { - numstr = (char *) palloc(Fmt.pre + Fmt.post + 2); - fill_str(numstr, '#', Fmt.pre + Fmt.post + 1); - *(numstr + Fmt.pre) = '.'; + numstr = (char *) palloc(Num.pre + Num.post + 2); + fill_str(numstr, '#', Num.pre + Num.post + 1); + *(numstr + Num.pre) = '.'; } } @@ -5285,7 +5285,7 @@ float4_to_char(PG_FUNCTION_ARGS) { float4 value = PG_GETARG_FLOAT4(0); text *fmt = PG_GETARG_TEXT_P(1); - FmtDesc Fmt; + NUMDesc Num; FormatNode *format; text *result; bool shouldFree; @@ -5297,9 +5297,9 @@ float4_to_char(PG_FUNCTION_ARGS) NUM_TOCHAR_prepare; - if (IS_ROMAN(&Fmt)) + if (IS_ROMAN(&Num)) numstr = orgnum = int_to_roman((int) rint(value)); - else if (IS_EEEE(&Fmt)) + else if (IS_EEEE(&Num)) { numstr = orgnum = (char *) palloc(MAXDOUBLEWIDTH + 1); if (isnan(value) || is_infinite(value)) @@ -5308,14 +5308,14 @@ float4_to_char(PG_FUNCTION_ARGS) * Allow 6 characters for the leading sign, the decimal point, * "e", the exponent's sign and two exponent digits. */ - numstr = (char *) palloc(Fmt.pre + Fmt.post + 7); - fill_str(numstr, '#', Fmt.pre + Fmt.post + 6); + numstr = (char *) palloc(Num.pre + Num.post + 7); + fill_str(numstr, '#', Num.pre + Num.post + 6); *numstr = ' '; - *(numstr + Fmt.pre + 1) = '.'; + *(numstr + Num.pre + 1) = '.'; } else { - snprintf(orgnum, MAXDOUBLEWIDTH + 1, "%+.*e", Fmt.post, value); + snprintf(orgnum, MAXDOUBLEWIDTH + 1, "%+.*e", Num.post, value); /* * Swap a leading positive sign for a space. @@ -5331,12 +5331,12 @@ float4_to_char(PG_FUNCTION_ARGS) float4 val = value; int numstr_pre_len; - if (IS_MULTI(&Fmt)) + if (IS_MULTI(&Num)) { - float multi = pow((double) 10, (double) Fmt.multi); + float multi = pow((double) 10, (double) Num.multi); val = value * multi; - Fmt.pre += Fmt.multi; + Num.pre += Num.multi; } orgnum = (char *) palloc(MAXFLOATWIDTH + 1); @@ -5345,10 +5345,10 @@ float4_to_char(PG_FUNCTION_ARGS) /* adjust post digits to fit max float digits */ if (numstr_pre_len >= FLT_DIG) - Fmt.post = 0; - else if (numstr_pre_len + Fmt.post > FLT_DIG) - Fmt.post = FLT_DIG - numstr_pre_len; - snprintf(orgnum, MAXFLOATWIDTH + 1, "%.*f", Fmt.post, val); + Num.post = 0; + else if (numstr_pre_len + Num.post > FLT_DIG) + Num.post = FLT_DIG - numstr_pre_len; + snprintf(orgnum, MAXFLOATWIDTH + 1, "%.*f", Num.post, val); if (*orgnum == '-') { /* < 0 */ @@ -5367,14 +5367,14 @@ float4_to_char(PG_FUNCTION_ARGS) numstr_pre_len = strlen(numstr); /* needs padding? */ - if (numstr_pre_len < Fmt.pre) - out_pre_spaces = Fmt.pre - numstr_pre_len; + if (numstr_pre_len < Num.pre) + out_pre_spaces = Num.pre - numstr_pre_len; /* overflowed prefix digit format? */ - else if (numstr_pre_len > Fmt.pre) + else if (numstr_pre_len > Num.pre) { - numstr = (char *) palloc(Fmt.pre + Fmt.post + 2); - fill_str(numstr, '#', Fmt.pre + Fmt.post + 1); - *(numstr + Fmt.pre) = '.'; + numstr = (char *) palloc(Num.pre + Num.post + 2); + fill_str(numstr, '#', Num.pre + Num.post + 1); + *(numstr + Num.pre) = '.'; } } @@ -5391,7 +5391,7 @@ float8_to_char(PG_FUNCTION_ARGS) { float8 value = PG_GETARG_FLOAT8(0); text *fmt = PG_GETARG_TEXT_P(1); - FmtDesc Fmt; + NUMDesc Num; FormatNode *format; text *result; bool shouldFree; @@ -5403,9 +5403,9 @@ float8_to_char(PG_FUNCTION_ARGS) NUM_TOCHAR_prepare; - if (IS_ROMAN(&Fmt)) + if (IS_ROMAN(&Num)) numstr = orgnum = int_to_roman((int) rint(value)); - else if (IS_EEEE(&Fmt)) + else if (IS_EEEE(&Num)) { numstr = orgnum = (char *) palloc(MAXDOUBLEWIDTH + 1); if (isnan(value) || is_infinite(value)) @@ -5414,14 +5414,14 @@ float8_to_char(PG_FUNCTION_ARGS) * Allow 6 characters for the leading sign, the decimal point, * "e", the exponent's sign and two exponent digits. */ - numstr = (char *) palloc(Fmt.pre + Fmt.post + 7); - fill_str(numstr, '#', Fmt.pre + Fmt.post + 6); + numstr = (char *) palloc(Num.pre + Num.post + 7); + fill_str(numstr, '#', Num.pre + Num.post + 6); *numstr = ' '; - *(numstr + Fmt.pre + 1) = '.'; + *(numstr + Num.pre + 1) = '.'; } else { - snprintf(orgnum, MAXDOUBLEWIDTH + 1, "%+.*e", Fmt.post, value); + snprintf(orgnum, MAXDOUBLEWIDTH + 1, "%+.*e", Num.post, value); /* * Swap a leading positive sign for a space. @@ -5437,22 +5437,22 @@ float8_to_char(PG_FUNCTION_ARGS) float8 val = value; int numstr_pre_len; - if (IS_MULTI(&Fmt)) + if (IS_MULTI(&Num)) { - double multi = pow((double) 10, (double) Fmt.multi); + double multi = pow((double) 10, (double) Num.multi); val = value * multi; - Fmt.pre += Fmt.multi; + Num.pre += Num.multi; } orgnum = (char *) palloc(MAXDOUBLEWIDTH + 1); numstr_pre_len = snprintf(orgnum, MAXDOUBLEWIDTH + 1, "%.0f", fabs(val)); /* adjust post digits to fit max double digits */ if (numstr_pre_len >= DBL_DIG) - Fmt.post = 0; - else if (numstr_pre_len + Fmt.post > DBL_DIG) - Fmt.post = DBL_DIG - numstr_pre_len; - snprintf(orgnum, MAXDOUBLEWIDTH + 1, "%.*f", Fmt.post, val); + Num.post = 0; + else if (numstr_pre_len + Num.post > DBL_DIG) + Num.post = DBL_DIG - numstr_pre_len; + snprintf(orgnum, MAXDOUBLEWIDTH + 1, "%.*f", Num.post, val); if (*orgnum == '-') { /* < 0 */ @@ -5471,14 +5471,14 @@ float8_to_char(PG_FUNCTION_ARGS) numstr_pre_len = strlen(numstr); /* needs padding? */ - if (numstr_pre_len < Fmt.pre) - out_pre_spaces = Fmt.pre - numstr_pre_len; + if (numstr_pre_len < Num.pre) + out_pre_spaces = Num.pre - numstr_pre_len; /* overflowed prefix digit format? */ - else if (numstr_pre_len > Fmt.pre) + else if (numstr_pre_len > Num.pre) { - numstr = (char *) palloc(Fmt.pre + Fmt.post + 2); - fill_str(numstr, '#', Fmt.pre + Fmt.post + 1); - *(numstr + Fmt.pre) = '.'; + numstr = (char *) palloc(Num.pre + Num.post + 2); + fill_str(numstr, '#', Num.pre + Num.post + 1); + *(numstr + Num.pre) = '.'; } }