From: | "Nikhil Sontakke" <nikhil(dot)sontakke(at)enterprisedb(dot)com> |
---|---|
To: | PostgreSQL-development <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Re: plpgsql: numeric assignment to an integer variable errors out |
Date: | 2008-12-29 15:02:13 |
Message-ID: | a301bfd90812290702p50271226j75e0da1e1b7432ab@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
Hi,
<nikhil(dot)sontakke(at)enterprisedb(dot)com> wrote:
> The following plpgsql function errors out with cvs head:
>
> CREATE function test_assign() returns void
> AS
> $$ declare x int;
> BEGIN
> x := 9E3/2;
> END
> $$ LANGUAGE 'plpgsql';
>
> postgres=# select test_assign();
> ERROR: invalid input syntax for integer: "4500.0000000000000000"
> CONTEXT: PL/pgSQL function "test_assign" line 3 at assignment
>
> We do have an existing cast from numeric to type integer. But here
> basically we convert the value to string in exec_cast_value before calling
> int4in. And then use of strtol in pg_atoi leads to this complaint. Guess
> converting the value to string is not always a good strategy.
>
PFA, patch which uses find_coercion_pathway to find a direct
COERCION_PATH_FUNC function and uses that if it is available. Or is there a
better approach? Seems to handle the above issue with this patch.
Regards,
Nikhils
--
http://www.enterprisedb.com
Attachment | Content-Type | Size |
---|---|---|
plpgsql_numeric_bug.patch | text/x-diff | 2.0 KB |
From | Date | Subject | |
---|---|---|---|
Next Message | Kevin Grittner | 2008-12-29 15:16:42 | Re: incoherent view of serializable transactions |
Previous Message | Peter Eisentraut | 2008-12-29 14:48:29 | Re: Several tags around PostgreSQL 7.1 broken |