Commit graph

234 commits

Author SHA1 Message Date
Peter Eisentraut
8269e4091c Translation updates 2013-12-02 00:05:18 -05:00
Peter Eisentraut
315af69420 Translation updates 2013-03-31 23:38:50 -04:00
Peter Eisentraut
8e2469a02d Translation updates 2013-02-03 23:56:29 -05:00
Peter Eisentraut
f14bd22a52 Translation updates 2012-12-03 07:52:39 -05:00
Peter Eisentraut
1bfe3d602b Translation updates 2012-08-14 16:32:19 -04:00
Heikki Linnakangas
8fb54e91b3 Put back plpython_unicode_2.out for SQL_ASCII case.
This alternative expected output file is required when using SQL_ASCII
as the client and server encoding. The python encoding conversion used to
throw an error on that, but it is now accepted and you get the UTF-8
representation of the string. I thought that case was already covered by
the other expected output files, but the buildfarm says otherwise.

This is only required on REL9_2_STABLE. In 9.1, we explicitly set
client_encoding to UTF-8 to avoid this.
2012-08-06 16:04:18 +03:00
Heikki Linnakangas
7fbe5aaaa8 Perform conversion from Python unicode to string/bytes object via UTF-8.
We used to convert the unicode object directly to a string in the server
encoding by calling Python's PyUnicode_AsEncodedString function. In other
words, we used Python's routines to do the encoding. However, that has a
few problems. First of all, it required keeping a mapping table of Python
encoding names and PostgreSQL encodings. But the real killer was that Python
doesn't support EUC_TW and MULE_INTERNAL encodings at all.

Instead, convert the Python unicode object to UTF-8, and use PostgreSQL's
encoding conversion functions to convert from UTF-8 to server encoding. We
were already doing the same in the other direction in PLyUnicode_FromString,
so this is more consistent, too.

Note: This makes SQL_ASCII to behave more leniently. We used to map
SQL_ASCII to Python's 'ascii', which on Python means strict 7-bit ASCII
only, so you got an error if the python string contained anything but pure
ASCII. You no longer get an error; you get the UTF-8 representation of the
string instead.

Backpatch to 9.0, where these conversions were introduced.

Jan Urbański
2012-08-06 14:28:39 +03:00
Heikki Linnakangas
13797cb460 Revert part of the previous patch that avoided using PLy_elog().
That caused the plpython_unicode regression test to fail on SQL_ASCII
encoding, as evidenced by the buildfarm. The reason is that with the patch,
you don't get the detail in the error message that you got before. That
detail is actually very informative, so rather than just adjust the expected
output, let's revert that part of the patch for now to make the buildfarm
green again, and figure out some other way to avoid the recursion of
PLy_elog() that doesn't lose the detail.
2012-07-05 23:44:55 +03:00
Heikki Linnakangas
2956745fa7 Fix mapping of PostgreSQL encodings to Python encodings.
Windows encodings, "win1252" and so forth, are named differently in Python,
like "cp1252". Also, if the PyUnicode_AsEncodedString() function call fails
for some reason, use a plain ereport(), not a PLy_elog(), to report that
error. That avoids recursion and crash, if PLy_elog() tries to call
PLyUnicode_Bytes() again.

This fixes bug reported by Asif Naeem. Backpatch down to 9.0, before that
plpython didn't even try these conversions.

