Обсуждение: [TEST REPORT] 9.1Alpha3 Feature E.1.4.7.2 in release notes.

Поиск
Список
Период
Сортировка

[TEST REPORT] 9.1Alpha3 Feature E.1.4.7.2 in release notes.

От
Ramanujam
Дата:
[TEST REPORT]

[Release]: 9.1Alpha3. Binaries compiled with mingw-32 (gcc 4.4.0) on
i686 without zlib support.

[Test Type]: Feature

[Test]: a) Check feature E.1.4.7.2 in 9.1Alpha3 release notes
(Monetary data type). b) Documentation mistake(?)

[Platform]: Windows 7 Professional 64 bit. Intel Core i5 2.67 GHz. 4 GB RAM.

[Parameters]: None

[Failure]: Yes

[Results]: Documentation states that integer literals are allowed
values for input. I am getting the following error:

test=# select version();
PostgreSQL 9.1alpha3 on i686-pc-mingw32, compiled by GCC gcc.exe (GCC)
4.4.0, 32-bit
(1 row)

test=# show lc_monetary;
Japanese_Japan.932
(1 row)

test-# CREATE TABLE moneytbl VALUES (m1 money, m2 money);
CREATE TABLE
test=# INSERT INTO moneytbl VALUES (1,2);
ERROR: column "m1" is of type money but expression is of type integer
at character 30
HINT: You will need to rewrite or cast the expression.
STATEMENT: INSERT INTO moneytbl VALUES (1,2);
ERROR: column "m1" is of type money but expression is of type integer
LINE 1: INSERT INTO moneytbl VALUES (1,2);
                                                              ^
HINT: You will need to rewrite or cast the expression.
test-#

[Comments]:
1. Other type of inserts seem fine so far:
test=# INSERT INTO moneytbl VALUES ('1','2');
INSERT 0 1
test=# INSERT INTO moneytbl VALUES ('\1',\'2');   -- The "\" character
translates to the yen currency symbol in a Windows japanese locale environment.
INSERT 0 1
test=# INSERT INTO moneytbl VALUES (1::numeric,2::numeric); -- Feature
numeric to money cast check. OK.
INSERT 0 1
test=# INSERT INTO moneytbl VALUES (10.4345,7.234);
INSERT 0 1
test=# SELECT *, m1/m2 FROM moneytbl; --
Feature division of monetary types yielding float8. OK.
 m1  | m2 |
-----+----+------------------
 \1 | \2 |              0.5
 \1 | \2 |              0.5
 \1 | \2 |              0.5
 \10 | \7 | 1.42857142857143

2. A nitpick is that fraction yen values cannot be saved. float8
inputs in ja_JP locale settings get rounded (as seen above). While the
lowest denomination is indeed 1円, fractional yen values are highly
desirable. I am forced to use numeric (x,2) as fractional yen values
are not supported. This is based on a production use-case scenario.

Ramanujam

Re: [TEST REPORT] 9.1Alpha3 Feature E.1.4.7.2 in release notes.

От
Itagaki Takahiro
Дата:
On Fri, Jan 7, 2011 at 15:54, Ramanujam <innomotive@gmail.com> wrote:
> [Release]: 9.1Alpha3. Binaries compiled with mingw-32 (gcc 4.4.0) on
> i686 without zlib support.

> [Test]: a) Check feature E.1.4.7.2 in 9.1Alpha3 release notes
> (Monetary data type). b) Documentation mistake(?)
>
> [Results]: Documentation states that integer literals are allowed
> values for input. I am getting the following error:

The docs is:
http://developer.postgresql.org/pgdocs/postgres/datatype-money.html
| Input is accepted in a variety of formats,
| including integer and floating-point literals

The reported issue doesn't depend on lc_monetary.
It comes from missing cast support from integer to money.

Should we have cast to/from integer to numeric?  It is inconsistent
that 1::numeric::money is accepted but 1::money is not.


postgres=# SHOW lc_monetary;
 lc_monetary
-------------
 C
(1 row)

postgres=# SELECT 1::numeric::money;
 money
-------
 $1.00
(1 row)

postgres=# SELECT 1::integer::money;
ERROR:  cannot cast type integer to money
LINE 1: SELECT 1::integer::money;
                         ^
postgres=# SELECT castsource::regtype, casttarget::regtype,
castfunc::regproc, castcontext FROM pg_cast WHERE casttarget =
'money'::regtype;
 castsource | casttarget | castfunc | castcontext
------------+------------+----------+-------------
 numeric    | money      | money    | a
(1 row)

postgres=# \df money
                          List of functions
   Schema   | Name  | Result data type | Argument data types |  Type
------------+-------+------------------+---------------------+--------
 pg_catalog | money | money            | numeric             | normal
(1 row)


--
Itagaki Takahiro