/** * 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); }