Jan Urbański, with minor comment improvements by me.
2012-07-05 22:32:12 +03:00
Peter Eisentraut
7c61eb3fa6 Translation updates 2012-05-31 23:27:32 +03:00
Peter Eisentraut
144fcf754f Translation updates 2012-02-23 20:36:36 +02:00
Peter Eisentraut
698bb4ec4f Translation updates 2011-12-01 22:59:40 +02:00
Peter Eisentraut
b43bb707cc Translation updates 2011-09-22 23:10:16 +03:00
Peter Eisentraut
d4c24254fa Change PyInit_plpy to external linkage
Module initialization functions in Python 3 must have external
linkage, because PyMODINIT_FUNC does dllexport on Windows-like
platforms.  Without this change, the build with Python 3 fails on
Windows.
2011-08-18 13:47:35 +03:00
Tom Lane
5246386727 Fix assorted issues with build and install paths containing spaces.
Apparently there is no buildfarm critter exercising this case after all,
because it fails in several places.  With this patch, build, install,
check-world, and installcheck-world pass for me on OS X.
2011-06-14 16:41:23 -04:00
Alvaro Herrera
38e5124574 Fix PL/Python memory leak involving array slices
Report and patch from Daniel Popowich, bug #5842
(with some debugging help from Alex Hunsaker)
2011-03-17 12:32:46 -03:00
Alvaro Herrera
051096d06e Increment Py_None refcount for NULL array elements
Per bug #5835 by Julien Demoor
Author: Alex Hunsaker
2011-01-17 13:01:04 -03:00
Peter Eisentraut
c8a154e3f8 Translation updates for release 9.0.2 2010-12-13 23:20:00 +02:00
Tom Lane
e086197aaa Fix aboriginal mistake in plpython's set-returning-function support.
We must stay in the function's SPI context until done calling the iterator
that returns the set result.  Otherwise, any attempt to invoke SPI features
in the python code called by the iterator will malfunction.  Diagnosis and
patch by Jan Urbanski, per bug report from Jean-Baptiste Quenot.

Back-patch to 8.2; there was no support for SRFs in previous versions of
plpython.
2010-11-15 14:27:00 -05:00
Tom Lane
67120d35e2 Fix plpython so that it again honors typmod while assigning to tuple fields.
This was broken in 9.0 while improving plpython's conversion behavior for
bytea and boolean.  Per bug report from maizi.
2010-10-11 22:16:46 -04:00
Peter Eisentraut
9103b311a4 Translation updates for 9.0.1 2010-09-30 23:46:16 +03:00
Tom Lane
8d0b5d8971 Some more gitignore cleanups: cover contrib and PL regression test outputs.
Also do some further work in the back branches, where quite a bit wasn't
covered by Magnus' original back-patch.
2010-09-22 17:22:53 -04:00
Peter Eisentraut
765b69ddb1 Translation updates for 9.0.0 2010-09-16 19:09:39 +00:00
Peter Eisentraut
d97ccb83ba Translation updates for 9.0rc1 2010-08-26 19:23:10 +00:00
Peter Eisentraut
7bc59f7cec Catch null pointer returns from PyCObject_AsVoidPtr and PyCObject_FromVoidPtr
This is reproducibly possible in Python 2.7 if the user turned
PendingDeprecationWarning into an error, but it's theoretically also possible
in earlier versions in case of exceptional conditions.

backpatched to 8.0
2010-08-25 19:37:52 +00:00
Peter Eisentraut
a6c243ed9c Translation updates for 9.0beta4 2010-07-29 19:39:47 +00:00
Tom Lane
6d297e0551 Minor kibitzing on previous patch: no need to run check more than once.
(_PG_init should be called only once anyway, but as long as it's got an
internal guard against repeat calls, that should be in front of the
version check.)
2010-07-08 19:00:11 +00:00
Peter Eisentraut
803716013d Install safeguard against running PL/Python 2 and 3 in the same session 2010-07-08 18:42:12 +00:00
Bruce Momjian
239d769e7e pgindent run for 9.0, second run 2010-07-06 19:19:02 +00:00
Peter Eisentraut
a3401bea9c Use different function names for plpython3 handlers, to avoid clashes in
pg_pltemplate

This should have a catversion bump, but it's still being debated whether
it's worth it during beta.
2010-06-29 00:18:11 +00:00
Peter Eisentraut
cc3c4a2407 Update Python version information 2010-06-12 06:05:48 +00:00
Peter Eisentraut
6b72aa5154 Add a regression test case for bug #5497 2010-06-12 06:05:20 +00:00
Tom Lane
4ddf151c49 Fix quite-bogus handling of arrays in plpython datum-to-PyObject
conversion.  Per bug #5497 from David Gardner.
2010-06-10 04:05:01 +00:00
Peter Eisentraut
f1ac08daee Translation update 2010-05-13 15:56:43 +00:00
Tom Lane
f5c23ca208 Fix leakage of proc-related storage in plpython's inline handler.
Per report from Andres Freund.
2010-05-01 17:04:38 +00:00
Tom Lane
b1bc2f0425 Fix multiple memory leaks in PLy_spi_execute_fetch_result: it would leak
memory if the result had zero rows, and also if there was any sort of error
while converting the result tuples into Python data.  Reported and partially
fixed by Andres Freund.

