Re: [PATCH] Fix conversion for Decimal arguments in plpython functions

From: Claudio Freire <klaussfreire(at)gmail(dot)com>
To: Steve Singer <steve(at)ssinger(dot)info>
Cc: Szymon Guz <mabewlun(at)gmail(dot)com>, Peter Eisentraut <peter_e(at)gmx(dot)net>, Ronan Dunklau <rdunklau(at)gmail(dot)com>, pgsql-hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: [PATCH] Fix conversion for Decimal arguments in plpython functions
Date: 2013-06-28 20:29:18
Message-ID: CAGTBQpa4OmGkAC66of1kyAaj=NOZPRz7+RrS8hniQYj=dXEqrA@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Fri, Jun 28, 2013 at 5:14 PM, Steve Singer <steve(at)ssinger(dot)info> wrote:
> On 06/27/2013 05:04 AM, Szymon Guz wrote:
>>
>> On 27 June 2013 05:21, Steve Singer <steve(at)ssinger(dot)info
>> <mailto:steve(at)ssinger(dot)info>> wrote:
>>
>> On 06/26/2013 04:47 PM, Szymon Guz wrote:
>>
>>
>>
>>
>>
>>
>> Hi Steve,
>> thanks for the changes.
>>
>> You're idea about common code for decimal and cdecimal is good, however
>> not good enough. I like the idea of common code for decimal and cdecimal.
>> But we need class name, not the value.
>>
>> I've changed the code from str(x) to x.__class__.__name__ so the function
>> prints class name (which is Decimal for both packages), not the value. We
>> need to have the class name check. The value is returned by the function and
>> is a couple of lines lower in the file.
>>
>> patch is attached.
>>
>
> I think the value is more important than the name, I want to the tests to
> make sure that the conversion is actually converting properly. With your
> method of getting the class name without the module we can have both.
>
> The attached patch should print the value and the class name but not the
> module name.

Why not forego checking of the type, and instead check the interface?

plpy.info(x.as_tuple())

Should do.

>>> d = decimal.Decimal((0,(3,1,4),-2))
>>> d.as_tuple()
DecimalTuple(sign=0, digits=(3, 1, 4), exponent=-2)
>>> d.as_tuple() == (0,(3,1,4),-2)
True
>>> d = decimal.Decimal("3.14")
>>> d.as_tuple()
DecimalTuple(sign=0, digits=(3, 1, 4), exponent=-2)
>>> d.as_tuple() == (0,(3,1,4),-2)
True
>>>

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Stefan Kaltenbrunner 2013-06-28 20:41:36 Re: PostgreSQL 9.3 latest dev snapshot
Previous Message Szymon Guz 2013-06-28 20:28:05 Re: [PATCH] Fix conversion for Decimal arguments in plpython functions