/**
  * Delete all semantic data stored for the given subject. Used for
  * update purposes. Handles Subobjects recursively
  *
  * @param $subject SMWDIWikiPage the data of which is deleted
  */
 public function deleteSemanticData(SMWDIWikiPage $subject)
 {
     $db = wfGetDB(DB_MASTER);
     $id = $this->store->smwIds->getSMWPageID($subject->getDBkey(), $subject->getNamespace(), $subject->getInterwiki(), $subject->getSubobjectName(), false, true);
     if ($id == 0) {
         // not (directly) used anywhere yet, may be a redirect but we do not care here
         wfRunHooks('smwDeleteSemanticData', array($subject));
         return;
     }
     //get oldData for diffing and updating property counts
     $oldData = $this->store->getSemanticData($subject);
     $this->doDiffandUpdateCount($oldData);
     $oldHashes = $this->store->smwIds->getPropertyTableHashes($id);
     foreach (SMWSQLStore3::getPropertyTables() as $tableId => $tableDeclaration) {
         $tableName = $tableDeclaration->name;
         if (array_key_exists($tableName, $oldHashes)) {
             $this->deleteTableSemanticData($id, $tableDeclaration);
         }
     }
     if ($subject->getSubobjectName() !== '') {
         wfRunHooks('smwDeleteSemanticData', array($subject));
         return;
         // Subobjects don't have subsubobjects
     }
     // also find subobjects used by this ID ...
     $oldSubobjects = $this->getSubobjects($subject);
     // ... and delete their data as well recursively
     foreach ($oldSubobjects as $subobject) {
         $this->deleteSemanticData($subobject);
     }
     //TODO: delete all unused subobjects
     wfRunHooks('smwDeleteSemanticData', array($subject));
 }
 private function addSubSemanticDataToInternalCache(DIProperty $property)
 {
     foreach ($this->getPropertyValues($property) as $value) {
         if ($value instanceof DIWikiPage && $value->getSubobjectName() !== '' && !$this->hasSubSemanticData($value->getSubobjectName())) {
             $this->addSubSemanticData($this->store->getSemanticData($value));
         }
     }
 }