summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRoeland Jago Douma <roeland@famdouma.nl>2019-02-13 21:22:16 +0100
committerBackportbot <backportbot-noreply@rullzer.com>2019-02-14 10:27:44 +0000
commitd97adfe4b154ea9604274ab39f46b980735287e2 (patch)
treeeec6d195f8db8407157b4189893f4f176dbf1a08
parent7dbcddaa2cd29a2521de61bd268a2586751407da (diff)
downloadnextcloud-server-d97adfe4b154ea9604274ab39f46b980735287e2.tar.gz
nextcloud-server-d97adfe4b154ea9604274ab39f46b980735287e2.zip
Loop for the recent search
Else it might happen that less entries than requested are returned Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
-rw-r--r--lib/private/Files/Node/Folder.php29
1 files changed, 26 insertions, 3 deletions
diff --git a/lib/private/Files/Node/Folder.php b/lib/private/Files/Node/Folder.php
index 855515ad260..9051862eadd 100644
--- a/lib/private/Files/Node/Folder.php
+++ b/lib/private/Files/Node/Folder.php
@@ -377,8 +377,30 @@ class Folder extends Node implements \OCP\Files\Folder {
$mountMap = array_combine($storageIds, $mounts);
$folderMimetype = $mimetypeLoader->getId(FileInfo::MIMETYPE_FOLDER);
- //todo look into options of filtering path based on storage id (only search in files/ for home storage, filter by share root for shared, etc)
+ // Search in batches of 500 entries
+ $searchLimit = 500;
+ $results = [];
+ do {
+ $searchResult = $this->recentSearch($searchLimit, $offset, $storageIds, $folderMimetype);
+
+ // Exit condition if there are no more results
+ if (count($searchResult) === 0) {
+ break;
+ }
+
+ $parseResult = $this->recentParse($searchResult, $mountMap, $mimetypeLoader);
+
+ foreach ($parseResult as $result) {
+ $results[] = $result;
+ }
+
+ $offset += $searchLimit;
+ } while (count($results) < $limit);
+ return array_slice($results, 0, $limit);
+ }
+
+ private function recentSearch($limit, $offset, $storageIds, $folderMimetype) {
$builder = \OC::$server->getDatabaseConnection()->getQueryBuilder();
$query = $builder
->select('f.*')
@@ -392,9 +414,10 @@ class Folder extends Node implements \OCP\Files\Folder {
->orderBy('f.mtime', 'DESC')
->setMaxResults($limit)
->setFirstResult($offset);
+ return $query->execute()->fetchAll();
+ }
- $result = $query->execute()->fetchAll();
-
+ private function recentParse($result, $mountMap, $mimetypeLoader) {
$files = array_filter(array_map(function (array $entry) use ($mountMap, $mimetypeLoader) {
$mount = $mountMap[$entry['storage']];
$entry['internalPath'] = $entry['path'];