public function testGetHash()
 {
     $diff = array();
     $instance = new CompositePropertyTableDiffIterator($diff);
     $instance->setSubject(DIWikiPage::newFromText(__METHOD__));
     $this->assertInternalType('string', $instance->getHash());
 }
 /**
  * @dataProvider diffDataProvider
  */
 public function testDiff($list, $fixedPropertyRecord, $expectedOrdered, $expectedList)
 {
     $instance = new CompositePropertyTableDiffIterator($list);
     $instance->addFixedPropertyRecord($fixedPropertyRecord[0], $fixedPropertyRecord[1]);
     $this->assertEquals($expectedOrdered, $instance->getOrderedDiffByTable());
     $this->assertEquals($expectedList, $instance->getCombinedIdListOfChangedEntities());
 }
 /**
  * @since 2.5
  *
  * @param CompositePropertyTableDiffIterator $compositePropertyTableDiffIterator
  *
  * @return null|string
  */
 public function createSlotFrom(CompositePropertyTableDiffIterator $compositePropertyTableDiffIterator)
 {
     $orderedDiffByTable = $compositePropertyTableDiffIterator->getOrderedDiffByTable();
     if ($orderedDiffByTable === array()) {
         return null;
     }
     $slot = $this->getSlot($compositePropertyTableDiffIterator);
     $this->cache->save($slot, $orderedDiffByTable);
     return $slot;
 }
 /**
  * @since 2.4
  *
  * @return array
  */
 public function getFilteredIdList()
 {
     $start = microtime(true);
     $combinedChangedEntityList = array_flip($this->compositePropertyTableDiffIterator->getCombinedIdListOfChangedEntities());
     $affiliateEntityList = array();
     $tableChangeOps = $this->compositePropertyTableDiffIterator->getTableChangeOps();
     foreach ($tableChangeOps as $tableChangeOp) {
         $this->applyFilterToTableChangeOp($tableChangeOp, $affiliateEntityList, $combinedChangedEntityList);
     }
     $filteredIdList = array_merge(array_keys($combinedChangedEntityList), array_keys($affiliateEntityList));
     wfDebugLog('smw', __METHOD__ . ' procTime (sec): ' . round(microtime(true) - $start, 6));
     return $filteredIdList;
 }
 /**
  * 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;
 }
 /**
  * @since 2.5
  *
  * @param CompositePropertyTableDiffIterator $compositePropertyTableDiffIterator
  */
 public function pushUpdatesFromPropertyTableDiff(CompositePropertyTableDiffIterator $compositePropertyTableDiffIterator)
 {
     if (!$this->searchTableUpdater->isEnabled()) {
         return;
     }
     $start = microtime(true);
     foreach ($compositePropertyTableDiffIterator->getTableChangeOps() as $tableChangeOp) {
         $this->doUpdateFromTableChangeOp($tableChangeOp);
     }
     wfDebugLog('smw', __METHOD__ . ' procTime (sec): ' . round(microtime(true) - $start, 5));
 }
 /**
  * @since 2.3
  *
  * @param CompositePropertyTableDiffIterator $compositePropertyTableDiffIterator
  */
 public function buildParserCachePurgeJobParametersFrom(CompositePropertyTableDiffIterator $compositePropertyTableDiffIterator)
 {
     if (!$this->isEnabled()) {
         return array();
     }
     return array('idlist' => $compositePropertyTableDiffIterator->getCombinedIdListOfChangedEntities());
 }
 /**
  * @since 2.3
  *
  * @param CompositePropertyTableDiffIterator $compositePropertyTableDiffIterator
  * @param array $propertyDependencyDetectionBlacklist
  *
  * @return array
  */
 public function buildParserCachePurgeJobParametersFrom(CompositePropertyTableDiffIterator $compositePropertyTableDiffIterator, array $propertyDependencyDetectionBlacklist)
 {
     if (!$this->isEnabled()) {
         return array();
     }
     $mapCombinedIdListOfChangedEntities = array_flip($compositePropertyTableDiffIterator->getCombinedIdListOfChangedEntities());
     $mapPropertyDependencyDetectionBlacklist = array_flip($propertyDependencyDetectionBlacklist);
     foreach ($compositePropertyTableDiffIterator->getFixedPropertyRecords() as $table => $record) {
         if (!isset($mapPropertyDependencyDetectionBlacklist[$record['key']])) {
             continue;
         }
         $this->removeBlacklistedPropertyReferencesFromParserCachePurgeJobChangeList($compositePropertyTableDiffIterator, $mapCombinedIdListOfChangedEntities, $table, $record);
     }
     return array('idlist' => array_keys($mapCombinedIdListOfChangedEntities));
 }