protected function execute(DbalCollection $collection, IEntity $parent)
{
$builder = $collection->getQueryBuilder();
$preloadIterator = $parent->getPreloadContainer();
$values = $preloadIterator ? $preloadIterator->getPreloadValues('id') : [$parent->getValue('id')];
$cacheKey = $this->calculateCacheKey($builder, $values);
$data =& $this->cacheEntityIterator[$cacheKey];
if ($data !== null) {
return $data;
}
if ($builder->hasLimitOffsetClause() && count($values) > 1) {
$data = $this->fetchByTwoPassStrategy($builder, $values);
} else {
$data = $this->fetchByOnePassStrategy($builder, stripos($cacheKey, 'JOIN') !== false, $values);
}
return $data;
}