[Checkins] SVN: relstorage/trunk/relstorage/adapters/ Clarify the uses of the trigger by making two separate triggers.
Shane Hathaway
shane at hathawaymix.org
Thu Jun 30 00:07:08 EDT 2011
Log message for revision 122042:
Clarify the uses of the trigger by making two separate triggers.
This also makes it compatible with Postgres 8.1.
Changed:
U relstorage/trunk/relstorage/adapters/mover.py
U relstorage/trunk/relstorage/adapters/schema.py
-=-
Modified: relstorage/trunk/relstorage/adapters/mover.py
===================================================================
--- relstorage/trunk/relstorage/adapters/mover.py 2011-06-29 11:55:17 UTC (rev 122041)
+++ relstorage/trunk/relstorage/adapters/mover.py 2011-06-30 04:07:05 UTC (rev 122042)
@@ -403,7 +403,7 @@
CREATE TRIGGER temp_blob_chunk_delete
BEFORE DELETE ON temp_blob_chunk
FOR EACH ROW
- EXECUTE PROCEDURE blob_chunk_delete_trigger();
+ EXECUTE PROCEDURE temp_blob_chunk_delete_trigger();
"""
cursor.execute(stmt)
Modified: relstorage/trunk/relstorage/adapters/schema.py
===================================================================
--- relstorage/trunk/relstorage/adapters/schema.py 2011-06-29 11:55:17 UTC (rev 122041)
+++ relstorage/trunk/relstorage/adapters/schema.py 2011-06-30 04:07:05 UTC (rev 122042)
@@ -22,7 +22,7 @@
# Versions of the installed stored procedures. Change these when
# the corresponding code changes.
oracle_package_version = '1.5A'
-postgresql_proc_version = '1.5A'
+postgresql_proc_version = '1.5B'
log = logging.getLogger("relstorage")
@@ -405,21 +405,32 @@
-- Version: %(postgresql_proc_version)s
-- Unlink large object data file after blob_chunk row deletion
DECLARE
- expect integer;
cnt integer;
BEGIN
- expect = 1; -- The number of rows where we'll unlink the oid
- IF (TG_TABLE_NAME != 'blob_chunk') THEN
- expect = 0; -- Deleting from elsewhere means we expect 0
- END IF;
SELECT count(*) into cnt FROM blob_chunk WHERE chunk=OLD.chunk;
- IF (cnt = expect) THEN
+ IF (cnt = 1) THEN
-- Last reference to this oid, unlink
PERFORM lo_unlink(OLD.chunk);
END IF;
RETURN OLD;
END;
$blob_chunk_delete_trigger$ LANGUAGE plpgsql;
+
+CREATE OR REPLACE FUNCTION temp_blob_chunk_delete_trigger() RETURNS TRIGGER
+AS $temp_blob_chunk_delete_trigger$
+ -- Version: %(postgresql_proc_version)s
+ -- Unlink large object data file after temp_blob_chunk row deletion
+ DECLARE
+ cnt integer;
+ BEGIN
+ SELECT count(*) into cnt FROM blob_chunk WHERE chunk=OLD.chunk;
+ IF (cnt = 0) THEN
+ -- No more references to this oid, unlink
+ PERFORM lo_unlink(OLD.chunk);
+ END IF;
+ RETURN OLD;
+ END;
+$temp_blob_chunk_delete_trigger$ LANGUAGE plpgsql;
""" % globals()
oracle_history_preserving_package = """
@@ -984,7 +995,10 @@
Returns True only if all required procedures are installed and
up to date.
"""
- expect = ['blob_chunk_delete_trigger']
+ expect = [
+ 'blob_chunk_delete_trigger',
+ 'temp_blob_chunk_delete_trigger',
+ ]
current_procs = self.list_procedures(cursor)
for proc in expect:
if current_procs.get(proc) != postgresql_proc_version:
More information about the checkins
mailing list