From 456b1463672e2cc516b444ff48268f79bf41df6e Mon Sep 17 00:00:00 2001 From: Kevin Israel Date: Fri, 28 Aug 2015 03:57:01 -0400 Subject: [PATCH] Category::refreshCounts(): Save new counts using upsert() This doesn't completely address the TODO comment. However, I intend to finish doing so in a separate change. Change-Id: I71c6dafd4223d79a0153fa8ce7cb0ee1354c0ec6 --- includes/Category.php | 33 ++++++++++++++------------------- 1 file changed, 14 insertions(+), 19 deletions(-) diff --git a/includes/Category.php b/includes/Category.php index 3a21e256c7..c3e8a4eb4e 100644 --- a/includes/Category.php +++ b/includes/Category.php @@ -314,22 +314,6 @@ class Category { $dbw = wfGetDB( DB_MASTER ); $dbw->startAtomic( __METHOD__ ); - # Insert the row if it doesn't exist yet (e.g., this is being run via - # update.php from a pre-1.16 schema). TODO: This will cause lots and - # lots of gaps on some non-MySQL DBMSes if you run populateCategory.php - # repeatedly. Plus it's an extra query that's unneeded almost all the - # time. This should be rewritten somehow, probably. - $seqVal = $dbw->nextSequenceValue( 'category_cat_id_seq' ); - $dbw->insert( - 'category', - array( - 'cat_id' => $seqVal, - 'cat_title' => $this->mName - ), - __METHOD__, - 'IGNORE' - ); - $cond1 = $dbw->conditional( array( 'page_namespace' => NS_CATEGORY ), 1, 'NULL' ); $cond2 = $dbw->conditional( array( 'page_namespace' => NS_FILE ), 1, 'NULL' ); $result = $dbw->selectRow( @@ -342,16 +326,27 @@ class Category { __METHOD__, array( 'LOCK IN SHARE MODE' ) ); - $ret = $dbw->update( + + # TODO: This will cause lots and lots of gaps on MySQL unless + # innodb_autoinc_lock_mode is 0 (and also on some non-MySQL + # DBMSes) if you run populateCategory.php repeatedly. + $dbw->upsert( 'category', + array( + 'cat_title' => $this->mName, + 'cat_pages' => $result->pages, + 'cat_subcats' => $result->subcats, + 'cat_files' => $result->files + ), + array( 'cat_title' ), array( 'cat_pages' => $result->pages, 'cat_subcats' => $result->subcats, 'cat_files' => $result->files ), - array( 'cat_title' => $this->mName ), __METHOD__ ); + $dbw->endAtomic( __METHOD__ ); # Now we should update our local counts. @@ -359,6 +354,6 @@ class Category { $this->mSubcats = $result->subcats; $this->mFiles = $result->files; - return $ret; + return true; } } -- 2.20.1