From cbf97a6fef3c9737a2e3c5a8593f76c8bea40258 Mon Sep 17 00:00:00 2001 From: Lucas Werkmeister Date: Fri, 21 Apr 2017 19:05:42 +0200 Subject: [PATCH] Search entities in all entity namespaces MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Instead of assuming that all entities are in namespace 0 (which is only true in a Wikidata-like installation, but not in a default Wikibase installation, and even then only for items, not properties), use all entity namespaces from the local configuration. (Use array_values to make the keys numeric to make sure the database wrapper doesn’t try to interpret the string keys ('item', 'property').) Also, if we can’t find the entity, throw an exception instead of returning count 0: it’s better to fail the import than to duplicate statements. Fixes #22. --- src/PagePropsStatementCountLookup.php | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/PagePropsStatementCountLookup.php b/src/PagePropsStatementCountLookup.php index 3799f46..7a0f2ca 100644 --- a/src/PagePropsStatementCountLookup.php +++ b/src/PagePropsStatementCountLookup.php @@ -4,6 +4,7 @@ use LoadBalancer; use Wikibase\DataModel\Entity\EntityId; +use Wikibase\Repo\WikibaseRepo; class PagePropsStatementCountLookup implements StatementsCountLookup { @@ -14,13 +15,15 @@ public function __construct( LoadBalancer $loadBalancer ) { } public function getStatementCount( EntityId $entityId ) { + $wikibaseRepo = WikibaseRepo::getDefaultInstance(); + $db = $this->loadBalancer->getConnection( DB_MASTER ); $res = $db->selectRow( array( 'page_props', 'page' ), array( 'pp_value' ), array( - 'page_namespace' => 0, + 'page_namespace' => array_values( $wikibaseRepo->getEntityNamespaces() ), 'page_title' => $entityId->getSerialization(), 'pp_propname' => 'wb-claims' ), @@ -32,7 +35,7 @@ public function getStatementCount( EntityId $entityId ) { $this->loadBalancer->closeConnection( $db ); if ( $res === false ) { - return 0; + throw new Exception( "Could not find entity in page_props!" ); } return (int)$res->pp_value;