Thiemo Mättig (WMDE) has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/176356

Change subject: [WIP] Clean up UsageTablePrimer and related
......................................................................

[WIP] Clean up UsageTablePrimer and related

Two problems to be discussed:
1. Why must the addExtensionUpdate be static?
2. Why is the table name passed around as a variable in so many odd
   places?

Change-Id: Icf85ad8ed940a95ba741f2640d06ab506d563dd4
---
M client/includes/Usage/Sql/SqlUsageTracker.php
R client/includes/Usage/Sql/SqlUsageTrackerSchemaUpdater.php
M client/includes/Usage/Sql/UsageTablePrimer.php
M client/includes/Usage/Sql/UsageTableUpdater.php
M client/includes/Usage/UsageTracker.php
M client/tests/phpunit/includes/Usage/EntityUsageTest.php
M client/tests/phpunit/includes/Usage/HashUsageAccumulatorTest.php
M client/tests/phpunit/includes/Usage/ParserOutputUsageAccumulatorTest.php
M client/tests/phpunit/includes/Usage/Sql/SqlUsageTrackerTest.php
M client/tests/phpunit/includes/Usage/Sql/UsageTablePrimerTest.php
M client/tests/phpunit/includes/Usage/Sql/UsageTableUpdaterTest.php
M client/tests/phpunit/includes/Usage/UsageAccumulatorContractTester.php
M client/tests/phpunit/includes/Usage/UsageLookupContractTester.php
M client/tests/phpunit/includes/Usage/UsageTrackerContractTester.php
14 files changed, 55 insertions(+), 70 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikibase 
refs/changes/56/176356/1

