-
Notifications
You must be signed in to change notification settings - Fork 18
Description
Depending on local setup, if you re-import entities that you’ve already imported before, the importer will add all the statements again, leaving you with duplicate statements.
This query in PagePropsStatementCountLookup::getStatementCount is the culprit:
$res = $db->selectRow(
array( 'page_props', 'page' ),
array( 'pp_value' ),
array(
'page_namespace' => 0, // <-- HERE
'page_title' => $entityId->getSerialization(),
'pp_propname' => 'wb-claims'
),
__METHOD__,
array(),
array( 'page' => array( 'LEFT JOIN', 'page_id=pp_page' ) )
);In a default Wikibase setup, Item is namespace #120, and Property is namespace #122 (see Wikibase/repo/config/Wikibase.example.php), so the query returns no result, which is interpreted as a statement count of 0:
if ( $res === false ) {
return 0;
}Even if you configure your Wikibase to put items in the main namespace, as on Wikidata, I think the importer would still duplicate statements on properties.
I’m not sure what the best way to solve this is, but perhaps it would be a good idea to throw an exception instead of returning 0 if the query returns no results: if we can’t find the entity, there must be something wrong, right?
Workaround: change the query to select, e. g., 'page_namespace' => [ 120, 122 ].