/**
* {@inheritDoc}
*/
public function read(Query $query)
{
$builder = $query->builder();
$queryHash = md5($builder->getSql() . '_' . serialize($builder->getParameters()));
if ($this->mapper instanceof MapperCacheInterface) {
if ($builder->getType() == 0) {
$collection = $this->mapper->getQueryFromCache($queryHash);
if ($collection) {
return $collection;
}
} else {
$this->mapper->clearQueryCache();
}
}
/*
if ($query->builder()->getType() == 0) {
$clonedQuery = clone $query->builder();
$res = $clonedQuery->getConnection()->executeQuery('EXPLAIN ' . $clonedQuery->getSQL(), $clonedQuery->getParameters(), $clonedQuery->getParameterTypes());
$res->setFetchMode(\PDO::FETCH_ASSOC);
echo '<pre>';
var_dump($queryHash);
var_dump($clonedQuery->getSQL());
var_dump($clonedQuery->getParameters());
var_dump($res->fetchAll());
echo '</pre>';
}
*/
$stmt = $builder->execute();
$stmt->setFetchMode(\PDO::FETCH_ASSOC);
$collection = $query->mapper()->collection($stmt, $query->with());
$stmt->closeCursor();
if ($this->mapper instanceof MapperCacheInterface && $builder->getType() == 0) {
$this->mapper->addQueryToCache($queryHash, $collection);
}
return $collection;
}