mirror of https://github.com/postgres/postgres
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.REL8_5_ALPHA2_BRANCH
parent
9bb342811b
commit
4ab6ebf3f4
@ -1,45 +0,0 @@ |
||||
-- |
||||
-- Unicode handling |
||||
-- |
||||
CREATE TABLE unicode_test ( |
||||
testvalue text NOT NULL |
||||
); |
||||
CREATE FUNCTION unicode_return_error() RETURNS text AS E' |
||||
return u"\\x80" |
||||
' LANGUAGE plpythonu; |
||||
CREATE FUNCTION unicode_trigger_error() 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_error(); |
||||
CREATE FUNCTION unicode_plan_error1() 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_plan_error2() RETURNS text AS E' |
||||
plan = plpy.prepare("SELECT $1 AS testvalue1, $2 AS testvalue2", ["text", "text"]) |
||||
rv = plpy.execute(plan, u"\\x80", 1) |
||||
return rv[0]["testvalue1"] |
||||
' LANGUAGE plpythonu; |
||||
SELECT unicode_return_error(); |
||||
ERROR: PL/Python: could not create string representation of Python object |
||||
DETAIL: exceptions.UnicodeError: ASCII encoding error: ordinal not in range(128) |
||||
CONTEXT: while creating return value |
||||
PL/Python function "unicode_return_error" |
||||
INSERT INTO unicode_test (testvalue) VALUES ('test'); |
||||
ERROR: PL/Python: could not create string representation of Python object |
||||
DETAIL: exceptions.UnicodeError: ASCII encoding error: ordinal not in range(128) |
||||
CONTEXT: while modifying trigger row |
||||
PL/Python function "unicode_trigger_error" |
||||
SELECT unicode_plan_error1(); |
||||
WARNING: PL/Python: plpy.Error: unrecognized error in PLy_spi_execute_plan |
||||
CONTEXT: PL/Python function "unicode_plan_error1" |
||||
ERROR: PL/Python: could not execute plan |
||||
DETAIL: exceptions.UnicodeError: ASCII encoding error: ordinal not in range(128) |
||||
CONTEXT: PL/Python function "unicode_plan_error1" |
||||
SELECT unicode_plan_error2(); |
||||
ERROR: PL/Python: could not execute plan |
||||
DETAIL: exceptions.UnicodeError: ASCII encoding error: ordinal not in range(128) |
||||
CONTEXT: PL/Python function "unicode_plan_error2" |
@ -1,45 +0,0 @@ |
||||
-- |
||||
-- Unicode handling |
||||
-- |
||||
CREATE TABLE unicode_test ( |
||||
testvalue text NOT NULL |
||||
); |
||||
CREATE FUNCTION unicode_return_error() RETURNS text AS E' |
||||
return u"\\x80" |
||||
' LANGUAGE plpythonu; |
||||
CREATE FUNCTION unicode_trigger_error() 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_error(); |
||||
CREATE FUNCTION unicode_plan_error1() 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_plan_error2() RETURNS text AS E' |
||||
plan = plpy.prepare("SELECT $1 AS testvalue1, $2 AS testvalue2", ["text", "text"]) |
||||
rv = plpy.execute(plan, u"\\x80", 1) |
||||
return rv[0]["testvalue1"] |
||||
' LANGUAGE plpythonu; |
||||
SELECT unicode_return_error(); |
||||
ERROR: PL/Python: could not create string representation of Python object |
||||
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_error" |
||||
INSERT INTO unicode_test (testvalue) VALUES ('test'); |
||||
ERROR: PL/Python: could not create string representation of Python object |
||||
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_error" |
||||
SELECT unicode_plan_error1(); |
||||
WARNING: PL/Python: plpy.Error: unrecognized error in PLy_spi_execute_plan |
||||
CONTEXT: PL/Python function "unicode_plan_error1" |
||||
ERROR: PL/Python: could not execute plan |
||||
DETAIL: exceptions.UnicodeEncodeError: 'ascii' codec can't encode character u'\x80' in position 0: ordinal not in range(128) |
||||
CONTEXT: PL/Python function "unicode_plan_error1" |
||||
SELECT unicode_plan_error2(); |
||||
ERROR: PL/Python: could not execute plan |
||||
DETAIL: exceptions.UnicodeEncodeError: 'ascii' codec can't encode character u'\x80' in position 0: ordinal not in range(128) |
||||
CONTEXT: PL/Python function "unicode_plan_error2" |
Loading…
Reference in new issue