Back out to_char fixes until regression tests are fixed.

This commit is contained in:
Bruce Momjian 2003-03-22 02:12:24 +00:00
parent 05f916e6ad
commit aaf11b931f

View File

@ -1,7 +1,7 @@
/* ----------------------------------------------------------------------- /* -----------------------------------------------------------------------
* formatting.c * formatting.c
* *
* $Header: /cvsroot/pgsql/src/backend/utils/adt/formatting.c,v 1.59 2003/03/20 05:19:26 momjian Exp $ * $Header: /cvsroot/pgsql/src/backend/utils/adt/formatting.c,v 1.60 2003/03/22 02:12:24 momjian Exp $
* *
* *
* Portions Copyright (c) 1999-2002, PostgreSQL Global Development Group * Portions Copyright (c) 1999-2002, PostgreSQL Global Development Group
@ -276,19 +276,17 @@ typedef struct
* Flags for NUMBER version * Flags for NUMBER version
* ---------- * ----------
*/ */
#define NUM_F_DECIMAL 1 << 1 #define NUM_F_DECIMAL 0x01
#define NUM_F_LDECIMAL 1 << 2 #define NUM_F_LDECIMAL 0x02
#define NUM_F_ZERO 1 << 3 #define NUM_F_ZERO 0x04
#define NUM_F_BLANK 1 << 4 #define NUM_F_BLANK 0x08
#define NUM_F_FILLMODE 1 << 5 #define NUM_F_FILLMODE 0x10
#define NUM_F_LSIGN 1 << 6 #define NUM_F_LSIGN 0x20
#define NUM_F_BRACKET 1 << 7 #define NUM_F_BRACKET 0x40
#define NUM_F_MINUS 1 << 8 #define NUM_F_MINUS 0x80
#define NUM_F_PLUS 1 << 9 #define NUM_F_PLUS 0x100
#define NUM_F_ROMAN 1 << 10 #define NUM_F_ROMAN 0x200
#define NUM_F_MULTI 1 << 11 #define NUM_F_MULTI 0x400
#define NUM_F_PLUS_POST 1 << 12
#define NUM_F_MINUS_POST 1 << 13
#define NUM_LSIGN_PRE -1 #define NUM_LSIGN_PRE -1
#define NUM_LSIGN_POST 1 #define NUM_LSIGN_POST 1
@ -1054,8 +1052,6 @@ NUMDesc_prepare(NUMDesc *num, FormatNode *n)
elog(ERROR, "to_char/to_number(): can't use 'S' and 'MI' together."); elog(ERROR, "to_char/to_number(): can't use 'S' and 'MI' together.");
} }
num->flag |= NUM_F_MINUS; num->flag |= NUM_F_MINUS;
if (IS_DECIMAL(num))
num->flag |= NUM_F_MINUS_POST;
break; break;
case NUM_PL: case NUM_PL:
@ -1065,8 +1061,6 @@ NUMDesc_prepare(NUMDesc *num, FormatNode *n)
elog(ERROR, "to_char/to_number(): can't use 'S' and 'PL' together."); elog(ERROR, "to_char/to_number(): can't use 'S' and 'PL' together.");
} }
num->flag |= NUM_F_PLUS; num->flag |= NUM_F_PLUS;
if (IS_DECIMAL(num))
num->flag |= NUM_F_PLUS_POST;
break; break;
case NUM_SG: case NUM_SG:
@ -3887,23 +3881,12 @@ NUM_processor(FormatNode *node, NUMDesc *Num, char *inout, char *number,
{ {
Np->sign = sign; Np->sign = sign;
/* MI/PL/SG - write sign itself and not in number */
if (IS_PLUS(Np->Num) || IS_MINUS(Np->Num))
{
if (IS_PLUS(Np->Num) && IS_MINUS(Np->Num)==FALSE)
Np->sign_wrote = FALSE;
Np->sign_pos = -1;
}
else
{
if (Np->sign != '-') if (Np->sign != '-')
{ {
if (IS_BRACKET(Np->Num))
Np->Num->flag &= ~NUM_F_BRACKET; Np->Num->flag &= ~NUM_F_BRACKET;
if (IS_MINUS(Np->Num))
Np->Num->flag &= ~NUM_F_MINUS; Np->Num->flag &= ~NUM_F_MINUS;
} }
else if (Np->sign != '+' && IS_PLUS(Np->Num)) else if (Np->sign != '+')
Np->Num->flag &= ~NUM_F_PLUS; Np->Num->flag &= ~NUM_F_PLUS;
if (Np->sign == '+' && IS_FILLMODE(Np->Num) && !IS_LSIGN(Np->Num)) if (Np->sign == '+' && IS_FILLMODE(Np->Num) && !IS_LSIGN(Np->Num))
@ -3915,7 +3898,10 @@ NUM_processor(FormatNode *node, NUMDesc *Num, char *inout, char *number,
if (Np->Num->lsign == NUM_LSIGN_PRE && Np->Num->pre == Np->Num->pre_lsign_num) if (Np->Num->lsign == NUM_LSIGN_PRE && Np->Num->pre == Np->Num->pre_lsign_num)
Np->Num->lsign = NUM_LSIGN_POST; Np->Num->lsign = NUM_LSIGN_POST;
}
/* MI/PL/SG - write sign itself and not in number */
if (IS_PLUS(Np->Num) || IS_MINUS(Np->Num))
Np->sign_wrote = TRUE; /* needn't sign */
} }
/* /*
@ -3960,15 +3946,17 @@ NUM_processor(FormatNode *node, NUMDesc *Num, char *inout, char *number,
/* /*
* terrible Ora format * terrible Ora format
*/ */
if (IS_ZERO(Np->Num)==FALSE && *Np->number == '0' && if (!IS_ZERO(Np->Num) && *Np->number == '0' &&
IS_FILLMODE(Np->Num)==FALSE && Np->Num->post) !IS_FILLMODE(Np->Num) && Np->Num->post != 0)
{ {
++Np->sign_pos; ++Np->sign_pos;
if (IS_LSIGN(Np->Num)) if (IS_LSIGN(Np->Num))
{ {
if (Np->Num->lsign != NUM_LSIGN_PRE) if (Np->Num->lsign == NUM_LSIGN_PRE)
++Np->sign_pos;
else
--Np->sign_pos; --Np->sign_pos;
} }
} }
@ -3987,8 +3975,8 @@ NUM_processor(FormatNode *node, NUMDesc *Num, char *inout, char *number,
#ifdef DEBUG_TO_FROM_CHAR #ifdef DEBUG_TO_FROM_CHAR
elog(DEBUG_elog_output, 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_POS: %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",
Np->sign, "\n\tNUM: '%s'\n\tPRE: %d\n\tPOST: %d\n\tNUM_COUNT: %d\n\tNUM_PRE: %d\n\tSIGN_POS: %d\n\tSIGN_WROTE: %s\n\tZERO: %s\n\tZERO_START: %d\n\tZERO_END: %d\n\tLAST_RELEVANT: %s",
Np->number, Np->number,
Np->Num->pre, Np->Num->pre,
Np->Num->post, Np->Num->post,
@ -3999,10 +3987,7 @@ NUM_processor(FormatNode *node, NUMDesc *Num, char *inout, char *number,
IS_ZERO(Np->Num) ? "Yes" : "No", IS_ZERO(Np->Num) ? "Yes" : "No",
Np->Num->zero_start, Np->Num->zero_start,
Np->Num->zero_end, Np->Num->zero_end,
Np->last_relevant ? Np->last_relevant : "<not set>", Np->last_relevant ? Np->last_relevant : "<not set>"
IS_BRACKET(Np->Num) ? "Yes" : "No",
IS_PLUS(Np->Num) ? "Yes" : "No",
IS_MINUS(Np->Num) ? "Yes" : "No"
); );
#endif #endif