mirror of
https://git.postgresql.org/git/postgresql.git
synced 2026-02-10 03:57:35 +08:00
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.
51 lines
1.1 KiB
Plaintext
51 lines
1.1 KiB
Plaintext
--
|
|
-- 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();
|
|
unicode_return
|
|
----------------
|
|
\u0080
|
|
(1 row)
|
|
|
|
INSERT INTO unicode_test (testvalue) VALUES ('test');
|
|
SELECT * FROM unicode_test;
|
|
testvalue
|
|
-----------
|
|
\u0080
|
|
(1 row)
|
|
|
|
SELECT unicode_plan1();
|
|
unicode_plan1
|
|
---------------
|
|
\u0080
|
|
(1 row)
|
|
|
|
SELECT unicode_plan2();
|
|
unicode_plan2
|
|
---------------
|
|
foobar
|
|
(1 row)
|
|
|