Let the SQL server filter notes
authorChristian Weiske <cweiske@cweiske.de>
Fri, 18 Sep 2015 21:14:50 +0000 (23:14 +0200)
committerChristian Weiske <cweiske@cweiske.de>
Fri, 18 Sep 2015 21:14:50 +0000 (23:14 +0200)
lib/notestorage.php

index 93311e4a4b877f6eadf431e03921c6d90a361f5a..27bb7025770f8327ea1059887978fc286d0a2da2 100644 (file)
@@ -397,15 +397,18 @@ class NoteStorage
     public function loadNotesOverview(
         $since = null, $rawtag = null, $includeDate = false
     ) {
-        $result = \OC_DB::executeAudited(
-            'SELECT `note_guid`, `note_title`, `note_last_sync_revision`, `note_tags`'
+        $sql = 'SELECT `note_guid`, `note_title`'
+            . ', `note_last_sync_revision`, `note_tags`'
             . ', `note_last_change_date`'
             . ' FROM `*PREFIX*grauphel_notes`'
-            . ' WHERE note_user = ?',
-            array($this->username)
-        );
+            . ' WHERE note_user = ?';
+        $sqlData = array($this->username);
+
+        if ($since !== null) {
+            $sqlData[] = $since;
+            $sql .= ' AND note_last_sync_revision > ?';
+        }
 
-        $notes = array();
         if ($rawtag == 'grauphel:special:all') {
             $rawtag = null;
         } else if ($rawtag == 'grauphel:special:untagged') {
@@ -413,13 +416,14 @@ class NoteStorage
         } else {
             $jsRawtag = json_encode($rawtag);
         }
+        if ($rawtag !== null) {
+            $sqlData[] = '%' . $jsRawtag . '%';
+            $sql .= ' AND note_tags LIKE ?';
+        }
+
+        $result = \OC_DB::executeAudited($sql, $sqlData);
+        $notes = array();
         while ($row = $result->fetchRow()) {
-            if ($since !== null && $row['note_last_sync_revision'] <= $since) {
-                continue;
-            }
-            if ($rawtag !== null && strpos($row['note_tags'], $jsRawtag) === false) {
-                continue;
-            }
             $note = array(
                 'guid' => $row['note_guid'],
                 'ref'  => array(