mirror of https://github.com/postgres/postgres
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.REL8_5_ALPHA2_BRANCH
parent
6689ce3e6a
commit
eb62398f39
@ -0,0 +1,52 @@ |
||||
-- |
||||
-- Unicode handling |
||||
-- |
||||
CREATE TABLE unicode_test ( |
||||
testvalue text NOT NULL |
||||
); |
||||
CREATE FUNCTION unicode_return() RETURNS text AS E' |
||||
return u"\\x80" |
||||
' LANGUAGE plpythonu; |
||||
CREATE FUNCTION unicode_trigger() RETURNS trigger AS E' |
||||
TD["new"]["testvalue"] = u"\\x80" |
||||
return "MODIFY" |
||||
' LANGUAGE plpythonu; |
||||
CREATE TRIGGER unicode_test_bi BEFORE INSERT ON unicode_test |
||||
FOR EACH ROW EXECUTE PROCEDURE unicode_trigger(); |
||||
CREATE FUNCTION unicode_plan1() RETURNS text AS E' |
||||
plan = plpy.prepare("SELECT $1 AS testvalue", ["text"]) |
||||
rv = plpy.execute(plan, [u"\\x80"], 1) |
||||
return rv[0]["testvalue"] |
||||
' LANGUAGE plpythonu; |
||||
CREATE FUNCTION unicode_plan2() RETURNS text AS E' |
||||
plan = plpy.prepare("SELECT $1 || $2 AS testvalue", ["text", u"text"]) |
||||
rv = plpy.execute(plan, ["foo", "bar"], 1) |
||||
return rv[0]["testvalue"] |
||||
' LANGUAGE plpythonu; |
||||
SELECT unicode_return(); |
||||
ERROR: PL/Python: could not convert Python Unicode object to PostgreSQL server encoding |
||||
DETAIL: exceptions.UnicodeError: ASCII encoding error: ordinal not in range(128) |
||||
CONTEXT: while creating return value |
||||
PL/Python function "unicode_return" |
||||
INSERT INTO unicode_test (testvalue) VALUES ('test'); |
||||
ERROR: PL/Python: could not convert Python Unicode object to PostgreSQL server encoding |
||||
DETAIL: exceptions.UnicodeError: ASCII encoding error: ordinal not in range(128) |
||||
CONTEXT: while modifying trigger row |
||||
PL/Python function "unicode_trigger" |
||||
SELECT * FROM unicode_test; |
||||
testvalue |
||||
----------- |
||||
(0 rows) |
||||
|
||||
SELECT unicode_plan1(); |
||||
WARNING: PL/Python: plpy.Error: unrecognized error in PLy_spi_execute_plan |
||||
CONTEXT: PL/Python function "unicode_plan1" |
||||
ERROR: PL/Python: could not convert Python Unicode object to PostgreSQL server encoding |
||||
DETAIL: exceptions.UnicodeError: ASCII encoding error: ordinal not in range(128) |
||||
CONTEXT: PL/Python function "unicode_plan1" |
||||
SELECT unicode_plan2(); |
||||
unicode_plan2 |
||||
--------------- |
||||
foobar |
||||
(1 row) |
||||
|
||||
@ -0,0 +1,52 @@ |
||||
-- |
||||
-- Unicode handling |
||||
-- |
||||
CREATE TABLE unicode_test ( |
||||
testvalue text NOT NULL |
||||
); |
||||
CREATE FUNCTION unicode_return() RETURNS text AS E' |
||||
return u"\\x80" |
||||
' LANGUAGE plpythonu; |
||||
CREATE FUNCTION unicode_trigger() RETURNS trigger AS E' |
||||
TD["new"]["testvalue"] = u"\\x80" |
||||
return "MODIFY" |
||||
' LANGUAGE plpythonu; |
||||
CREATE TRIGGER unicode_test_bi BEFORE INSERT ON unicode_test |
||||
FOR EACH ROW EXECUTE PROCEDURE unicode_trigger(); |
||||
CREATE FUNCTION unicode_plan1() RETURNS text AS E' |
||||
plan = plpy.prepare("SELECT $1 AS testvalue", ["text"]) |
||||
rv = plpy.execute(plan, [u"\\x80"], 1) |
||||
return rv[0]["testvalue"] |
||||
' LANGUAGE plpythonu; |
||||
CREATE FUNCTION unicode_plan2() RETURNS text AS E' |
||||
plan = plpy.prepare("SELECT $1 || $2 AS testvalue", ["text", u"text"]) |
||||
rv = plpy.execute(plan, ["foo", "bar"], 1) |
||||
return rv[0]["testvalue"] |
||||
' LANGUAGE plpythonu; |
||||
SELECT unicode_return(); |
||||
ERROR: PL/Python: could not convert Python Unicode object to PostgreSQL server encoding |
||||
DETAIL: exceptions.UnicodeEncodeError: 'ascii' codec can't encode character u'\x80' in position 0: ordinal not in range(128) |
||||
CONTEXT: while creating return value |
||||
PL/Python function "unicode_return" |
||||
INSERT INTO unicode_test (testvalue) VALUES ('test'); |
||||
ERROR: PL/Python: could not convert Python Unicode object to PostgreSQL server encoding |
||||
DETAIL: exceptions.UnicodeEncodeError: 'ascii' codec can't encode character u'\x80' in position 0: ordinal not in range(128) |
||||
CONTEXT: while modifying trigger row |
||||
PL/Python function "unicode_trigger" |
||||
SELECT * FROM unicode_test; |
||||
testvalue |
||||
----------- |
||||
(0 rows) |
||||
|
||||
SELECT unicode_plan1(); |
||||
WARNING: PL/Python: plpy.Error: unrecognized error in PLy_spi_execute_plan |
||||
CONTEXT: PL/Python function "unicode_plan1" |
||||
ERROR: PL/Python: could not convert Python Unicode object to PostgreSQL server encoding |
||||
DETAIL: exceptions.UnicodeEncodeError: 'ascii' codec can't encode character u'\x80' in position 0: ordinal not in range(128) |
||||
CONTEXT: PL/Python function "unicode_plan1" |
||||
SELECT unicode_plan2(); |
||||
unicode_plan2 |
||||
--------------- |
||||
foobar |
||||
(1 row) |
||||
|
||||
@ -0,0 +1,52 @@ |
||||
-- |
||||
-- Unicode handling |
||||
-- |
||||
CREATE TABLE unicode_test ( |
||||
testvalue text NOT NULL |
||||
); |
||||
CREATE FUNCTION unicode_return() RETURNS text AS E' |
||||
return u"\\x80" |
||||
' LANGUAGE plpythonu; |
||||
CREATE FUNCTION unicode_trigger() RETURNS trigger AS E' |
||||
TD["new"]["testvalue"] = u"\\x80" |
||||
return "MODIFY" |
||||
' LANGUAGE plpythonu; |
||||
CREATE TRIGGER unicode_test_bi BEFORE INSERT ON unicode_test |
||||
FOR EACH ROW EXECUTE PROCEDURE unicode_trigger(); |
||||
CREATE FUNCTION unicode_plan1() RETURNS text AS E' |
||||
plan = plpy.prepare("SELECT $1 AS testvalue", ["text"]) |
||||
rv = plpy.execute(plan, [u"\\x80"], 1) |
||||
return rv[0]["testvalue"] |
||||
' LANGUAGE plpythonu; |
||||
CREATE FUNCTION unicode_plan2() RETURNS text AS E' |
||||
plan = plpy.prepare("SELECT $1 || $2 AS testvalue", ["text", u"text"]) |
||||
rv = plpy.execute(plan, ["foo", "bar"], 1) |
||||
return rv[0]["testvalue"] |
||||
' LANGUAGE plpythonu; |
||||
SELECT unicode_return(); |
||||
ERROR: PL/Python: could not convert Python Unicode object to PostgreSQL server encoding |
||||
DETAIL: <type 'exceptions.UnicodeEncodeError'>: 'ascii' codec can't encode character u'\x80' in position 0: ordinal not in range(128) |
||||
CONTEXT: while creating return value |
||||
PL/Python function "unicode_return" |
||||
INSERT INTO unicode_test (testvalue) VALUES ('test'); |
||||
ERROR: PL/Python: could not convert Python Unicode object to PostgreSQL server encoding |
||||
DETAIL: <type 'exceptions.UnicodeEncodeError'>: 'ascii' codec can't encode character u'\x80' in position 0: ordinal not in range(128) |
||||
CONTEXT: while modifying trigger row |
||||
PL/Python function "unicode_trigger" |
||||
SELECT * FROM unicode_test; |
||||
testvalue |
||||
----------- |
||||
(0 rows) |
||||
|
||||
SELECT unicode_plan1(); |
||||
WARNING: PL/Python: <class 'plpy.Error'>: unrecognized error in PLy_spi_execute_plan |
||||
CONTEXT: PL/Python function "unicode_plan1" |
||||
ERROR: PL/Python: could not convert Python Unicode object to PostgreSQL server encoding |
||||
DETAIL: <type 'exceptions.UnicodeEncodeError'>: 'ascii' codec can't encode character u'\x80' in position 0: ordinal not in range(128) |
||||
CONTEXT: PL/Python function "unicode_plan1" |
||||
SELECT unicode_plan2(); |
||||
unicode_plan2 |
||||
--------------- |
||||
foobar |
||||
(1 row) |
||||
|
||||
Loading…
Reference in new issue