PostgreSQL: Drop unneeded foreign key constraint
[lhc/web/wiklou.git] / includes / installer / PostgresUpdater.php
index 9e8ee94..9e41276 100644 (file)
@@ -418,6 +418,12 @@ class PostgresUpdater extends DatabaseUpdater {
                        array( 'addPgField', 'pagelinks', 'pl_from_namespace', 'INTEGER NOT NULL DEFAULT 0' ),
                        array( 'addPgField', 'templatelinks', 'tl_from_namespace', 'INTEGER NOT NULL DEFAULT 0' ),
                        array( 'addPgField', 'imagelinks', 'il_from_namespace', 'INTEGER NOT NULL DEFAULT 0' ),
+
+                       // 1.25
+                       array( 'dropTable', 'hitcounter' ),
+                       array( 'dropField', 'site_stats', 'ss_total_views', 'patch-drop-ss_total_views.sql' ),
+                       array( 'dropField', 'page', 'page_counter', 'patch-drop-page_counter.sql' ),
+                       array( 'dropFkey', 'recentchanges', 'rc_cur_id' )
                );
        }
 
@@ -769,6 +775,24 @@ END;
                }
        }
 
+       protected function dropFkey( $table, $field ) {
+               $fi = $this->db->fieldInfo( $table, $field );
+               if ( is_null( $fi ) ) {
+                       $this->output( "WARNING! Column '$table.$field' does not exist but it should! " .
+                               "Please report this.\n" );
+                       return;
+               }
+               $conname = $fi->conname();
+               if ( $fi->conname() ) {
+                       $this->output( "Dropping foreign key constraint on '$table.$field'\n" );
+                       $conclause = "CONSTRAINT \"$conname\"";
+                       $command = "ALTER TABLE $table DROP CONSTRAINT $conname";
+                       $this->db->query( $command );
+               } else {
+                       $this->output( "Foreign key constraint on '$table.$field' already does not exist\n" );
+               };
+       }
+
        protected function changeFkeyDeferrable( $table, $field, $clause ) {
                $fi = $this->db->fieldInfo( $table, $field );
                if ( is_null( $fi ) ) {