diff options
author | Peter Eisentraut <peter_e@gmx.net> | 2009-09-13 22:07:06 +0000 |
---|---|---|
committer | Peter Eisentraut <peter_e@gmx.net> | 2009-09-13 22:07:06 +0000 |
commit | eb62398f391eedee7953becb410bf3ae86b9872b (patch) | |
tree | 4771b5163f5b0543bba85a009950511add1e344c /src/pl/plpython/plpython.c | |
parent | 6689ce3e6aba88682b9e7e276daa3c4c58e7df24 (diff) | |
download | postgresql-eb62398f391eedee7953becb410bf3ae86b9872b.tar.gz postgresql-eb62398f391eedee7953becb410bf3ae86b9872b.zip |
Fix Unicode support in PL/Python
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.
Diffstat (limited to 'src/pl/plpython/plpython.c')
-rw-r--r-- | src/pl/plpython/plpython.c | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/src/pl/plpython/plpython.c b/src/pl/plpython/plpython.c index ae898385b56..c37993829f1 100644 --- a/src/pl/plpython/plpython.c +++ b/src/pl/plpython/plpython.c @@ -1,7 +1,7 @@ /********************************************************************** * plpython.c - python as a procedural language for PostgreSQL * - * $PostgreSQL: pgsql/src/pl/plpython/plpython.c,v 1.129 2009/09/12 22:13:12 petere Exp $ + * $PostgreSQL: pgsql/src/pl/plpython/plpython.c,v 1.130 2009/09/13 22:07:06 petere Exp $ * ********************************************************************* */ @@ -3343,11 +3343,21 @@ PLy_free(void *ptr) static PyObject* PLyUnicode_Str(PyObject *unicode) { + PyObject *rv; + const char *serverenc; + /* - * This assumes that the PostgreSQL encoding names are acceptable - * to Python, but that appears to be the case. + * Python understands almost all PostgreSQL encoding names, but it + * doesn't know SQL_ASCII. */ - return PyUnicode_AsEncodedString(unicode, GetDatabaseEncodingName(), "strict"); + if (GetDatabaseEncoding() == PG_SQL_ASCII) + serverenc = "ascii"; + else + serverenc = GetDatabaseEncodingName(); + rv = PyUnicode_AsEncodedString(unicode, serverenc, "strict"); + if (rv == NULL) + PLy_elog(ERROR, "could not convert Python Unicode object to PostgreSQL server encoding"); + return rv; } /* |