Make SiteStatsInit::doPlaceholderInit() use 1 for ss_row_id
authorAaron Schulz <aschulz@wikimedia.org>
Sat, 10 Feb 2018 08:37:42 +0000 (00:37 -0800)
committerAaron Schulz <aschulz@wikimedia.org>
Mon, 12 Feb 2018 18:08:10 +0000 (18:08 +0000)
This makes it consistent with refresh() and avoids having two rows
on new wikis. Also make the SELECT explicitly look for row 1.

Bug: T186947
Change-Id: I4f952888bf8fecc791366a9698e46d61a4ad4ff3

includes/SiteStats.php

index f10e6a2..4b50fb9 100644 (file)
@@ -94,7 +94,6 @@ class SiteStats {
 
                if ( !self::isSane( $row ) ) {
                        wfDebug( __METHOD__ . ": site_stats persistently nonsensical o_O\n" );
-
                        $row = (object)array_fill_keys( self::selectFields(), 0 );
                }
 
@@ -106,7 +105,12 @@ class SiteStats {
         * @return bool|stdClass
         */
        static function doLoad( $db ) {
-               return $db->selectRow( 'site_stats', self::selectFields(), [], __METHOD__ );
+               return $db->selectRow(
+                       'site_stats',
+                       self::selectFields(),
+                       [ 'ss_row_id' => 1 ],
+                       __METHOD__
+               );
        }
 
        /**
@@ -243,7 +247,6 @@ class SiteStats {
         */
        public static function selectFields() {
                return [
-                       'ss_row_id',
                        'ss_total_edits',
                        'ss_good_articles',
                        'ss_total_pages',
@@ -259,7 +262,6 @@ class SiteStats {
         * Checks only fields which are filled by SiteStatsInit::refresh.
         *
         * @param bool|object $row
-        *
         * @return bool
         */
        private static function isSane( $row ) {
@@ -414,10 +416,11 @@ class SiteStatsInit {
         */
        public static function doPlaceholderInit() {
                $dbw = wfGetDB( DB_MASTER );
-               if ( $dbw->selectRow( 'site_stats', '1', [], __METHOD__ ) === false ) {
+               $exists = $dbw->selectField( 'site_stats', '1', [ 'ss_row_id' => 1 ],  __METHOD__ );
+               if ( $exists === false ) {
                        $dbw->insert(
                                'site_stats',
-                               array_fill_keys( SiteStats::selectFields(), 0 ),
+                               [ 'ss_row_id' => 1 ] + array_fill_keys( SiteStats::selectFields(), 0 ),
                                __METHOD__,
                                [ 'IGNORE' ]
                        );