diff options
Diffstat (limited to 'contrib')
| -rw-r--r-- | contrib/lo/expected/lo.out | 69 | ||||
| -rw-r--r-- | contrib/lo/sql/lo.sql | 41 |
2 files changed, 110 insertions, 0 deletions
diff --git a/contrib/lo/expected/lo.out b/contrib/lo/expected/lo.out index 65798205a5a..2c9c07f7830 100644 --- a/contrib/lo/expected/lo.out +++ b/contrib/lo/expected/lo.out @@ -47,6 +47,75 @@ SELECT lo_get(43214); DELETE FROM image; SELECT lo_get(43214); ERROR: large object 43214 does not exist +-- Now let's try it with an AFTER trigger +DROP TRIGGER t_raster ON image; +CREATE CONSTRAINT TRIGGER t_raster AFTER UPDATE OR DELETE ON image + DEFERRABLE INITIALLY DEFERRED + FOR EACH ROW EXECUTE PROCEDURE lo_manage(raster); +SELECT lo_create(43223); + lo_create +----------- + 43223 +(1 row) + +SELECT lo_create(43224); + lo_create +----------- + 43224 +(1 row) + +SELECT lo_create(43225); + lo_create +----------- + 43225 +(1 row) + +INSERT INTO image (title, raster) VALUES ('beautiful image', 43223); +SELECT lo_get(43223); + lo_get +-------- + \x +(1 row) + +UPDATE image SET raster = 43224 WHERE title = 'beautiful image'; +SELECT lo_get(43223); -- gone +ERROR: large object 43223 does not exist +SELECT lo_get(43224); + lo_get +-------- + \x +(1 row) + +-- test updating of unrelated column +UPDATE image SET title = 'beautiful picture' WHERE title = 'beautiful image'; +SELECT lo_get(43224); + lo_get +-------- + \x +(1 row) + +-- this case used to be buggy +BEGIN; +UPDATE image SET title = 'beautiful image' WHERE title = 'beautiful picture'; +UPDATE image SET raster = 43225 WHERE title = 'beautiful image'; +SELECT lo_get(43224); + lo_get +-------- + \x +(1 row) + +COMMIT; +SELECT lo_get(43224); -- gone +ERROR: large object 43224 does not exist +SELECT lo_get(43225); + lo_get +-------- + \x +(1 row) + +DELETE FROM image; +SELECT lo_get(43225); -- gone +ERROR: large object 43225 does not exist SELECT lo_oid(1::lo); lo_oid -------- diff --git a/contrib/lo/sql/lo.sql b/contrib/lo/sql/lo.sql index ca36cdb3098..d1a9d7cf255 100644 --- a/contrib/lo/sql/lo.sql +++ b/contrib/lo/sql/lo.sql @@ -27,6 +27,47 @@ DELETE FROM image; SELECT lo_get(43214); +-- Now let's try it with an AFTER trigger + +DROP TRIGGER t_raster ON image; + +CREATE CONSTRAINT TRIGGER t_raster AFTER UPDATE OR DELETE ON image + DEFERRABLE INITIALLY DEFERRED + FOR EACH ROW EXECUTE PROCEDURE lo_manage(raster); + +SELECT lo_create(43223); +SELECT lo_create(43224); +SELECT lo_create(43225); + +INSERT INTO image (title, raster) VALUES ('beautiful image', 43223); + +SELECT lo_get(43223); + +UPDATE image SET raster = 43224 WHERE title = 'beautiful image'; + +SELECT lo_get(43223); -- gone +SELECT lo_get(43224); + +-- test updating of unrelated column +UPDATE image SET title = 'beautiful picture' WHERE title = 'beautiful image'; + +SELECT lo_get(43224); + +-- this case used to be buggy +BEGIN; +UPDATE image SET title = 'beautiful image' WHERE title = 'beautiful picture'; +UPDATE image SET raster = 43225 WHERE title = 'beautiful image'; +SELECT lo_get(43224); +COMMIT; + +SELECT lo_get(43224); -- gone +SELECT lo_get(43225); + +DELETE FROM image; + +SELECT lo_get(43225); -- gone + + SELECT lo_oid(1::lo); DROP TABLE image; |
