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

Lists: pgsql-hackerspgsql-testers
From: Ramanujam <innomotive(at)gmail(dot)com>
To: pgsql-testers(at)postgresql(dot)org
Subject: [TEST REPORT] 9.1Alpha3 Feature E.1.4.7.2 in release notes.
Date: 2011-01-07 05:10:54
Message-ID: AANLkTikg5S_ou3+N6abiwSGLfNxPDkmbsb1gYpMQcdBU@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-hackers pgsql-testers

[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 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 INTO moneytbl VALUES (10.4345,7.234); --
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.


From: Ramanujam <innomotive(at)gmail(dot)com>
To: pgsql-testers(at)postgresql(dot)org
Subject: Re: [TEST REPORT] 9.1Alpha3 Feature E.1.4.7.2 in release notes.
Date: 2011-01-07 05:12:58
Message-ID: AANLkTimYRdKVrdByghxyM7H+jUf6vV45ripws1MdQbaO@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-hackers pgsql-testers

Errata:
> test=# SELECT *, m1/m2 INTO moneytbl VALUES (10.4345,7.234); --
should read as:
test=# SELECT *, m1/m2 FROM moneytbl;


From: Ramanujam <innomotive(at)gmail(dot)com>
To: pgsql-testers(at)postgresql(dot)org
Subject: [TEST REPORT] 9.1Alpha3 Feature E.1.4.7.2 in release notes.
Date: 2011-01-07 06:54:54
Message-ID: AANLkTimUuzn3DAaO1OLCijjjfcw0MXL-0HAvZKr9xRyV@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-hackers pgsql-testers

[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


From: Itagaki Takahiro <itagaki(dot)takahiro(at)gmail(dot)com>
To: Ramanujam <innomotive(at)gmail(dot)com>
Cc: pgsql-testers(at)postgresql(dot)org
Subject: Re: [TEST REPORT] 9.1Alpha3 Feature E.1.4.7.2 in release notes.
Date: 2011-01-07 07:34:33
Message-ID: AANLkTi=ZtTxhUdBZKqPMZdnZPt3AGVmtW9+iAdAXgtuJ@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-hackers pgsql-testers

On Fri, Jan 7, 2011 at 15:54, Ramanujam <innomotive(at)gmail(dot)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


From: Itagaki Takahiro <itagaki(dot)takahiro(at)gmail(dot)com>
To: PostgreSQL Hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: Fwd: [TESTERS] [TEST REPORT] 9.1Alpha3 Feature E.1.4.7.2 in release notes.
Date: 2011-01-11 01:48:42
Message-ID: AANLkTi=dpt-nG2gax_kzWO+rjRyzk6fGsHT15JJDkFG2@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-hackers pgsql-testers

It was reported from a tester that we don't have casts of money from/to integer
types even though we have from/to numeric type.

http://archives.postgresql.org/pgsql-testers/2011-01/msg00000.php

Did we have any discussions about the behavior?
I think we should have them for consistency.

---------- Forwarded message ----------
From: Itagaki Takahiro <itagaki(dot)takahiro(at)gmail(dot)com>
Date: Fri, Jan 7, 2011 at 16:34
Subject: Re: [TESTERS] [TEST REPORT] 9.1Alpha3 Feature E.1.4.7.2 in
release notes.
To: Ramanujam <innomotive(at)gmail(dot)com>
Cc: pgsql-testers(at)postgresql(dot)org

On Fri, Jan 7, 2011 at 15:54, Ramanujam <innomotive(at)gmail(dot)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


From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: Itagaki Takahiro <itagaki(dot)takahiro(at)gmail(dot)com>
Cc: PostgreSQL Hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: Fwd: [TESTERS] [TEST REPORT] 9.1Alpha3 Feature E.1.4.7.2 in release notes.
Date: 2011-01-11 02:10:09
Message-ID: 4741.1294711809@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-hackers pgsql-testers

Itagaki Takahiro <itagaki(dot)takahiro(at)gmail(dot)com> writes:
> It was reported from a tester that we don't have casts of money from/to integer
> types even though we have from/to numeric type.

In most locales, the idea isn't sensible.

regards, tom lane


From: Itagaki Takahiro <itagaki(dot)takahiro(at)gmail(dot)com>
To: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: PostgreSQL Hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: Fwd: [TESTERS] [TEST REPORT] 9.1Alpha3 Feature E.1.4.7.2 in release notes.
Date: 2011-01-11 03:30:52
Message-ID: AANLkTinOtCfOwE0mnykssbq9hBUwXYY8h2fKvkapgZeH@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-hackers pgsql-testers

On Tue, Jan 11, 2011 at 11:10, Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> wrote:
> Itagaki Takahiro <itagaki(dot)takahiro(at)gmail(dot)com> writes:
>> It was reported from a tester that we don't have casts of money from/to integer
>> types even though we have from/to numeric type.
>
> In most locales, the idea isn't sensible.

The documentation says:
| Input is accepted in a variety of formats,
| including integer and floating-point literals

If we won't to add accept integers for money, we should fix the docs.
| integer and floating-point string literals
| ~~~~~~~~~~~~~~~
Will it get better?

--
Itagaki Takahiro


From: Peter Eisentraut <peter_e(at)gmx(dot)net>
To: Itagaki Takahiro <itagaki(dot)takahiro(at)gmail(dot)com>
Cc: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>, PostgreSQL Hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: Fwd: [TESTERS] [TEST REPORT] 9.1Alpha3 Feature E.1.4.7.2 in release notes.
Date: 2011-01-11 12:26:48
Message-ID: 1294748808.15734.0.camel@fsopti579.F-Secure.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-hackers pgsql-testers

On tis, 2011-01-11 at 12:30 +0900, Itagaki Takahiro wrote:
> On Tue, Jan 11, 2011 at 11:10, Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> wrote:
> > Itagaki Takahiro <itagaki(dot)takahiro(at)gmail(dot)com> writes:
> >> It was reported from a tester that we don't have casts of money from/to integer
> >> types even though we have from/to numeric type.
> >
> > In most locales, the idea isn't sensible.
>
> The documentation says:
> | Input is accepted in a variety of formats,
> | including integer and floating-point literals
>
> If we won't to add accept integers for money, we should fix the docs.
> | integer and floating-point string literals
> | ~~~~~~~~~~~~~~~
> Will it get better?

I think adding a cast from integer to money is probably quite
reasonable. The other way around, maybe not, or only an explicit cast.


From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: Peter Eisentraut <peter_e(at)gmx(dot)net>
Cc: Itagaki Takahiro <itagaki(dot)takahiro(at)gmail(dot)com>, PostgreSQL Hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: Fwd: [TESTERS] [TEST REPORT] 9.1Alpha3 Feature E.1.4.7.2 in release notes.
Date: 2011-01-11 16:03:42
Message-ID: 18641.1294761822@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-hackers pgsql-testers

Peter Eisentraut <peter_e(at)gmx(dot)net> writes:
> On tis, 2011-01-11 at 12:30 +0900, Itagaki Takahiro wrote:
>> If we won't to add accept integers for money, we should fix the docs.
>> | integer and floating-point string literals
>> | ~~~~~~~~~~~~~~~
>> Will it get better?

> I think adding a cast from integer to money is probably quite
> reasonable. The other way around, maybe not, or only an explicit cast.

As near as I can tell, this entire thread started because someone
thought that the reference to "numeric" in the release notes implied
"any numerical type", not "the type named numeric". We explicitly
rejected the idea of providing direct casts to/from floating point
types, on the grounds of not wanting any roundoff error; so I don't
think this is a point that should be revisited. Perhaps it would be
sufficient to clarify the release-note item.

regards, tom lane


From: Peter Eisentraut <peter_e(at)gmx(dot)net>
To: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: Itagaki Takahiro <itagaki(dot)takahiro(at)gmail(dot)com>, PostgreSQL Hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: Fwd: [TESTERS] [TEST REPORT] 9.1Alpha3 Feature E.1.4.7.2 in release notes.
Date: 2011-01-11 17:04:00
Message-ID: 1294765440.17361.0.camel@vanquo.pezone.net
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-hackers pgsql-testers

On tis, 2011-01-11 at 11:03 -0500, Tom Lane wrote:
> We explicitly
> rejected the idea of providing direct casts to/from floating point
> types, on the grounds of not wanting any roundoff error; so I don't
> think this is a point that should be revisited.

We also explicitly chose floating point as the result of the money/money
operator over numeric. Seems a bit inconsistent.