/** * @param string $query * @param array $parameters * * @return array */ public function fetchCol($query, array $parameters = array()) { $parameters = $this->parameterTransformer->transform($parameters); $this->stopWatch->start('query', 'database'); $result = $this->reader->fetchCol($query, $parameters); $event = $this->stopWatch->stop('query'); $this->log($query, $parameters, $event, 'fetch', 'col'); return $result; }
/** * @param Fetcher $fetcher * @return Fetcher */ public function getIdsByFetcher(Fetcher $fetcher) { $query = $this->getQuery($fetcher); list($filterInReq, $filterToParameter) = $this->queryBuilder->buildFilters($fetcher); $sortInReq = $this->queryBuilder->buildSort($fetcher); $sortWrappingQuery = implode(', ', array_merge(array("DISTINCT (lastsub.id) AS id"), array_keys($fetcher->getSorts()))); $limit = $this->queryBuilder->buildLimit($fetcher); $isRandom = $fetcher->isRandomSort(); if ($isRandom) { $sql = <<<SQL SELECT id FROM ( SELECT DISTINCT ON (id) id FROM ( SELECT sub.* FROM ({$query}) AS sub WHERE ({$filterInReq}) ) as lastsub ORDER BY id ASC ) AS lastsub ORDER BY RANDOM() ASC {$limit} SQL; } else { $sql = <<<SQL SELECT {$sortWrappingQuery} FROM ( SELECT sub.* FROM ({$query}) AS sub WHERE {$filterInReq} ) AS lastsub ORDER BY {$sortInReq} {$limit} SQL; } return $this->db->fetchCol($sql, $filterToParameter); }
/** * @param \Berthe\Fetcher $fetcher * @return \Berthe\Fetcher */ public function selectByFetcher(\Berthe\Fetcher $fetcher) { list($sql, $filterToParameter) = $this->getSqlByFetcher($fetcher); $resultSet = $this->db->fetchCol($sql, $filterToParameter); return $resultSet; }