Full support for modified oldimage FK constraint to do ON UPDATE CASCASE as well...
authorGreg Sabino Mullane <greg@users.mediawiki.org>
Mon, 20 Jul 2009 01:54:36 +0000 (01:54 +0000)
committerGreg Sabino Mullane <greg@users.mediawiki.org>
Mon, 20 Jul 2009 01:54:36 +0000 (01:54 +0000)
maintenance/postgres/tables.sql
maintenance/updaters.inc

index 8c36f94..87055f9 100644 (file)
@@ -288,7 +288,7 @@ CREATE TABLE oldimage (
   oi_deleted       SMALLINT     NOT NULL DEFAULT 0,
   oi_sha1          TEXT         NOT NULL DEFAULT ''
 );
-ALTER TABLE oldimage ADD CONSTRAINT oldimage_oi_name_fkey_cascade FOREIGN KEY (oi_name) REFERENCES image(img_name) ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE oldimage ADD CONSTRAINT oldimage_oi_name_fkey_cascaded FOREIGN KEY (oi_name) REFERENCES image(img_name) ON DELETE CASCADE ON UPDATE CASCADE;
 CREATE INDEX oi_name_timestamp    ON oldimage (oi_name,oi_timestamp);
 CREATE INDEX oi_name_archive_name ON oldimage (oi_name,oi_archive_name);
 CREATE INDEX oi_sha1              ON oldimage (oi_sha1);
index c1db41c..8304b25 100644 (file)
@@ -1739,14 +1739,20 @@ function do_postgres_updates() {
                dbsource(archive($nr[2]));
        }
 
-       if ($wgDatabase->hasConstraint("oldimage_oi_name_fkey")) {
-               wfOut( "Making foreign key on table \"oldimage\" (to image) a cascade delete\n" );
-               $wgDatabase->query( "ALTER TABLE oldimage DROP CONSTRAINT oldimage_oi_name_fkey" );
-               $wgDatabase->query( "ALTER TABLE oldimage ADD CONSTRAINT oldimage_oi_name_fkey_cascade ".
-                       "FOREIGN KEY (oi_name) REFERENCES image(img_name) ON DELETE CASCADE" );
+       if ($wgDatabase->hasConstraint("oldimage_oi_name_fkey_cascaded")) {
+               wfOut( "... table \"oldimage\" has correct cascading delete/update foreign key to image\n" );
+       }
+       else {
+               if ($wgDatabase->hasConstraint("oldimage_oi_name_fkey")) {
+                       $wgDatabase->query( "ALTER TABLE oldimage DROP CONSTRAINT oldimage_oi_name_fkey" );
+               }
+               if ($wgDatabase->hasConstraint("oldimage_oi_name_fkey_cascade")) {
+                       $wgDatabase->query( "ALTER TABLE oldimage DROP CONSTRAINT oldimage_oi_name_fkey_cascade" );
+               }
+               wfOut( "Making foreign key on table \"oldimage\" (to image) a cascade delete/update\n" );
+               $wgDatabase->query( "ALTER TABLE oldimage ADD CONSTRAINT oldimage_oi_name_fkey_cascaded ".
+                       "FOREIGN KEY (oi_name) REFERENCES image(img_name) ON DELETE CASCADE ON UPDATE CASCADE" );
        }
-       else
-               wfOut( "... table \"oldimage\" has correct cascade delete foreign key to image\n" );
 
        if (!$wgDatabase->triggerExists("page", "page_deleted")) {
                wfOut( "Adding function and trigger \"page_deleted\" to table \"page\"\n" );