Re: postgresql test failure with Python 3.4.0 in plpython_do - Mailing list pgsql-bugs

From Honza Horak
Subject Re: postgresql test failure with Python 3.4.0 in plpython_do
Date
Msg-id 5385993C.3040701@redhat.com
Whole thread Raw
In response to postgresql test failure with Python 3.4.0 in plpython_do  (Honza Horak <hhorak@redhat.com>)
Responses Re: postgresql test failure with Python 3.4.0 in plpython_do  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-bugs
On 05/20/2014 04:11 PM, Honza Horak wrote:
> Hi guys,
>
> Slavek is preparing Python 3.4 into Fedora and had some issues with
> python3/plpython_do test. His analysis is below.
>
> As for the fix, I'm not sure if the test suite is capable of being
> flexible for such error messages, but if the purpose of the test was to
> get any traceback, we might be fine with changing the error traceback to
> e.g.
>
>  >>> raise Exception('error occurred')
> Traceback (most recent call last):
>    File "<stdin>", line 1, in <module>
> Exception: error occurred
>
> If any assistance with testing or preparing a patch is required, just ask.

The patch for the fix as mentioned above is attached. In case it is a
correct fix, feel free to apply.

Regards,
Honza

> -------- Original Message --------
> Subject: postgresql test failure with Python 3.4.0 in plpython_do
> Date: Tue, 20 May 2014 08:52:28 -0400 (EDT)
> From: Bohuslav Kabrda <bkabrda@redhat.com>
> To: Honza Horak <hhorak@redhat.com>
>
> Diff of expected and actual result:
>
> [bkabrda@zizalka plpython]$ diff -u expected/python3/plpython_do.out
> results/python3/plpython_do.out
> --- expected/python3/plpython_do.out    2014-05-20 14:09:44.118369434 +0200
> +++ results/python3/plpython_do.out    2014-05-20 12:37:01.522028783 +0200
> @@ -5,7 +5,7 @@
>   NOTICE:  This is plpython2u.
>   CONTEXT:  PL/Python anonymous code block
>   DO $$ nonsense $$ LANGUAGE plpython3u;
> -ERROR:  NameError: global name 'nonsense' is not defined
> +ERROR:  NameError: name 'nonsense' is not defined
>   CONTEXT:  Traceback (most recent call last):
>     PL/Python anonymous code block, line 1, in <module>
>       nonsense
>
>
> IIUC the plpython postgresql extension takes the Python code, creates a
> function of it and then executes it. This is problem, since the error
> message for undefined names *inside functions* (not for undefined names
> on global level) has changed (fixed actually, the new version makes more
> sense IMO) in Python 3.4 compared to 3.3.
> An example, first Python 3.3:
>
> Python 3.3.2 (default, Mar  5 2014, 08:21:05)
> [GCC 4.8.2 20131212 (Red Hat 4.8.2-7)] on linux
> Type "help", "copyright", "credits" or "license" for more information.
>>>> def foo():
> ...  nonsense
> ...
>>>> foo()
> Traceback (most recent call last):
>    File "<stdin>", line 1, in <module>
>    File "<stdin>", line 2, in foo
> NameError: global name 'nonsense' is not defined
>
>
>
> Now on Python 3.4:
>
> Python 3.4.0 (default, May 18 2014, 22:59:00)
> [GCC 4.9.0 20140514 (Red Hat 4.9.0-4)] on linux
> Type "help", "copyright", "credits" or "license" for more information.
>>>> def foo():
> ...  nonsense
> ...
>>>> foo()
> Traceback (most recent call last):
>    File "<stdin>", line 1, in <module>
>    File "<stdin>", line 2, in foo
> NameError: name 'nonsense' is not defined
>
>
> Note that in Python 3.4, the "global" word is missing, which causes the
> failure. Perhaps the result file could contain a regexp that would match
> both or a python3.4 variant of the result could be added?
>
> Slavek
>
>


Attachment

pgsql-bugs by date:

Previous
From: Heikki Linnakangas
Date:
Subject: Re: BUG #10432: failed to re-find parent key in index
Next
From: yosxpe23
Date:
Subject: Re: BUG #8470: 9.3 locking/subtransaction performance regression