Обсуждение: BUG #5783: plpythonu bool behavior change
The following bug has been logged online: Bug reference: 5783 Logged by: Adrian Klaver Email address: adrian.klaver@gmail.com PostgreSQL version: 9.0.1 Operating system: Linux Ubuntu 10.04 Description: plpythonu bool behavior change Details: Seems there was a change in behavior for plpythonu with regards to boolean fields from 8.4 to 9.0. Previously, setting a field inside a plpythonu function to "f" would work, now that returns a 't' in the database field. To get the 'f' to appear I have to specify False inside the function. The only thing I can find in recent commits that would apply is: http://git.postgresql.org/gitweb?p=postgresql.git;a=commit;h=09130e5867d49c7 2ef0f11bef30c5385d83bf194 Below is test case that illustrates what I am seeing in 9.0.1: DROP TABLE IF EXISTS plpython_type; CREATE TABLE plpython_type (id integer, txt_fld text, bool_fld boolean ); DROP FUNCTION IF EXISTS plpython_test(); CREATE OR REPLACE FUNCTION plpython_test() RETURNS trigger AS $Body$ TD["new"]["bool_fld"] = "f" return "MODIFY" $Body$ LANGUAGE plpythonu; CREATE TRIGGER plpython_trg BEFORE INSERT ON plpython_type FOR EACH ROW EXECUTE PROCEDURE plpython_test(); INSERT INTO plpython_type VALUES (1,'test'); CREATE OR REPLACE FUNCTION plpython_test() RETURNS trigger AS $Body$ TD["new"]["bool_fld"] = False return "MODIFY" $Body$ LANGUAGE plpythonu; INSERT INTO plpython_type VALUES (2,'test'); SELECT * FROM plpython_type; Result: id | txt_fld | bool_fld ----+---------+---------- 1 | test | t 2 | test | f (2 rows)
On sön, 2010-12-05 at 00:25 +0000, Adrian Klaver wrote: > Seems there was a change in behavior for plpythonu with regards to > boolean fields from 8.4 to 9.0. Previously, setting a field inside a > plpythonu function to "f" would work, now that returns a 't' in the > database field. To get the 'f' to appear I have to specify False > inside the function. That change was intentional.
On Sunday 05 December 2010 9:10:06 am Peter Eisentraut wrote: > On s=C3=B6n, 2010-12-05 at 00:25 +0000, Adrian Klaver wrote: > > Seems there was a change in behavior for plpythonu with regards to > > boolean fields from 8.4 to 9.0. Previously, setting a field inside a > > plpythonu function to "f" would work, now that returns a 't' in the > > database field. To get the 'f' to appear I have to specify False > > inside the function. > > That change was intentional. Alright my mistake, I finally went past the release notes and read the new= docs=20 for plpythonu. I see the changes. I do not agree with them, but I should ha= ve=20 paid more attention in the dev process. The value is being returned to the= =20 database and should play by the database rules or at least be flagged. I wi= ll=20 make the necessary changes on my end. Thanks, --=20 Adrian Klaver adrian.klaver@gmail.com