aboutsummaryrefslogtreecommitdiff
path: root/src/pl/plpython/sql/plpython_error.sql
Commit message (Collapse)AuthorAge
* Fix broken logic for reporting PL/Python function names in errcontext.Tom Lane2018-02-14
| | | | | | | | | | | | | | | | | | | | | | | | | | | plpython_error_callback() reported the name of the function associated with the topmost PL/Python execution context. This was not merely wrong if there were nested PL/Python contexts, but it risked a core dump if the topmost one is an inline code block rather than a named function. That will have proname = NULL, and so we were passing a NULL pointer to snprintf("%s"). It seems that none of the PL/Python-testing machines in the buildfarm will dump core for that, but some platforms do, as reported by Marina Polyakova. Investigation finds that there actually is an existing regression test that used to prove that the behavior was wrong, though apparently no one had noticed that it was printing the wrong function name. It stopped showing the problem in 9.6 when we adjusted psql to not print CONTEXT by default for NOTICE messages. The problem is masked (if your platform avoids the core dump) in error cases, because PL/Python will throw away the originally generated error info in favor of a new traceback produced at the outer level. Repair by using ErrorContextCallback.arg to pass the correct context to the error callback. Add a regression test illustrating correct behavior. Back-patch to all supported branches, since they're all broken this way. Discussion: https://postgr.es/m/156b989dbc6fe7c4d3223cf51da61195@postgrespro.ru
* Handle SPIErrors raised directly in PL/Python code.Heikki Linnakangas2013-01-28
| | | | | | | | | If a PL/Python function raises an SPIError (or one if its subclasses) directly with python's raise statement, treat it the same as an SPIError generated internally. In particular, if the user sets the sqlstate attribute, preserve that. Oskari Saarenmaa and Jan Urbański, reviewed by Karl O. Pinc.
* Preserve SQLSTATE when an SPI error is propagated through PL/pythonHeikki Linnakangas2011-11-24
| | | | | | | exception handler. This was a regression in 9.1, when the capability to catch specific SPI errors was added, so backpatch to 9.1. Mika Eloranta, with some editing by Jan Urbański.
* Add traceback information to PL/Python errorsPeter Eisentraut2011-04-06
| | | | | | | This mimics the traceback information the Python interpreter prints with exceptions. Jan Urbański
* PL/Python custom SPI exceptionsPeter Eisentraut2011-02-28
| | | | | | | | This provides a separate exception class for each error code that the backend defines, as well as the ability to get the SQLSTATE from the exception object. Jan Urbański, reviewed by Steve Singer
* Wrap PL/Python SPI calls into subtransactionsPeter Eisentraut2011-02-02
| | | | | | | | | | | This allows the language-specific try/catch construct to catch and handle exceptions arising from SPI calls, matching the behavior of other PLs. As an additional bonus you no longer get all the ugly "unrecognized error in PLy_spi_execute_query" errors. Jan Urbański, reviewed by Steve Singer
* Add validator to PL/PythonPeter Eisentraut2011-02-01
| | | | Jan Urbański, reviewed by Hitoshi Harada
* Make PL/Python tests more compatible with Python 3Peter Eisentraut2009-08-24
| | | | | | This changes a bunch of incidentially used constructs in the PL/Python regression tests to equivalent constructs in cases where Python 3 no longer supports the old syntax. Support for older Python versions is unchanged.
* Split the plpython regression test into test cases arranged by topic, insteadPeter Eisentraut2009-08-12
| | | | | | of the previous monolithic setup-create-run sequence, that was apparently inherited from a previous test infrastructure, but makes working with the tests and adding new ones weird.
* This patch addresses the problem mentioned in the "process crashBruce Momjian2005-07-10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | when a plpython function returns unicode" thread: http://archives.postgresql.org/pgsql-bugs/2005-06/msg00105.php In several places PL/Python was calling PyObject_Str() and then PyString_AsString() without checking if the former had returned NULL to indicate an error. PyString_AsString() doesn't expect a NULL argument, so passing one causes a segmentation fault. This patch adds checks for NULL and raises errors via PLy_elog(), which prints details of the underlying Python exception. The patch also adds regression tests for these checks. All tests pass on my Solaris 9 box running HEAD and Python 2.4.1. In one place the patch doesn't call PLy_elog() because that could cause infinite recursion; see the comment I added. I'm not sure how to test that particular case or whether it's even possible to get an error there: the value that the code should check is the Python exception type, so I wonder if a NULL value "shouldn't happen." This patch converts NULL to "Unknown Exception" but I wonder if an Assert() would be appropriate. The patch is against HEAD but the same changes should be applied to earlier versions because they have the same problem. The patch might not apply cleanly against earlier versions -- will the committer take care of little differences or should I submit different versions of the patch? Michael Fuhr
* Remove read_file/write_file tests. These were originally intended toTom Lane2005-06-20
| | | | | | | | | *fail*, to test that plpython didn't allow untrusted operations. When we changed plpython to plpythonu because python didn't actually have a secure sandbox mode, someone (probably me :-() misinterpreted the tests as checking whether Python's file I/O works. Which is a stupid thing for us to be testing. Remove it so we don't clutter the filesystem with random temporary files.
* Convert the existing regression test scripts for the various optionalTom Lane2005-05-14
PLs to use the standard pg_regress infrastructure. No changes in the tests themselves. Andrew Dunstan