Back-patch to all supported versions.  Note: I haven't tested the 7.4 fix.
7.4's configure check for python is so obsolete it doesn't work on my
current machines :-(.  The logic change is pretty straightforward though.
2010-04-30 19:15:45 +00:00
Peter Eisentraut
a401226bd8 Prevent the injection of invalidly encoded strings by PL/Python into PostgreSQL
with a few strategically placed pg_verifymbstr calls.
2010-03-18 19:43:03 +00:00
Peter Eisentraut
12c2f2f66c Use data-type specific conversion functions also in plpy.execute
In PLy_spi_execute_plan, use the data-type specific Python-to-PostgreSQL
conversion function instead of passing everything through InputFunctionCall
as a string.  The equivalent fix was already done months ago for function
parameters and return values, but this other gateway between Python and
PostgreSQL was apparently forgotten.  As a result, data types that need
special treatment, such as bytea, would misbehave when used with
plpy.execute.
2010-03-18 13:23:57 +00:00
Bruce Momjian
65e806cba1 pgindent run for 9.0 2010-02-26 02:01:40 +00:00
Peter Eisentraut
a39f02e369 Translation updates for 9.0alpha4 2010-02-19 00:40:05 +00:00
Tom Lane
a232f30f05 Volatile-ize all five places where we expect a PG_TRY block to restore
old memory context in plpython.  Before only one of them was marked
volatile, but per report from Zdenek Kotala, some compilers do the
wrong thing here.
2010-02-18 23:50:06 +00:00
Robert Haas
e26c539e9f Wrap calls to SearchSysCache and related functions using macros.
The purpose of this change is to eliminate the need for every caller
of SearchSysCache, SearchSysCacheCopy, SearchSysCacheExists,
GetSysCacheOid, and SearchSysCacheList to know the maximum number
of allowable keys for a syscache entry (currently 4).  This will
make it far easier to increase the maximum number of keys in a
future release should we choose to do so, and it makes the code
shorter, too.

Design and review by Tom Lane.
2010-02-14 18:42:19 +00:00
Peter Eisentraut
adb7764030 PL/Python DO handler
Also cleaned up some redundancies between the primary error messages and the
error context in PL/Python.

Hannu Valtonen
2010-01-22 15:45:15 +00:00
Peter Eisentraut
44e03742d8 Improved printing of Python exceptions in PL/Python
Mimic the Python interpreter's own logic for printing exceptions instead
of just using the straight str() call, so that
you get

    plpy.SPIError

instead of

    <class 'plpy.SPIError'>

and for built-in exceptions merely

    UnicodeEncodeError

Besides looking better this cuts down on the endless version differences
in the regression test expected files.
2010-01-16 11:03:51 +00:00
Peter Eisentraut
baab7a0427 Translation updates 2009-12-19 20:23:26 +00:00
Peter Eisentraut
dd4cd55c15 Python 3 support in PL/Python
Behaves more or less unchanged compared to Python 2, but the new language
variant is called plpython3u.  Documentation describing the naming scheme
is included.
2009-12-15 22:59:55 +00:00
Peter Eisentraut
db7386187f PL/Python array support
Support arrays as parameters and return values of PL/Python functions.
2009-12-10 20:43:40 +00:00
Peter Eisentraut
2e3b16c8ba Improve PL/Python elog output
When the elog functions (plpy.info etc.) get a single argument, just print
that argument instead of printing the single-member tuple like ('foo',).
2009-11-03 11:05:03 +00:00
Peter Eisentraut
9e41114676 Fix obscure segfault condition in PL/Python
In PLy_output(), when the elog() call in the TRY branch throws an exception
(this can happen when a statement timeout kicks in, for example), the
PyErr_SetString() call in the CATCH branch can cause a segfault, because the
Py_XDECREF(so) call before it releases memory that is still used by the sv
variable that PyErr_SetString() uses as argument, because sv points into
memory owned by so.

Backpatched back to 8.0, where this code was introduced.

I also threw in a couple of volatile declarations for variables that are used
before and after the TRY.  I don't think they caused the crash that I
observed, but they could become issues.
2009-11-03 09:35:18 +00:00
Peter Eisentraut
ef8df75e67 Translations update for 8.5alpha2 2009-10-20 18:23:27 +00:00