diff --git a/client/includes/Usage/Sql/SqlUsageTracker.php 
b/client/includes/Usage/Sql/SqlUsageTracker.php
index b29c94b..b907c77 100644
--- a/client/includes/Usage/Sql/SqlUsageTracker.php
+++ b/client/includes/Usage/Sql/SqlUsageTracker.php
@@ -54,7 +54,7 @@
         * @return UsageTableUpdater
         */
        private function newTableUpdater( DatabaseBase $db ) {
-               return new UsageTableUpdater( $db, 'wbc_entity_usage', 
$this->batchSize );
+               return new UsageTableUpdater( $db, $this->batchSize );
        }
 
        /**
@@ -187,7 +187,7 @@
                }
 
                $res = $db->select(
-                       'wbc_entity_usage',
+                       UsageTracker::TABLE_NAME,
                        array( 'eu_aspect', 'eu_entity_id' ),
                        array( 'eu_page_id' => (int)$pageId ),
                        __METHOD__
@@ -239,7 +239,7 @@
                $db = $this->connectionManager->getReadConnection();
 
                $res = $db->select(
-                       'wbc_entity_usage',
+                       UsageTracker::TABLE_NAME,
                        array( 'DISTINCT eu_page_id' ),
                        $where,
                        __METHOD__
@@ -291,7 +291,7 @@
                $db = $this->connectionManager->getReadConnection();
 
                $res = $db->select(
-                       'wbc_entity_usage',
+                       UsageTracker::TABLE_NAME,
                        array( 'eu_entity_id' ),
                        $where,
                        __METHOD__
diff --git a/client/includes/Usage/Sql/SqlUsageTrackerSchemaUpdate.php 
b/client/includes/Usage/Sql/SqlUsageTrackerSchemaUpdater.php
similarity index 71%
rename from client/includes/Usage/Sql/SqlUsageTrackerSchemaUpdate.php
rename to client/includes/Usage/Sql/SqlUsageTrackerSchemaUpdater.php
index 79fe713..662581a 100644
--- a/client/includes/Usage/Sql/SqlUsageTrackerSchemaUpdate.php
+++ b/client/includes/Usage/Sql/SqlUsageTrackerSchemaUpdater.php
@@ -3,6 +3,8 @@
 namespace Wikibase\Client\Usage\Sql;
 
 use DatabaseUpdater;
+use MWException;
+use Wikibase\Client\Usage\UsageTracker;
 use Wikibase\Client\WikibaseClient;
 use Wikibase\DataModel\Entity\EntityIdParser;
 
@@ -48,36 +50,27 @@
         * Applies any schema updates
         */
        public function doSchemaUpdate() {
-               $table = 'wbc_entity_usage';
-
-               if ( !$this->dbUpdater->tableExists( $table ) ) {
+               if ( !$this->dbUpdater->tableExists( UsageTracker::TABLE_NAME ) 
) {
                        $db = $this->dbUpdater->getDB();
                        $script = $this->getUpdateScriptPath( 'entity_usage', 
$db->getType() );
-                       $this->dbUpdater->addExtensionTable( $table, $script );
+                       $this->dbUpdater->addExtensionTable( 
UsageTracker::TABLE_NAME, $script );
 
                        // Register function for populating the table.
-                       // Note that this must be done with a static function,
-                       // for reasons that do not need explaining at this 
juncture.
-                       $this->dbUpdater->addExtensionUpdate( array(
-                               array( __CLASS__, 'fillUsageTable' ),
-                               $table
-                       ) );
+                       $this->dbUpdater->addExtensionUpdate( array( array( 
$this, 'fillUsageTable' ) ) );
                }
        }
 
        /**
-        * Static wrapper for UsageTablePrimer::fillUsageTable
+        * Static wrapper for SqlUsageTrackerSchemaUpdater::doSchemaUpdate
         *
-        * @param DatabaseUpdater $dbUpdater
-        * @param string $table
+        * @param DatabaseUpdater $dbUpdater Unused.
         */
-       public static function fillUsageTable( DatabaseUpdater $dbUpdater, 
$table ) {
+       public function fillUsageTable( DatabaseUpdater $dbUpdater ) {
                $idParser = 
WikibaseClient::getDefaultInstance()->getEntityIdParser();
 
                $primer = new UsageTablePrimer(
                        $idParser,
                        wfGetLB(), // would be nice to pass in 
$dbUpdater->getDB().
-                       $table,
                        1000
                );
 
@@ -98,7 +91,7 @@
                        }
                }
 
-               throw new \MWException( "Could not find schema update script 
'$name'." );
+               throw new MWException( "Could not find schema update script 
'$name'." );
        }
 
 }
diff --git a/client/includes/Usage/Sql/UsageTablePrimer.php 
b/client/includes/Usage/Sql/UsageTablePrimer.php
index a41d584..5d1dd31 100644
--- a/client/includes/Usage/Sql/UsageTablePrimer.php
+++ b/client/includes/Usage/Sql/UsageTablePrimer.php
@@ -8,6 +8,7 @@
 use LoadBalancer;
 use ResultWrapper;
 use Wikibase\Client\Usage\EntityUsage;
+use Wikibase\Client\Usage\UsageTracker;
 use Wikibase\DataModel\Entity\EntityId;
 use Wikibase\DataModel\Entity\EntityIdParser;
 use Wikibase\Lib\Reporting\ExceptionHandler;
@@ -38,11 +39,6 @@
        private $loadBalancer;
 
        /**
-        * @var string
-        */
-       private $usageTableName;
-
-       /**
         * @var int
         */
        private $batchSize;
@@ -60,23 +56,17 @@
        /**
         * @param EntityIdParser $idParser
         * @param LoadBalancer $loadBalancer
-        * @param string $usageTableName
         * @param int $batchSize
         *
         * @throws InvalidArgumentException
         */
-       public function __construct( EntityIdParser $idParser, LoadBalancer 
$loadBalancer, $usageTableName, $batchSize = 1000 ) {
-               if ( !is_string( $usageTableName ) ) {
-                       throw new InvalidArgumentException( '$usageTableName 
must be a string' );
-               }
-
+       public function __construct( EntityIdParser $idParser, LoadBalancer 
$loadBalancer, $batchSize = 1000 ) {
                if ( !is_int( $batchSize ) || $batchSize < 1 ) {
                        throw new InvalidArgumentException( '$batchSize must be 
an integer >= 1' );
                }
 
                $this->idParser = $idParser;
                $this->loadBalancer = $loadBalancer;
-               $this->usageTableName = $usageTableName;
                $this->batchSize = $batchSize;
 
                $this->exceptionHandler = new LogWarningExceptionHandler();
@@ -86,7 +76,7 @@
        /**
         * @param MessageReporter $progressReporter
         */
-       public function setProgressReporter( $progressReporter ) {
+       public function setProgressReporter( MessageReporter $progressReporter 
) {
                $this->progressReporter = $progressReporter;
        }
 
@@ -100,7 +90,7 @@
        /**
         * @param ExceptionHandler $exceptionHandler
         */
-       public function setExceptionHandler( $exceptionHandler ) {
+       public function setExceptionHandler( ExceptionHandler $exceptionHandler 
) {
                $this->exceptionHandler = $exceptionHandler;
        }
 
@@ -159,7 +149,7 @@
                $c = 0;
                foreach ( $entityPerPage as $pageId => $entityId ) {
                        $db->insert(
-                               $this->usageTableName,
+                               UsageTracker::TABLE_NAME,
                                array(
                                        'eu_page_id' => (int)$pageId,
                                        'eu_aspect' => EntityUsage::ALL_USAGE,
@@ -219,10 +209,10 @@
                                $this->exceptionHandler->handleException(
                                        $ex,
                                        'badEntityId',
-                                       __METHOD__ .': ' .
-                                               'Failed to parse entity ID: ' .
+                                       __METHOD__ . ': ' . 'Failed to parse 
entity ID: ' .
                                                $row->pp_value . ' at page ' .
-                                               $row->pp_page );
+                                               $row->pp_page
+                               );
                        }
                }
 
diff --git a/client/includes/Usage/Sql/UsageTableUpdater.php 
b/client/includes/Usage/Sql/UsageTableUpdater.php
index 3b8185a..5e63ae4 100644
--- a/client/includes/Usage/Sql/UsageTableUpdater.php
+++ b/client/includes/Usage/Sql/UsageTableUpdater.php
@@ -5,6 +5,7 @@
 use DatabaseBase;
 use InvalidArgumentException;
 use Wikibase\Client\Usage\EntityUsage;
+use Wikibase\Client\Usage\UsageTracker;
 
 /**
  * Helper class for updating the wb_entity_usage table.
@@ -21,33 +22,22 @@
        private $connection;
 
        /**
-        * @var string
-        */
-       private $tableName;
-
-       /**
         * @var int
         */
        private $batchSize;
 
        /**
         * @param DatabaseBase $connection
-        * @param string $tableName
         * @param int $batchSize
         *
-        * @throws \InvalidArgumentException
+        * @throws InvalidArgumentException
         */
-       public function __construct( DatabaseBase $connection, $tableName, 
$batchSize ) {
-               if ( !is_string( $tableName ) ) {
-                       throw new InvalidArgumentException( '$tableName must be 
a string' );
-               }
-
+       public function __construct( DatabaseBase $connection, $batchSize ) {
                if ( !is_int( $batchSize ) || $batchSize < 1 ) {
                        throw new InvalidArgumentException( '$batchSize must be 
an integer >= 1' );
                }
 
                $this->connection = $connection;
-               $this->tableName = $tableName;
                $this->batchSize = $batchSize;
        }
 
@@ -187,7 +177,7 @@
 
                foreach ( $batches as $batch ) {
                        $this->connection->delete(
-                               $this->tableName,
+                               UsageTracker::TABLE_NAME,
                                array(
                                        'eu_page_id' => (int)$pageId,
                                        'eu_aspect' => (string)$aspect,
@@ -222,7 +212,7 @@
 
                foreach ( $batches as $rows ) {
                        $this->connection->insert(
-                               $this->tableName,
+                               UsageTracker::TABLE_NAME,
                                $rows,
                                __METHOD__
                        );
@@ -248,7 +238,7 @@
 
                foreach ( $batches as $batch ) {
                        $this->connection->delete(
-                               $this->tableName,
+                               UsageTracker::TABLE_NAME,
                                array(
                                        'eu_entity_id' => $batch,
                                ),
diff --git a/client/includes/Usage/UsageTracker.php 
b/client/includes/Usage/UsageTracker.php
index aa38d7a..01db17e 100644
--- a/client/includes/Usage/UsageTracker.php
+++ b/client/includes/Usage/UsageTracker.php
@@ -14,6 +14,8 @@
  */
 interface UsageTracker {
 
+       const TABLE_NAME = 'wbc_entity_usage';
+
        /**
         * Updates entity usage information for the given page.
         *
@@ -22,8 +24,8 @@
         *
         * See docs/usagetracking.wiki for details.
         *
-        * @return EntityUsage[] Usages before the update
         * @throws UsageTrackerException
+        * @return EntityUsage[] Usages before the update
         */
        public function trackUsedEntities( $pageId, array $usages );
 
diff --git a/client/tests/phpunit/includes/Usage/EntityUsageTest.php 
b/client/tests/phpunit/includes/Usage/EntityUsageTest.php
index 4ef3427..a2cf399 100644
--- a/client/tests/phpunit/includes/Usage/EntityUsageTest.php
+++ b/client/tests/phpunit/includes/Usage/EntityUsageTest.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Wikibase\Client\Tests\Usage;
 
 use PHPUnit_Framework_TestCase;
diff --git a/client/tests/phpunit/includes/Usage/HashUsageAccumulatorTest.php 
b/client/tests/phpunit/includes/Usage/HashUsageAccumulatorTest.php
index 7d6a9e6..32ccfd1 100644
--- a/client/tests/phpunit/includes/Usage/HashUsageAccumulatorTest.php
+++ b/client/tests/phpunit/includes/Usage/HashUsageAccumulatorTest.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Wikibase\Client\Usage\Tests;
 
 use Wikibase\Client\Usage\HashUsageAccumulator;
diff --git 
a/client/tests/phpunit/includes/Usage/ParserOutputUsageAccumulatorTest.php 
b/client/tests/phpunit/includes/Usage/ParserOutputUsageAccumulatorTest.php
index bfb3a1b..0da18cd 100644
--- a/client/tests/phpunit/includes/Usage/ParserOutputUsageAccumulatorTest.php
+++ b/client/tests/phpunit/includes/Usage/ParserOutputUsageAccumulatorTest.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Wikibase\Client\Usage\Tests;
 
 use ParserOutput;
diff --git a/client/tests/phpunit/includes/Usage/Sql/SqlUsageTrackerTest.php 
b/client/tests/phpunit/includes/Usage/Sql/SqlUsageTrackerTest.php
index f332d6b..aef78eb 100644
--- a/client/tests/phpunit/includes/Usage/Sql/SqlUsageTrackerTest.php
+++ b/client/tests/phpunit/includes/Usage/Sql/SqlUsageTrackerTest.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Wikibase\Client\Tests\Usage\Sql;
 
 use PHPUnit_Framework_Assert as Assert;
@@ -6,6 +7,7 @@
 use Wikibase\Client\Tests\Usage\UsageLookupContractTester;
 use Wikibase\Client\Tests\Usage\UsageTrackerContractTester;
 use Wikibase\Client\Usage\Sql\SqlUsageTracker;
+use Wikibase\Client\Usage\UsageTracker;
 use Wikibase\Client\WikibaseClient;
 use Wikibase\DataModel\Entity\BasicEntityIdParser;
 
@@ -42,7 +44,7 @@
                        $this->markTestSkipped( 'Skipping test for 
SqlUsageTracker, because the useLegacyUsageIndex option is set.' );
                }
 
-               $this->tablesUsed[] = 'wbc_entity_usage';
+               $this->tablesUsed[] = UsageTracker::TABLE_NAME;
 
                parent::setUp();
 
diff --git a/client/tests/phpunit/includes/Usage/Sql/UsageTablePrimerTest.php 
b/client/tests/phpunit/includes/Usage/Sql/UsageTablePrimerTest.php
index 250d959..853fd51 100644
--- a/client/tests/phpunit/includes/Usage/Sql/UsageTablePrimerTest.php
+++ b/client/tests/phpunit/includes/Usage/Sql/UsageTablePrimerTest.php
@@ -1,12 +1,15 @@
 <?php
+
 namespace Wikibase\Client\Tests\Usage\Sql;
 
 use PHPUnit_Framework_MockObject_Matcher;
 use PHPUnit_Framework_MockObject_Matcher_Invocation;
 use Wikibase\Client\Usage\Sql\UsageTablePrimer;
+use Wikibase\Client\Usage\UsageTracker;
 use Wikibase\Client\WikibaseClient;
 use Wikibase\DataModel\Entity\BasicEntityIdParser;
 use Wikibase\Lib\Reporting\ExceptionHandler;
+use Wikibase\Lib\Reporting\MessageReporter;
 
 /**
  * @covers Wikibase\Client\Usage\Sql\UsageTablePrimer
@@ -21,24 +24,22 @@
  */
 class UsageTablePrimerTest extends \MediaWikiTestCase {
 
-       private $tableName = 'wbc_entity_usage';
-
        public function setUp() {
                if ( 
WikibaseClient::getDefaultInstance()->getSettings()->getSetting( 
'useLegacyUsageIndex' ) ) {
                        $this->markTestSkipped( 'Skipping test for 
UsageTablePrimer, because the useLegacyUsageIndex option is set.' );
                }
 
-               $this->tablesUsed[] = $this->tableName;
+               $this->tablesUsed[] = UsageTracker::TABLE_NAME;
                $this->tablesUsed[] = 'page_props';
 
                parent::setUp();
        }
 
-       private function getUsageTablePrimer( $bastchSize = 10 ) {
+       private function getUsageTablePrimer( $batchSize = 10 ) {
                $loadBalancer = wfGetLB();
                $idParser = new BasicEntityIdParser();
 
-               return new UsageTablePrimer( $idParser, $loadBalancer, 
$this->tableName, $bastchSize );
+               return new UsageTablePrimer( $idParser, $loadBalancer, 
$batchSize );
        }
 
        public function testFillUsageTable() {
@@ -89,7 +90,7 @@
        private function fetchAllUsageStrings() {
                $db = wfGetDB( DB_MASTER );
 
-               $res = $db->select( $this->tableName, "*", '', __METHOD__ );
+               $res = $db->select( UsageTracker::TABLE_NAME, '*', '', 
__METHOD__ );
 
                $usages = array();
                foreach ( $res as $row ) {
@@ -102,7 +103,7 @@
        }
 
        /**
-        * @param PHPUnit_Framework_MockObject_Matcher $matcher
+        * @param PHPUnit_Framework_MockObject_Matcher_Invocation $matcher
         *
         * @return ExceptionHandler
         */
@@ -115,9 +116,9 @@
        }
 
        /**
-        * @param PHPUnit_Framework_MockObject_Matcher $matcher
+        * @param PHPUnit_Framework_MockObject_Matcher_Invocation $matcher
         *
-        * @return ExceptionHandler
+        * @return MessageReporter
         */
        private function getMessageReporter( 
PHPUnit_Framework_MockObject_Matcher_Invocation $matcher ) {
                $mock = $this->getMock( 
'Wikibase\Lib\Reporting\MessageReporter' );
diff --git a/client/tests/phpunit/includes/Usage/Sql/UsageTableUpdaterTest.php 
b/client/tests/phpunit/includes/Usage/Sql/UsageTableUpdaterTest.php
index 69c9220..a21ad1e 100644
--- a/client/tests/phpunit/includes/Usage/Sql/UsageTableUpdaterTest.php
+++ b/client/tests/phpunit/includes/Usage/Sql/UsageTableUpdaterTest.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Wikibase\Client\Tests\Usage\Sql;
 
 use DatabaseBase;
@@ -6,6 +7,7 @@
 use PHPUnit_Framework_TestCase;
 use Wikibase\Client\Usage\EntityUsage;
 use Wikibase\Client\Usage\Sql\UsageTableUpdater;
+use Wikibase\Client\Usage\UsageTracker;
 use Wikibase\Client\WikibaseClient;
 use Wikibase\DataModel\Entity\EntityId;
 use Wikibase\DataModel\Entity\ItemId;
@@ -23,14 +25,12 @@
  */
 class UsageTableUpdaterTest extends \MediaWikiTestCase {
 
-       private $tableName = 'wbc_entity_usage';
-
        protected function setUp() {
                if ( 
WikibaseClient::getDefaultInstance()->getSettings()->getSetting( 
'useLegacyUsageIndex' ) ) {
                        $this->markTestSkipped( 'Skipping test for 
UsageTableUpdater, because the useLegacyUsageIndex option is set.' );
                }
 
-               $this->tablesUsed[] = $this->tableName;
+               $this->tablesUsed[] = UsageTracker::TABLE_NAME;
 
                parent::setUp();
        }
@@ -117,7 +117,7 @@
        }
 
        private function getUsageTableUpdater( $batchSize = 1000 ) {
-               return new UsageTableUpdater( wfGetDB( DB_WRITE ), 
$this->tableName, $batchSize );
+               return new UsageTableUpdater( wfGetDB( DB_WRITE ), $batchSize );
        }
 
        public function testUpdateUsage() {
@@ -233,7 +233,8 @@
         * @return bool
         */
        private function rowExists( DatabaseBase $db, $conditions ) {
-               $count = $db->selectRowCount( $this->tableName, '*', 
$conditions );
+               $count = $db->selectRowCount( UsageTracker::TABLE_NAME, '*', 
$conditions );
                return $count > 0;
        }
+
 }
diff --git 
a/client/tests/phpunit/includes/Usage/UsageAccumulatorContractTester.php 
b/client/tests/phpunit/includes/Usage/UsageAccumulatorContractTester.php
index 0f38d66..7bb3783 100644
--- a/client/tests/phpunit/includes/Usage/UsageAccumulatorContractTester.php
+++ b/client/tests/phpunit/includes/Usage/UsageAccumulatorContractTester.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Wikibase\Client\Usage\Tests;
 
 use PHPUnit_Framework_Assert as Assert;
diff --git a/client/tests/phpunit/includes/Usage/UsageLookupContractTester.php 
b/client/tests/phpunit/includes/Usage/UsageLookupContractTester.php
index 7791451..6390ea4 100644
--- a/client/tests/phpunit/includes/Usage/UsageLookupContractTester.php
+++ b/client/tests/phpunit/includes/Usage/UsageLookupContractTester.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Wikibase\Client\Tests\Usage;
 
 use PHPUnit_Framework_Assert as Assert;
diff --git a/client/tests/phpunit/includes/Usage/UsageTrackerContractTester.php 
b/client/tests/phpunit/includes/Usage/UsageTrackerContractTester.php
index 72824f7..923b48e 100644
--- a/client/tests/phpunit/includes/Usage/UsageTrackerContractTester.php
+++ b/client/tests/phpunit/includes/Usage/UsageTrackerContractTester.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Wikibase\Client\Tests\Usage;
 
 use PHPUnit_Framework_Assert as Assert;

-- 
To view, visit https://gerrit.wikimedia.org/r/176356
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Icf85ad8ed940a95ba741f2640d06ab506d563dd4
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Thiemo Mättig (WMDE) <thiemo.maet...@wikimedia.de>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to