[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