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

From Karel Zak
Subject Re: to_char PL/MI fix
Date
Msg-id 20030225083853.GB26629@zf.jcu.cz
Whole thread Raw
In response to Re: to_char PL/MI fix  (Peter Eisentraut <peter_e@gmx.net>)
Responses Re: to_char PL/MI fix  (Karel Zak <zakkr@zf.jcu.cz>)
List pgsql-patches
On Mon, Feb 24, 2003 at 08:16:07PM +0100, Peter Eisentraut wrote:
> Karel Zak writes:
>
> >  Peter found bug in the to_char() routine for PL/MI options. This
> >  patch fix it -- but this patch doesn't contains tests or docs fixes. I
> >  will send it later.
>
> I think there is still a problem with PL.  It puts the '+' in aligned
> position and '-' anchored to the number.  Is that correct?  If PL were to

 Yes, it's correct. The MI/PL/SG is PostgreSQL extension, the Oracle
 knows very limited version of MI only -- it means we can implement it
 by our idea.

> behave like the converse of MI and like it is documented, it would put a
> '+' in aligned position and never put a '-' anywhere.  Also, due to this
> apparent problem, PL creates extra whitespace in front of the number.

 PL shows '+' or ' ' on wanted position and not disable '-' beacuse
 the negative number without '-' is other number. I think disable '-'
 for PL will produce mazy outputs (there is not problem implement it,
 but I don't think it's good idea, if you need something like this you
 can use abs() or define format that handle '-').

 The anchored '-' is disabled only if output format contains other option which
 handle '-' (like S/SG/MI).

 The extra space for PL is for anchored '-', if format option contains MI or SG
 this space is not used.

select to_char(x, 'PL9999.999') as pl, to_char(x, 'PLMI9999.999') as plmi from num;
     pl     |    plmi
------------+------------
 +  123.000 | +  123.000
   -123.000 |  - 123.000
  -1231.000 |  -1231.000
 + 1231.000 | + 1231.000
 +    1.900 | +    1.900
     -1.900 |  -   1.900
      -.900 |  -    .900
 +     .900 | +     .900
 +     .945 | +     .945
      -.945 |  -    .945
   -150.945 |  - 150.945
 +  150.945 | +  150.945

  in the 'pl' column is '-' angored to number because is there no other way
how show it.


test=# select to_char(x, '"Number:"PL9999.999MI') as pl from num;
        pl
-------------------
 Number:+ 123.000
 Number:  123.000-
 Number: 1231.000-
 Number:+1231.000
 Number:+   1.900
 Number:    1.900-
 Number:     .900-
 Number:+    .900
 Number:+    .945
 Number:     .945-
 Number:  150.945-
 Number:+ 150.945

 there is not extra space beacuse MI is used.

    Karel

--
 Karel Zak  <zakkr@zf.jcu.cz>
 http://home.zf.jcu.cz/~zakkr/

pgsql-patches by date:

Previous
From: Manfred Spraul
Date:
Subject: Re: performance: use pread instead of lseek+read
Next
From: Tom Lane
Date:
Subject: Re: performance: use pread instead of lseek+read