Skip to content

Importing existing entities re-adds statements #22

@lucaswerkmeister

Description

@lucaswerkmeister

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 ].

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions