/** * This method is called from the `SMW::SQLStore::AfterDataUpdateComplete` hook and * removes outdated query ID's from the table if the diff contains a `delete` * entry for the _ask table. * * @since 2.3 * * @param CompositePropertyTableDiffIterator $compositePropertyTableDiffIterator */ public function pruneOutdatedTargetLinks(CompositePropertyTableDiffIterator $compositePropertyTableDiffIterator) { if (!$this->isEnabled()) { return null; } $tableName = $this->store->getPropertyTableInfoFetcher()->findTableIdForProperty(new DIProperty('_ASK')); $diff = $compositePropertyTableDiffIterator->getOrderedDiffByTable($tableName); // Remove any dependency for queries that are no longer used if (isset($diff[$tableName]['delete'])) { $deleteIdList = array(); foreach ($diff[$tableName]['delete'] as $delete) { $deleteIdList[] = $delete['o_id']; } wfDebugLog('smw', __METHOD__ . ' remove ' . implode(',', $deleteIdList) . "\n"); $this->connection->beginAtomicTransaction(__METHOD__); $this->connection->delete(SMWSQLStore3::QUERY_LINKS_TABLE, array('s_id' => $deleteIdList), __METHOD__); $this->connection->endAtomicTransaction(__METHOD__); } // Dispatch any event registered earlier during the QueryResult processing // that didn't match a sid EventHandler::getInstance()->getEventDispatcher()->dispatch('deferred.embedded.query.dep.update'); EventHandler::getInstance()->getEventDispatcher()->removeListener('deferred.embedded.query.dep.update'); return true; }
/** * This method is called from the `SMW::SQLStore::AfterDataUpdateComplete` hook and * removes outdated query ID's from the table if the diff contains a `delete` * entry for the _ask table. * * @since 2.3 * * @param CompositePropertyTableDiffIterator $compositePropertyTableDiffIterator */ public function pruneOutdatedTargetLinks(DIWikiPage $subject, CompositePropertyTableDiffIterator $compositePropertyTableDiffIterator) { if (!$this->isEnabled()) { return null; } $start = microtime(true); $tableName = $this->store->getPropertyTableInfoFetcher()->findTableIdForProperty(new DIProperty('_ASK')); $tableChangeOps = $compositePropertyTableDiffIterator->getTableChangeOps($tableName); // Remove any dependency for queries that are no longer used foreach ($tableChangeOps as $tableChangeOp) { if (!$tableChangeOp->hasChangeOp('delete')) { continue; } $deleteIdList = array(); foreach ($tableChangeOp->getFieldChangeOps('delete') as $fieldChangeOp) { $deleteIdList[] = $fieldChangeOp->get('o_id'); } $this->dependencyLinksTableUpdater->deleteDependenciesFromList($deleteIdList); } wfDebugLog('smw', __METHOD__ . ' finished on ' . $subject->getHash() . ' with procTime (sec): ' . round(microtime(true) - $start, 7)); return true; }