Re: to_char PL/MI fix - Mailing list pgsql-patches

From Bruce Momjian
Subject Re: to_char PL/MI fix
Date
Msg-id 200303220212.h2M2CeN08728@candle.pha.pa.us
Whole thread Raw
In response to Re: to_char PL/MI fix  (Karel Zak <zakkr@zf.jcu.cz>)
Responses Re: to_char PL/MI fix  (Karel Zak <zakkr@zf.jcu.cz>)
List pgsql-patches
I have backed out this patch until regression test changes are supplied.

---------------------------------------------------------------------------

Karel Zak wrote:
> On Thu, Mar 20, 2003 at 10:45:54AM -0500, Bruce Momjian wrote:
> >
> > Is the new output valid?  If so I can easily at least fix those.
>
>  Hmm.. it's almost valid :-) I found new minor bug in combination FM and PR.
>  I will fix it as soon as possible...
>
>     Karel
>
> --
>  Karel Zak  <zakkr@zf.jcu.cz>
>  http://home.zf.jcu.cz/~zakkr/
>
> ---------------------------(end of broadcast)---------------------------
> TIP 6: Have you searched our list archives?
>
> http://archives.postgresql.org
>

--
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073
? config.log
? GNUmakefile
? config.status
? autom4te.cache
? src/Makefile.global
? src/Makefile.custom
? src/log
? src/backend/postgres
? src/backend/catalog/postgres.description
? src/backend/catalog/postgres.bki
? src/backend/utils/mb/conversion_procs/conversion_create.sql
? src/backend/utils/mb/conversion_procs/ascii_and_mic/libascii_and_mic.so.0.0
? src/backend/utils/mb/conversion_procs/cyrillic_and_mic/libcyrillic_and_mic.so.0.0
? src/backend/utils/mb/conversion_procs/euc_cn_and_mic/libeuc_cn_and_mic.so.0.0
? src/backend/utils/mb/conversion_procs/euc_jp_and_sjis/libeuc_jp_and_sjis.so.0.0
? src/backend/utils/mb/conversion_procs/euc_kr_and_mic/libeuc_kr_and_mic.so.0.0
? src/backend/utils/mb/conversion_procs/euc_tw_and_big5/libeuc_tw_and_big5.so.0.0
? src/backend/utils/mb/conversion_procs/latin2_and_win1250/liblatin2_and_win1250.so.0.0
? src/backend/utils/mb/conversion_procs/latin_and_mic/liblatin_and_mic.so.0.0
? src/backend/utils/mb/conversion_procs/utf8_and_ascii/libutf8_and_ascii.so.0.0
? src/backend/utils/mb/conversion_procs/utf8_and_big5/libutf8_and_big5.so.0.0
? src/backend/utils/mb/conversion_procs/utf8_and_cyrillic/libutf8_and_cyrillic.so.0.0
? src/backend/utils/mb/conversion_procs/utf8_and_euc_cn/libutf8_and_euc_cn.so.0.0
? src/backend/utils/mb/conversion_procs/utf8_and_euc_jp/libutf8_and_euc_jp.so.0.0
? src/backend/utils/mb/conversion_procs/utf8_and_euc_kr/libutf8_and_euc_kr.so.0.0
? src/backend/utils/mb/conversion_procs/utf8_and_euc_tw/libutf8_and_euc_tw.so.0.0
? src/backend/utils/mb/conversion_procs/utf8_and_gb18030/libutf8_and_gb18030.so.0.0
? src/backend/utils/mb/conversion_procs/utf8_and_gbk/libutf8_and_gbk.so.0.0
? src/backend/utils/mb/conversion_procs/utf8_and_iso8859/libutf8_and_iso8859.so.0.0
? src/backend/utils/mb/conversion_procs/utf8_and_iso8859_1/libutf8_and_iso8859_1.so.0.0
? src/backend/utils/mb/conversion_procs/utf8_and_johab/libutf8_and_johab.so.0.0
? src/backend/utils/mb/conversion_procs/utf8_and_sjis/libutf8_and_sjis.so.0.0
? src/backend/utils/mb/conversion_procs/utf8_and_tcvn/libutf8_and_tcvn.so.0.0
? src/backend/utils/mb/conversion_procs/utf8_and_uhc/libutf8_and_uhc.so.0.0
? src/backend/utils/mb/conversion_procs/utf8_and_win1250/libutf8_and_win1250.so.0.0
? src/backend/utils/mb/conversion_procs/utf8_and_win1256/libutf8_and_win1256.so.0.0
? src/backend/utils/mb/conversion_procs/utf8_and_win874/libutf8_and_win874.so.0.0
? src/bin/initdb/initdb
? src/bin/initlocation/initlocation
? src/bin/ipcclean/ipcclean
? src/bin/pg_config/pg_config
? src/bin/pg_controldata/pg_controldata
? src/bin/pg_ctl/pg_ctl
? src/bin/pg_dump/pg_dump
? src/bin/pg_dump/pg_restore
? src/bin/pg_dump/pg_dumpall
? src/bin/pg_encoding/pg_encoding
? src/bin/pg_id/pg_id
? src/bin/pg_resetxlog/pg_resetxlog
? src/bin/pgtclsh/pgtclsh
? src/bin/pgtclsh/pgtksh
? src/bin/psql/psql
? src/bin/scripts/createdb
? src/bin/scripts/createlang
? src/bin/scripts/createuser
? src/bin/scripts/dropdb
? src/bin/scripts/droplang
? src/bin/scripts/dropuser
? src/include/pg_config.h
? src/include/stamp-h
? src/interfaces/ecpg/ecpglib/libecpg.so.3.4.2
? src/interfaces/ecpg/pgtypeslib/libpgtypes.so.1.0.0
? src/interfaces/ecpg/preproc/ecpg
? src/interfaces/jdbc/build.properties
? src/interfaces/jdbc/build
? src/interfaces/jdbc/jars
? src/interfaces/jdbc/org/postgresql/Driver.java
? src/interfaces/libpgtcl/libpgtcl.so.2.4
? src/interfaces/libpq/libpq.so.3.1
? src/interfaces/python/lib_pgmodule.so.2.4
? src/pl/plperl/SPI.c
? src/pl/plperl/libplperl.so.0.0
? src/pl/plpgsql/src/libplpgsql.so.1.0
? src/pl/tcl/libpltcl.so.2.0
? src/pl/tcl/modules/pltcl_loadmod
? src/pl/tcl/modules/pltcl_delmod
? src/pl/tcl/modules/pltcl_listmod
? src/test/regress/pg_regress
? src/test/regress/results
? src/test/regress/regression.out
? src/test/regress/regression.diffs
? src/test/regress/expected/copy.out
? src/test/regress/expected/create_function_1.out
? src/test/regress/expected/create_function_2.out
? src/test/regress/expected/misc.out
? src/test/regress/expected/constraints.out
? src/test/regress/sql/copy.sql
? src/test/regress/sql/create_function_1.sql
? src/test/regress/sql/create_function_2.sql
? src/test/regress/sql/misc.sql
? src/test/regress/sql/constraints.sql
Index: src/backend/utils/adt/formatting.c
===================================================================
RCS file: /cvsroot/pgsql-server/src/backend/utils/adt/formatting.c,v
retrieving revision 1.58
retrieving revision 1.59
diff -c -r1.58 -r1.59
*** src/backend/utils/adt/formatting.c    10 Mar 2003 22:28:18 -0000    1.58
--- src/backend/utils/adt/formatting.c    20 Mar 2003 05:19:26 -0000    1.59
***************
*** 1,7 ****
  /* -----------------------------------------------------------------------
   * formatting.c
   *
!  * $Header: /cvsroot/pgsql-server/src/backend/utils/adt/formatting.c,v 1.58 2003/03/10 22:28:18 tgl Exp $
   *
   *
   *     Portions Copyright (c) 1999-2002, PostgreSQL Global Development Group
--- 1,7 ----
  /* -----------------------------------------------------------------------
   * formatting.c
   *
!  * $Header: /cvsroot/pgsql-server/src/backend/utils/adt/formatting.c,v 1.59 2003/03/20 05:19:26 momjian Exp $
   *
   *
   *     Portions Copyright (c) 1999-2002, PostgreSQL Global Development Group
***************
*** 276,292 ****
   * Flags for NUMBER version
   * ----------
   */
! #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
--- 276,294 ----
   * 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_LSIGN_PRE    -1
  #define NUM_LSIGN_POST    1
***************
*** 1052,1057 ****
--- 1054,1061 ----
                  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:
***************
*** 1061,1066 ****
--- 1065,1072 ----
                  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:
***************
*** 3880,3907 ****
      else
      {
          Np->sign = sign;
!
!         if (Np->sign != '-')
          {
!             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
!             Np->sign_wrote = FALSE;        /* need sign */

!         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;

!         /* 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 */
      }

      /*
--- 3886,3921 ----
      else
      {
          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 (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;

!             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;

!             if (Np->Num->lsign == NUM_LSIGN_PRE && Np->Num->pre == Np->Num->pre_lsign_num)
!                 Np->Num->lsign = NUM_LSIGN_POST;
!         }
      }

      /*
***************
*** 3917,3923 ****
          {
              if (IS_DECIMAL(Np->Num))
                  Np->last_relevant = get_last_relevant_decnum(
!                                                              Np->number +
                                   ((Np->Num->zero_end - Np->num_pre > 0) ?
                                    Np->Num->zero_end - Np->num_pre : 0));
          }
--- 3931,3937 ----
          {
              if (IS_DECIMAL(Np->Num))
                  Np->last_relevant = get_last_relevant_decnum(
!                                  Np->number +
                                   ((Np->Num->zero_end - Np->num_pre > 0) ?
                                    Np->Num->zero_end - Np->num_pre : 0));
          }
***************
*** 3946,3962 ****
              /*
               * terrible Ora format
               */
!             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)
!                         ++Np->sign_pos;
!                     else
                          --Np->sign_pos;
                  }
              }
--- 3960,3974 ----
              /*
               * terrible Ora format
               */
!             if (IS_ZERO(Np->Num)==FALSE && *Np->number == '0' &&
!                 IS_FILLMODE(Np->Num)==FALSE && Np->Num->post)
              {

                  ++Np->sign_pos;

                  if (IS_LSIGN(Np->Num))
                  {
!                     if (Np->Num->lsign != NUM_LSIGN_PRE)
                          --Np->sign_pos;
                  }
              }
***************
*** 3975,3982 ****

  #ifdef DEBUG_TO_FROM_CHAR
      elog(DEBUG_elog_output,
!
!          "\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,
--- 3987,3994 ----

  #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,
           Np->number,
           Np->Num->pre,
           Np->Num->post,
***************
*** 3987,3994 ****
           IS_ZERO(Np->Num) ? "Yes" : "No",
           Np->Num->zero_start,
           Np->Num->zero_end,
!          Np->last_relevant ? Np->last_relevant : "<not set>"
!         );
  #endif

      /*
--- 3999,4009 ----
           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"
!     );
  #endif

      /*

pgsql-patches by date:

Previous
From: "Jeroen T. Vermeulen"
Date:
Subject: Re: psql patch (2)
Next
From: Bruce Momjian
Date:
Subject: Re: Add CLUSTER ON to pg_dumps