From 05ab288051547c08f1a05d7bbb9b2ea3b23ce727 Mon Sep 17 00:00:00 2001 From: ornicar Date: Mon, 9 May 2011 10:56:27 -0700 Subject: [PATCH] Move more inconsistent code to mongodb and orm implementations --- Provider/AbstractDoctrineProvider.php | 13 ++++++++++++- Provider/DoctrineMongoDBProvider.php | 14 ++++++++++++++ Provider/DoctrineORMProvider.php | 17 +++++++++++++++++ 3 files changed, 43 insertions(+), 1 deletion(-) diff --git a/Provider/AbstractDoctrineProvider.php b/Provider/AbstractDoctrineProvider.php index a9e463a..58c9051 100644 --- a/Provider/AbstractDoctrineProvider.php +++ b/Provider/AbstractDoctrineProvider.php @@ -44,7 +44,7 @@ abstract class AbstractDoctrineProvider implements ProviderInterface $stepStartTime = microtime(true); $documents = array(); - $objects = $queryBuilder->limit($this->options['batch_size'])->skip($offset)->getQuery()->execute()->toArray(); + $objects = $this->fetchSlice($queryBuilder, $this->options['batch_size'], $offset); foreach ($objects as $object) { try { @@ -69,10 +69,21 @@ abstract class AbstractDoctrineProvider implements ProviderInterface /** * Counts the objects of a query builder * + * @param queryBuilder * @return int **/ protected abstract function countObjects($queryBuilder); + /** + * Fetches a slice of objects + * + * @param queryBuilder + * @param int limit + * @param int offset + * @return array of objects + **/ + protected abstract function fetchSlice($queryBuilder, $limit, $offset); + /** * Creates the query buider used to fetch the documents to index * diff --git a/Provider/DoctrineMongoDBProvider.php b/Provider/DoctrineMongoDBProvider.php index f7314fa..f14fe1f 100644 --- a/Provider/DoctrineMongoDBProvider.php +++ b/Provider/DoctrineMongoDBProvider.php @@ -7,10 +7,24 @@ class DoctrineMongoDBProvider extends AbstractDoctrineProvider /** * Counts the objects of a query builder * + * @param queryBuilder * @return int **/ protected function countObjects($queryBuilder) { return $queryBuilder->getQuery()->count(); } + + /** + * Fetches a slice of objects + * + * @param queryBuilder + * @param int limit + * @param int offset + * @return array of objects + **/ + protected function fetchSlice($queryBuilder, $limit, $offset) + { + return $queryBuilder->limit($limit)->skip($offset)->getQuery()->execute()->toArray(); + } } diff --git a/Provider/DoctrineORMProvider.php b/Provider/DoctrineORMProvider.php index c9614fe..2a42efb 100644 --- a/Provider/DoctrineORMProvider.php +++ b/Provider/DoctrineORMProvider.php @@ -7,10 +7,27 @@ class DoctrineORMProvider extends AbstractDoctrineProvider /** * Counts the objects of a query builder * + * @param queryBuilder * @return int **/ protected function countObjects($queryBuilder) { return $queryBuilder->count()->getQuery()->execute(); } + + /** + * Fetches a slice of objects + * + * @param queryBuilder + * @param int limit + * @param int offset + * @return array of objects + **/ + protected function fetchSlice($queryBuilder, $limit, $offset) + { + $queryBuilder->setFirstResult($offset); + $queryBuilder->setMaxResults($limit); + + return $queryBuilder->getQuery()->getArrayResult(); + } }