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

From Honza Horak
Subject postgresql test failure with Python 3.4.0 in plpython_do
Date
Msg-id 537B6283.90501@redhat.com
Whole thread Raw
Responses Re: postgresql test failure with Python 3.4.0 in plpython_do  (Honza Horak <hhorak@redhat.com>)
List pgsql-bugs
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.

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

pgsql-bugs by date:

Previous
From: Andres Freund
Date:
Subject: Re: BUG #10189: Limit in 9.3.4 no longer works when ordering using a composite multi-type index
Next
From: cousinka@gmail.com
Date:
Subject: BUG #10405: Sum not working with left join