]> granicus.if.org Git - postgresql/commitdiff
Back out to_char fixes until regression tests are fixed.
authorBruce Momjian <bruce@momjian.us>
Sat, 22 Mar 2003 02:12:24 +0000 (02:12 +0000)
committerBruce Momjian <bruce@momjian.us>
Sat, 22 Mar 2003 02:12:24 +0000 (02:12 +0000)
src/backend/utils/adt/formatting.c

index 89671b7f200b0abda355a2b62627bdfb78d23c5a..0b97519d4310e282103092c29b632bbbdf4fb468 100644 (file)
@@ -1,7 +1,7 @@
 /* -----------------------------------------------------------------------
  * 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
@@ -276,19 +276,17 @@ typedef struct
  * Flags for NUMBER version
  * ----------
  */
-#define NUM_F_DECIMAL          1 << 1
-#define NUM_F_LDECIMAL         1 << 2
-#define NUM_F_ZERO             1 << 3
-#define NUM_F_BLANK            1 << 4
-#define NUM_F_FILLMODE         1 << 5
-#define NUM_F_LSIGN            1 << 6
-#define NUM_F_BRACKET          1 << 7
-#define NUM_F_MINUS            1 << 8
-#define NUM_F_PLUS             1 << 9
-#define NUM_F_ROMAN            1 << 10
-#define NUM_F_MULTI            1 << 11
-#define NUM_F_PLUS_POST        1 << 12
-#define NUM_F_MINUS_POST       1 << 13
+#define NUM_F_DECIMAL  0x01
+#define NUM_F_LDECIMAL 0x02
+#define NUM_F_ZERO     0x04
+#define NUM_F_BLANK 0x08
+#define NUM_F_FILLMODE 0x10
+#define NUM_F_LSIGN 0x20
+#define NUM_F_BRACKET  0x40
+#define NUM_F_MINUS 0x80
+#define NUM_F_PLUS     0x100
+#define NUM_F_ROMAN 0x200
+#define NUM_F_MULTI 0x400
 
 #define NUM_LSIGN_PRE  -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.");
                        }
                        num->flag |= NUM_F_MINUS;
-                       if (IS_DECIMAL(num))
-                               num->flag |= NUM_F_MINUS_POST;
                        break;
 
                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.");
                        }
                        num->flag |= NUM_F_PLUS;
-                       if (IS_DECIMAL(num))
-                               num->flag |= NUM_F_PLUS_POST;
                        break;
 
                case NUM_SG:
@@ -3886,36 +3880,28 @@ NUM_processor(FormatNode *node, NUMDesc *Num, char *inout, char *number,
        else
        {
                Np->sign = sign;
-               
-               /* MI/PL/SG - write sign itself and not in number */
-               if (IS_PLUS(Np->Num) || IS_MINUS(Np->Num))
+
+               if (Np->sign != '-')
                {
-                       if (IS_PLUS(Np->Num) && IS_MINUS(Np->Num)==FALSE)
-                               Np->sign_wrote = FALSE;
-                       Np->sign_pos = -1;
+                       Np->Num->flag &= ~NUM_F_BRACKET;
+                       Np->Num->flag &= ~NUM_F_MINUS;
                }
+               else if (Np->sign != '+')
+                       Np->Num->flag &= ~NUM_F_PLUS;
+
+               if (Np->sign == '+' && IS_FILLMODE(Np->Num) && !IS_LSIGN(Np->Num))
+                       Np->sign_wrote = TRUE;          /* needn't sign */
                else
-               {
-                       if (Np->sign != '-')
-                       {
-                               if (IS_BRACKET(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->Num))
-                               Np->Num->flag &= ~NUM_F_PLUS;
+                       Np->sign_wrote = FALSE;         /* need sign */
 
-                       if (Np->sign == '+' && IS_FILLMODE(Np->Num) && !IS_LSIGN(Np->Num))
-                               Np->sign_wrote = TRUE;          /* needn't sign */
-                       else
-                               Np->sign_wrote = FALSE;         /* need sign */
+               Np->sign_pos = -1;
 
-                       Np->sign_pos = -1;
+               if (Np->Num->lsign == NUM_LSIGN_PRE && Np->Num->pre == Np->Num->pre_lsign_num)
+                       Np->Num->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;
-               }
+               /* 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 */
        }
 
        /*
@@ -3931,7 +3917,7 @@ NUM_processor(FormatNode *node, NUMDesc *Num, char *inout, char *number,
                {
                        if (IS_DECIMAL(Np->Num))
                                Np->last_relevant = get_last_relevant_decnum(
-                                                                Np->number +
+                                                                                                                        Np->number +
                                                                 ((Np->Num->zero_end - Np->num_pre > 0) ?
                                                                  Np->Num->zero_end - Np->num_pre : 0));
                }
@@ -3960,15 +3946,17 @@ NUM_processor(FormatNode *node, NUMDesc *Num, char *inout, char *number,
                        /*
                         * terrible Ora format
                         */
-                       if (IS_ZERO(Np->Num)==FALSE && *Np->number == '0' &&
-                               IS_FILLMODE(Np->Num)==FALSE && Np->Num->post)
+                       if (!IS_ZERO(Np->Num) && *Np->number == '0' &&
+                               !IS_FILLMODE(Np->Num) && Np->Num->post != 0)
                        {
 
                                ++Np->sign_pos;
 
                                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;
                                }
                        }
@@ -3987,8 +3975,8 @@ NUM_processor(FormatNode *node, NUMDesc *Num, char *inout, char *number,
 
 #ifdef DEBUG_TO_FROM_CHAR
        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->Num->pre,
                 Np->Num->post,
@@ -3999,11 +3987,8 @@ NUM_processor(FormatNode *node, NUMDesc *Num, char *inout, char *number,
                 IS_ZERO(Np->Num) ? "Yes" : "No",
                 Np->Num->zero_start,
                 Np->Num->zero_end,
-                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"
-       );
+                Np->last_relevant ? Np->last_relevant : "<not set>"
+               );
 #endif
 
        /*