1
0
mirror of https://github.com/postgres/postgres.git synced 2025-07-03 20:02:46 +03:00

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.
This commit is contained in:
Peter Eisentraut
2009-09-13 22:07:06 +00:00
parent 6689ce3e6a
commit eb62398f39
5 changed files with 175 additions and 4 deletions

View File

@ -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;
}
/*