PL/Python result set slicing broken in Python 3
This doesn't work anymore with Python 3:
rv = plpy.execute(...)
do_something(rv[0:1])
Apparently, they changed the C API for doing slicing, or rather made one
of the two APIs for it silently do nothing. Details are difficult to
find, but this email message seems to contain something:
<http://mail.python.org/pipermail/python-3000/2007-August/009851.html>.
I'll try to sort this out sometime, but if someone wants to take a shot
at it, go ahead.
On 02/05/12 20:18, Peter Eisentraut wrote:
This doesn't work anymore with Python 3:
rv = plpy.execute(...)
do_something(rv[0:1])Apparently, they changed the C API for doing slicing, or rather made one
of the two APIs for it silently do nothing. Details are difficult to
find, but this email message seems to contain something:
<http://mail.python.org/pipermail/python-3000/2007-August/009851.html>.I'll try to sort this out sometime, but if someone wants to take a shot
at it, go ahead.
Sounds ugly. I'll take a look.
Cheers,
Jan
On 03/05/12 11:04, Jan Urbański wrote:
On 02/05/12 20:18, Peter Eisentraut wrote:
This doesn't work anymore with Python 3:
rv = plpy.execute(...)
do_something(rv[0:1])Apparently, they changed the C API for doing slicing, or rather made one
of the two APIs for it silently do nothing. Details are difficult to
find, but this email message seems to contain something:
<http://mail.python.org/pipermail/python-3000/2007-August/009851.html>.I'll try to sort this out sometime, but if someone wants to take a shot
at it, go ahead.Sounds ugly. I'll take a look.
I found some instructions on how to deal with the Python 2/Python 3
slicing mess:
http://renesd.blogspot.com/2009/07/python3-c-api-simple-slicing-sqslice.html
Apparently you need that egregious hack in order to avoid code
duplication. I'll try to produce a patch over the weekend.
Cheers,
Jan
On 04/05/12 20:00, Jan Urbański wrote:
On 03/05/12 11:04, Jan Urbański wrote:
On 02/05/12 20:18, Peter Eisentraut wrote:
This doesn't work anymore with Python 3:
rv = plpy.execute(...)
do_something(rv[0:1])Sounds ugly. I'll take a look.
I found some instructions on how to deal with the Python 2/Python 3
slicing mess:http://renesd.blogspot.com/2009/07/python3-c-api-simple-slicing-sqslice.html
Thanks to the helpful folk at #python I found out that the fix is much
easier. Attached is a patch that fixes the bug and passes regression
tests on Pythons 2.3 through 3.2.
Apparently once you implement PyMappingMethods.mp_subscript you can drop
PySequenceMethods.sq_slice, but I guess there's no harm in keeping it
(and I'm not sure it'd work on Python 2.3 with only mp_subscript
implemented).
Do we want to backpatch this? If so, I'd need to produce a version that
applies to the monolithic plpython.c file from the previous releases.
Cheers,
Jan
Attachments:
0001-Fix-slicing-support-for-result-objects-for-Python-3.patchtext/x-diff; name=0001-Fix-slicing-support-for-result-objects-for-Python-3.patchDownload
On Sat, May 5, 2012 at 4:45 PM, Jan Urbański <wulczer@wulczer.org> wrote:
I found some instructions on how to deal with the Python 2/Python 3
slicing mess:http://renesd.blogspot.com/2009/07/python3-c-api-simple-slicing-sqslice.html
Thanks to the helpful folk at #python I found out that the fix is much
easier. Attached is a patch that fixes the bug and passes regression tests
on Pythons 2.3 through 3.2.Apparently once you implement PyMappingMethods.mp_subscript you can drop
PySequenceMethods.sq_slice, but I guess there's no harm in keeping it (and
I'm not sure it'd work on Python 2.3 with only mp_subscript implemented).Do we want to backpatch this? If so, I'd need to produce a version that
applies to the monolithic plpython.c file from the previous releases.
Did this get forgotten about?
--
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company
On tor, 2012-05-10 at 12:37 -0400, Robert Haas wrote:
On Sat, May 5, 2012 at 4:45 PM, Jan Urbański <wulczer@wulczer.org> wrote:
I found some instructions on how to deal with the Python 2/Python 3
slicing mess:http://renesd.blogspot.com/2009/07/python3-c-api-simple-slicing-sqslice.html
Thanks to the helpful folk at #python I found out that the fix is much
easier. Attached is a patch that fixes the bug and passes regression tests
on Pythons 2.3 through 3.2.Apparently once you implement PyMappingMethods.mp_subscript you can drop
PySequenceMethods.sq_slice, but I guess there's no harm in keeping it (and
I'm not sure it'd work on Python 2.3 with only mp_subscript implemented).Do we want to backpatch this? If so, I'd need to produce a version that
applies to the monolithic plpython.c file from the previous releases.Did this get forgotten about?
I'm working on it.
On lör, 2012-05-05 at 22:45 +0200, Jan Urbański wrote:
Apparently once you implement PyMappingMethods.mp_subscript you can
drop PySequenceMethods.sq_slice, but I guess there's no harm in
keeping it (and I'm not sure it'd work on Python 2.3 with only
mp_subscript implemented).
Committed this now.
From test coverage reports, I now see that PLy_result_ass_item() is no
longer called. That's probably OK, if assignments are now handled
through the mapping methods. But should we remove the function then?
Do we want to backpatch this? If so, I'd need to produce a version
that applies to the monolithic plpython.c file from the previous
releases.
I don't think this should be backpatched.
On 10/05/12 19:45, Peter Eisentraut wrote:
On lör, 2012-05-05 at 22:45 +0200, Jan Urbański wrote:
Apparently once you implement PyMappingMethods.mp_subscript you can
drop PySequenceMethods.sq_slice, but I guess there's no harm in
keeping it (and I'm not sure it'd work on Python 2.3 with only
mp_subscript implemented).Committed this now.
From test coverage reports, I now see that PLy_result_ass_item() is no
longer called. That's probably OK, if assignments are now handled
through the mapping methods. But should we remove the function then?
Have you tried on Python 2.3 as well? People on #python said that if you
implement the mapping functions, the sequence slicing functions are no
longer used, but maybe we should revisit for the next release, rather
than risk introducing a regression for the benefit of removing a few
dead lines.
Cheers,
Jan
On fre, 2012-05-11 at 11:28 +0200, Jan Urbański wrote:
On 10/05/12 19:45, Peter Eisentraut wrote:
On lör, 2012-05-05 at 22:45 +0200, Jan Urbański wrote:
Apparently once you implement PyMappingMethods.mp_subscript you can
drop PySequenceMethods.sq_slice, but I guess there's no harm in
keeping it (and I'm not sure it'd work on Python 2.3 with only
mp_subscript implemented).Committed this now.
From test coverage reports, I now see that PLy_result_ass_item() is no
longer called. That's probably OK, if assignments are now handled
through the mapping methods. But should we remove the function then?Have you tried on Python 2.3 as well? People on #python said that if you
implement the mapping functions, the sequence slicing functions are no
longer used, but maybe we should revisit for the next release, rather
than risk introducing a regression for the benefit of removing a few
dead lines.
I did test Python 2.3, but you're right, we should leave this alone
during beta.