From ed802248e3bde529ca26289057773de0731d3dd8 Mon Sep 17 00:00:00 2001 From: Amir Sarabadani Date: Thu, 14 Jun 2018 18:37:19 +0200 Subject: [PATCH] Make ChangeTag use NameTableStore for change_tag_def table Also adding a regression test to fix upsert AUTO_INCREMENT issue Bug: T193868 Change-Id: I0363c93a824c41d12b33aedb05e92e1d9943c40d --- includes/changetags/ChangeTags.php | 39 ++++++++++--------- .../includes/changetags/ChangeTagsTest.php | 4 +- 2 files changed, 24 insertions(+), 19 deletions(-) diff --git a/includes/changetags/ChangeTags.php b/includes/changetags/ChangeTags.php index d019f41cea..bd9cedc758 100644 --- a/includes/changetags/ChangeTags.php +++ b/includes/changetags/ChangeTags.php @@ -21,7 +21,9 @@ * @ingroup Change tagging */ +use MediaWiki\Logger\LoggerFactory; use MediaWiki\MediaWikiServices; +use MediaWiki\Storage\NameTableStore; use Wikimedia\Rdbms\Database; class ChangeTags { @@ -346,31 +348,32 @@ class ChangeTags { if ( count( $tagsToAdd ) ) { $changeTagMapping = []; if ( $wgChangeTagsSchemaMigrationStage > MIGRATION_OLD ) { - $tagDefRows = []; + $changeTagDefStore = new NameTableStore( + MediaWikiServices::getInstance()->getDBLoadBalancer(), + MediaWikiServices::getInstance()->getMainWANObjectCache(), + LoggerFactory::getInstance( 'NameTableSqlStore' ), + 'change_tag_def', + 'ctd_id', + 'ctd_name', + null, + false, + function ( $insertFields ) { + $insertFields['ctd_user_defined'] = 0; + $insertFields['ctd_count'] = 0; + return $insertFields; + } + ); + foreach ( $tagsToAdd as $tag ) { - $tagDefRows[] = [ - 'ctd_name' => $tag, - 'ctd_user_defined' => 0, - 'ctd_count' => 1 - ]; + $changeTagMapping[$tag] = $changeTagDefStore->acquireId( $tag ); } - $dbw->upsert( + $dbw->update( 'change_tag_def', - $tagDefRows, - [ 'ctd_name' ], [ 'ctd_count = ctd_count + 1' ], + [ 'ctd_name' => $tagsToAdd ], __METHOD__ ); - - $res = $dbw->select( - 'change_tag_def', - [ 'ctd_name', 'ctd_id' ], - [ 'ctd_name' => $tagsToAdd ] - ); - foreach ( $res as $row ) { - $changeTagMapping[$row->ctd_name] = $row->ctd_id; - } } $tagsRows = []; diff --git a/tests/phpunit/includes/changetags/ChangeTagsTest.php b/tests/phpunit/includes/changetags/ChangeTagsTest.php index 215cdfdf90..216228ad67 100644 --- a/tests/phpunit/includes/changetags/ChangeTagsTest.php +++ b/tests/phpunit/includes/changetags/ChangeTagsTest.php @@ -421,7 +421,9 @@ class ChangeTagsTest extends MediaWikiTestCase { $this->assertEquals( $expected2, iterator_to_array( $res2, false ) ); $rcId = 124; - ChangeTags::updateTags( [ 'tag1', 'tag3' ], [], $rcId ); + ChangeTags::updateTags( [ 'tag1' ], [], $rcId ); + + ChangeTags::updateTags( [ 'tag3' ], [], $rcId ); $dbr = wfGetDB( DB_REPLICA ); -- 2.20.1