/**
  * Fetch all subobjects for a given subject using a lazy-mapping iterator
  * in order to only resolve one subobject per iteration step.
  *
  * @since 2.5
  *
  * @param DIWikiPage $subject
  *
  * @return MappingIterator
  */
 private function newMappingIterator(DIWikiPage $subject)
 {
     $callback = function ($row) use($subject) {
         // #1955
         if ($subject->getNamespace() === SMW_NS_PROPERTY) {
             $property = new DIProperty($subject->getDBkey());
             $subobject = $property->getCanonicalDiWikiPage($row->smw_subobject);
         } else {
             $subobject = new DIWikiPage($subject->getDBkey(), $subject->getNamespace(), $subject->getInterwiki(), $row->smw_subobject);
         }
         $subobject->setSortKey($row->smw_sortkey);
         $subobject->setId($row->smw_id);
         return $subobject;
     };
     return $this->iteratorFactory->newMappingIterator($this->newResultIterator($subject), $callback);
 }