summaryrefslogtreecommitdiff
path: root/src/pl/plpython/plpython.c
AgeCommit message (Collapse)Author
2009-09-13Fix Unicode support in PL/PythonPeter Eisentraut
Check calls of PyUnicode_AsEncodedString() for NULL return, probably because the encoding name is not known. Add special treatment for SQL_ASCII, which Python definitely does not know. Since using SQL_ASCII produces errors in the regression tests when non-ASCII characters are involved, we have to put back various regression test result variants.
2009-09-12Add Unicode support in PL/PythonPeter Eisentraut
PL/Python now accepts Unicode objects where it previously only accepted string objects (for example, as return value). Unicode objects are converted to the PostgreSQL server encoding as necessary. This change is also necessary for future Python 3 support, which treats all strings as Unicode objects. Since this removes the error conditions that the plpython_unicode test file tested for, the alternative result files are no longer necessary.
2009-09-09Fix/improve bytea and boolean support in PL/PythonPeter Eisentraut
Before, PL/Python converted data between SQL and Python by going through a C string representation. This broke for bytea in two ways: - On input (function parameters), you would get a Python string that contains bytea's particular external representation with backslashes etc., instead of a sequence of bytes, which is what you would expect in a Python environment. This problem is exacerbated by the new bytea output format. - On output (function return value), null bytes in the Python string would cause truncation before the data gets stored into a bytea datum. This is now fixed by converting directly between the PostgreSQL datum and the Python representation. The required generalized infrastructure also allows for other improvements in passing: - When returning a boolean value, the SQL datum is now true if and only if Python considers the value that was passed out of the PL/Python function to be true. Previously, this determination was left to the boolean data type input function. So, now returning 'foo' results in true, because Python considers it true, rather than false because PostgreSQL considers it false. - On input, we can convert the integer and float types directly to their Python equivalents without having to go through an intermediate string representation. original patch by Caleb Welton, with updates by myself
2009-08-25Enhanced error context support in PL/PythonPeter Eisentraut
Extract the "while creating return value" and "while modifying trigger row" parts of some error messages into another layer of error context. This will simplify the upcoming patch to improve data type support, but it can stand on its own.
2009-08-25Use generic attribute management in PL/PythonPeter Eisentraut
Switch the implementation of the plan and result types to generic attribute management, as described at <http://docs.python.org/extending/newtypes.html>. This modernizes and simplifies the code a bit and prepares for Python 3.1, where the old way doesn't work anymore.
2009-08-14Domain support in PL/PythonPeter Eisentraut
When examining what Python type to convert a PostgreSQL type to on input, look at the base type of the input type, otherwise all domains end up defaulting to string.
2009-08-13Augment test coverage in PL/Python, especially for error conditions.Peter Eisentraut
2009-07-20Use errcontext mechanism in PL/PythonPeter Eisentraut
Error messages from PL/Python now always mention the function name in the CONTEXT: field. This also obsoletes the few places that tried to do the same manually. Regression test files are updated to work with Python 2.4-2.6. I don't have access to older versions right now.
2009-06-118.4 pgindent run, with new combined Linux/FreeBSD/MinGW typedef listBruce Momjian
provided by Andrew.
2009-06-04Improve the recently-added support for properly pluralized error messagesTom Lane
by extending the ereport() API to cater for pluralization directly. This is better than the original method of calling ngettext outside the elog.c code because (1) it avoids double translation, which wastes cycles and in the worst case could give a wrong result; and (2) it avoids having to use a different coding method in PL code than in the core backend. The client-side uses of ngettext are not touched since neither of these concerns is very pressing in the client environment. Per my proposal of yesterday.
2009-04-03Defend against possible crash if a plpython function does not specify namesTom Lane
for its arguments. Also add a regression test, since someone apparently changed every single plpython test case to use only named parameters; else we'd have noticed this sooner. Euler Taveira de Oliveira, per a report from Alvaro
2009-03-26Gettext plural supportPeter Eisentraut
In the backend, I changed only a handful of exemplary or important-looking instances to make use of the plural support; there is probably more work there. For the rest of the source, this should cover all relevant cases.
2009-01-15Cleanup pass over PL/Python NLS. Add translation support to PLy_elog andPeter Eisentraut
PLy_exception_set, and clarify some error messages.
2008-12-11Append major version number and for libraries soname major version numberPeter Eisentraut
to the gettext domain name, to simplify parallel installations. Also, rename set_text_domain() to pg_bindtextdomain(), because that is what it does.
2008-11-04Fix bug introduced in recent patch to make plpython cope with OUT arguments:Tom Lane
the proc->argnames array has to be initialized to zero immediately on creation, since the error recovery path will try to free its elements.
2008-11-02Remove all uses of the deprecated functions heap_formtuple, heap_modifytuple,Tom Lane
and heap_deformtuple in favor of the newer functions heap_form_tuple et al (which do the same things but use bool control flags instead of arbitrary char values). Eliminate the former duplicate coding of these functions, reducing the deprecated functions to mere wrappers around the newer ones. We can't get rid of them entirely because add-on modules probably still contain many instances of the old coding style. Kris Jurka
2008-10-11Add missing header.Alvaro Herrera
2008-10-09Improve translatability of error messages for external modules by tweakingAlvaro Herrera
the ereport macro. Included in this commit are enough files for starting plpgsql, plpython, plperl and pltcl translations.
2008-07-18Implement SQL-spec RETURNS TABLE syntax for functions.Tom Lane
(Unlike the original submission, this patch treats TABLE output parameters as being entirely equivalent to OUT parameters -- tgl) Pavel Stehule
2008-07-16Support "variadic" functions, which can accept a variable number of argumentsTom Lane
so long as all the trailing arguments are of the same (non-array) type. The function receives them as a single array argument (which is why they have to all be the same type). It might be useful to extend this facility to aggregates, but this patch doesn't do that. This patch imposes a noticeable slowdown on function lookup --- a follow-on patch will fix that by adding a redundant column to pg_proc. Pavel Stehule
2008-05-12Restructure some header files a bit, in particular heapam.h, by removing someAlvaro Herrera
unnecessary #include lines in it. Also, move some tuple routine prototypes and macros to htup.h, which allows removal of heapam.h inclusion from some .c files. For this to work, a new header file access/sysattr.h needed to be created, initially containing attribute numbers of system columns, for pg_dump usage. While at it, make contrib ltree, intarray and hstore header files more consistent with our header style.
2008-05-03Fix plpython to not get totally confused by OUT arguments. (It still doesn'tTom Lane
support multiple OUT arguments, though.) Hannu Krosing
2008-03-28Support statement-level ON TRUNCATE triggers. Simon RiggsTom Lane
2008-03-25Simplify and standardize conversions between TEXT datums and ordinary CTom Lane
strings. This patch introduces four support functions cstring_to_text, cstring_to_text_with_len, text_to_cstring, and text_to_cstring_buffer, and two macros CStringGetTextDatum and TextDatumGetCString. A number of existing macros that provided variants on these themes were removed. Most of the places that need to make such conversions now require just one function or macro call, in place of the multiple notational layers that used to be needed. There are no longer any direct calls of textout or textin, and we got most of the places that were using handmade conversions via memcpy (there may be a few still lurking, though). This commit doesn't make any serious effort to eliminate transient memory leaks caused by detoasting toasted text objects before they reach text_to_cstring. We changed PG_GETARG_TEXT_P to PG_GETARG_TEXT_PP in a few places where it was easy, but much more could be done. Brendan Jurd and Tom Lane
2008-01-02Fix plpython's overoptimistic caching of information about the rowtype ofTom Lane
a trigger's target table. The rowtype could change from one call to the next, so cope in such cases, while avoiding doing repetitive catalog lookups. Per bug #3847 from Mark Reid. Backpatch to 8.2.x. Likely this fix should go further back, but I can't test it because I no longer have a machine with a pre-2.5 Python installation. (Maybe we should rethink that idea about not supporting Python 2.5 in the older branches.)
2007-11-23Fix buggy usage of vsnprintf in PL/Python by removing it altogether, insteadAlvaro Herrera
relying on stringinfo.c. This fixes a problem reported by Marko Kreen, but I didn't use his patch, per subsequent discussion.
2007-11-15pgindent run for 8.3.Bruce Momjian
2007-08-10Fix uninitialized-memory bug in plpython proargnames patch. Per bug #3523Tom Lane
2007-07-13Volatile-qualify a dozen variables in plpython.c to eliminate warningsTom Lane
from old versions of gcc. It's not clear to me that this is really necessary for correctness, but less warnings are always good. Per buildfarm results and local testing.
2007-05-31Make some messages more consistentPeter Eisentraut
2007-04-04Remove plpython casts C source code casts:Bruce Momjian
It removes last remaining casts inside struct definitions. Such usage is bad practice, as it hides problems from compiler. Reason for the cast is popular practice in some circles to define functions as foo(MyObj *) instead of foo(PyObject *) thus avoiding a local variable inside functions and make direct calling easier. As pl/python does not use such style, the casts were unnecessary from the start. Marko Kreen
2007-04-03Allow pl/pythonu >= version 2.3 to return boolean, rather than 1/0.Bruce Momjian
Marko Kreen
2007-04-03Allow PL/PythonU to compile on Python 2.5. Change needed because of APIBruce Momjian
changes in Python. Marko Kreen
2007-04-02Support enum data types. Along the way, use macros for the values ofTom Lane
pg_type.typtype whereever practical. Tom Dunstan, with some kibitzing from Tom Lane.
2007-02-21Allow pltcl args to spi_prepare and plpython args to plpy.prepare to be ↵Andrew Dunstan
standard type aliases as well as those known in pg_type. Similar to recent change in plperl.
2007-02-09Combine cmin and cmax fields of HeapTupleHeaders into a single field, byTom Lane
keeping private state in each backend that has inserted and deleted the same tuple during its current top-level transaction. This is sufficient since there is no need to be able to determine the cmin/cmax from any other transaction. This gets us back down to 23-byte headers, removing a penalty paid in 8.0 to support subtransactions. Patch by Heikki Linnakangas, with minor revisions by moi, following a design hashed out awhile back on the pghackers list.
2007-02-01Wording cleanup for error messages. Also change can't -> cannot.Bruce Momjian
Standard English uses "may", "can", and "might" in different ways: may - permission, "You may borrow my rake." can - ability, "I can lift that log." might - possibility, "It might rain today." Unfortunately, in conversational English, their use is often mixed, as in, "You may use this variable to do X", when in fact, "can" is a better choice. Similarly, "It may crash" is better stated, "It might crash".
2007-01-28Fix plpython MSVC build in non-debug mode.Andrew Dunstan
2007-01-25Reverse out use of Py_RETURN_TRUE in plpython, only supported in Python >=Bruce Momjian
2.3.
2007-01-25Fix for plpython functions; return true/false for boolean,Bruce Momjian
rather than 1/0. This helps when creating trigger functions that output SQL. Guido Goldstein
2006-11-21Fix plpython to work (or at least pass its regression tests) withTom Lane
python 2.5. This involves fixing several violations of the published spec for creating PyTypeObjects, and adding another regression test expected output for yet another variation of error message spelling.
2006-10-04pgindent run for 8.2.Bruce Momjian
2006-09-16Define errcode as __msvc_errcode not __vc_errcode for MSVC builds,Tom Lane
per Magnus.
2006-09-02Allow PL/python to return composite types and result setsBruce Momjian
Sven Suursoho
2006-08-27Add new return codes SPI_OK_INSERT_RETURNING etc to the SPI API.Tom Lane
Fix all the standard PLs to be able to return tuples from FOO_RETURNING statements as well as utility statements that return tuples. Also, fix oversight that SPI_processed wasn't set for a utility statement returning tuples. Per recent discussion.
2006-08-08Add a feature for automatic initialization and finalization of dynamicallyTom Lane
loaded libraries: call functions _PG_init() and _PG_fini() if the library defines such symbols. Hence we no longer need to specify an initialization function in preload_libraries: we can assume that the library used the _PG_init() convention, instead. This removes one source of pilot error in use of preloaded libraries. Original patch by Ralf Engelschall, preload_libraries changes by me.
2006-07-06Attached patch is required ot build with the CRT that comes with VisualBruce Momjian
Studio 2005. Basically MS defined errcode in the headers with a typedef, so we have to #define it out of the way. While at it, fix a function declaration in plpython that didn't match the implementation (volatile missing). Magnus Hagander
2006-06-25Fix Win32/Cygwin problems:Bruce Momjian
After updating to the latest cvs, and also building most of the addons (like PLs), the following patch is neededf for win32 + Visual C++. * Switch to use the new win32 semaphore code * Rename win32_open to pgwin32_open. win32_open collides with symbols defined in Perl. MingW didn't detect ig, MSVC did. And it's a bit too generic a name to export globally, imho... * Python defines some partially broken #pragmas in the headers when doing a debug build. Workaround. Magnus Hagander
2006-06-16Fix problems with cached tuple descriptors disappearing while still in useTom Lane
by creating a reference-count mechanism, similar to what we did a long time ago for catcache entries. The back branches have an ugly solution involving lots of extra copies, but this way is more efficient. Reference counting is only applied to tupdescs that are actually in caches --- there seems no need to use it for tupdescs that are generated in the executor, since they'll go away during plan shutdown by virtue of being in the per-query memory context. Neil Conway and Tom Lane
2006-05-30Magic blocks don't do us any good unless we use 'em ... so install oneTom Lane
in every shared library.