Fix populateRevisionLength.php so it's not trying to select revision
authorReedy <reedy@wikimedia.org>
Mon, 28 Oct 2013 22:08:50 +0000 (22:08 +0000)
committerReedy <reedy@wikimedia.org>
Mon, 28 Oct 2013 22:08:50 +0000 (22:08 +0000)
fields from the archive table (they won't exist!)

Follows up https://gerrit.wikimedia.org/r/#/c/54111/

Change-Id: Ie161a08097a2cd3393d69574263cfe78e4329bb4

includes/Revision.php
maintenance/populateRevisionLength.php

index 233eac0..4446173 100644 (file)
@@ -433,6 +433,36 @@ class Revision implements IDBAccessObject {
                return $fields;
        }
 
+       /**
+        * Return the list of revision fields that should be selected to create
+        * a new revision from an archive row.
+        * @return array
+        */
+       public static function selectArchiveFields() {
+               global $wgContentHandlerUseDB;
+               $fields = array(
+                       'ar_id',
+                       'ar_page_id',
+                       'ar_rev_id',
+                       'ar_text_id',
+                       'ar_timestamp',
+                       'ar_comment',
+                       'ar_user_text',
+                       'ar_user',
+                       'ar_minor_edit',
+                       'ar_deleted',
+                       'ar_len',
+                       'ar_parent_id',
+                       'ar_sha1',
+               );
+
+               if ( $wgContentHandlerUseDB ) {
+                       $fields[] = 'ar_content_format';
+                       $fields[] = 'ar_content_model';
+               }
+               return $fields;
+       }
+
        /**
         * Return the list of text fields that should be selected to read the
         * revision text
index 4acc579..042790f 100644 (file)
@@ -53,22 +53,23 @@ class PopulateRevisionLength extends LoggedUpdateMaintenance {
                }
 
                $this->output( "Populating rev_len column\n" );
-               $rev = $this->doLenUpdates( 'revision', 'rev_id', 'rev' );
+               $rev = $this->doLenUpdates( 'revision', 'rev_id', 'rev', Revision::selectFields() );
 
                $this->output( "Populating ar_len column\n" );
-               $ar = $this->doLenUpdates( 'archive', 'ar_id', 'ar' );
+               $ar = $this->doLenUpdates( 'archive', 'ar_id', 'ar', Revision::selectArchiveFields() );
 
                $this->output( "rev_len and ar_len population complete [$rev revision rows, $ar archive rows].\n" );
                return true;
        }
 
        /**
-        * @param $table
-        * @param $idCol
-        * @param $prefix
+        * @param string $table
+        * @param string $idCol
+        * @param string $prefix
+        * @param array $fields
         * @return int
         */
-       protected function doLenUpdates( $table, $idCol, $prefix ) {
+       protected function doLenUpdates( $table, $idCol, $prefix, $fields ) {
                $db = $this->getDB( DB_MASTER );
                $start = $db->selectField( $table, "MIN($idCol)", false, __METHOD__ );
                $end = $db->selectField( $table, "MAX($idCol)", false, __METHOD__ );
@@ -81,9 +82,9 @@ class PopulateRevisionLength extends LoggedUpdateMaintenance {
                $blockStart = intval( $start );
                $blockEnd = intval( $start ) + $this->mBatchSize - 1;
                $count = 0;
-               $fields = Revision::selectFields();
+
                while ( $blockStart <= $end ) {
-                       $this->output( "...doing rev_id from $blockStart to $blockEnd\n" );
+                       $this->output( "...doing $idCol from $blockStart to $blockEnd\n" );
                        $res = $db->select(
                                $table,
                                $fields,
@@ -114,9 +115,9 @@ class PopulateRevisionLength extends LoggedUpdateMaintenance {
 
        /**
         * @param $row
-        * @param $table
-        * @param $idCol
-        * @param $prefix
+        * @param string $table
+        * @param string $idCol
+        * @param string $prefix
         * @return bool
         */
        protected function upgradeRow( $row, $table, $idCol, $prefix ) {