]> source.dussan.org Git - nextcloud-server.git/commitdiff
make search case insensitive on postgres and oracle
authorJörn Friedrich Dreyer <jfd@butonic.de>
Thu, 3 Jul 2014 17:01:00 +0000 (19:01 +0200)
committerJörn Friedrich Dreyer <jfd@butonic.de>
Thu, 3 Jul 2014 17:01:00 +0000 (19:01 +0200)
lib/private/files/cache/cache.php
tests/lib/files/cache/cache.php

index 48c57e2e439dd7e59c5968f8938d735866e01acf..72af474adf8a22892906b08c627e2ffffee5aafe 100644 (file)
@@ -458,9 +458,27 @@ class Cache {
                // normalize pattern
                $pattern = $this->normalize($pattern);
 
-               $sql = 'SELECT `fileid`, `storage`, `path`, `parent`, `name`, `mimetype`, `mimepart`, `size`, `mtime`, `encrypted`, `unencrypted_size`, `etag`, `permissions`
-                               FROM `*PREFIX*filecache` WHERE `name` LIKE ? AND `storage` = ?';
-               $result = \OC_DB::executeAudited($sql, array($pattern, $this->getNumericStorageId()));
+
+               $sql = '
+                       SELECT `fileid`, `storage`, `path`, `parent`, `name`,
+                               `mimetype`, `mimepart`, `size`, `mtime`, `encrypted`,
+                               `unencrypted_size`, `etag`, `permissions`
+                       FROM `*PREFIX*filecache`
+                       WHERE `storage` = ? AND ';
+               $dbtype = \OC_Config::getValue( 'dbtype', 'sqlite' );
+               if($dbtype === 'oci') {
+                       //remove starting and ending % from the pattern
+                       $pattern = '^'.str_replace('%', '.*', $pattern).'$';
+                       $sql .= 'REGEXP_LIKE(`name`, ?, \'i\')';
+               } else if($dbtype === 'pgsql') {
+                       $sql .= '`name` ILIKE ?';
+               } else {
+                       $sql .= '`name` LIKE ?';
+               }
+               $result = \OC_DB::executeAudited($sql,
+                       array($this->getNumericStorageId(), $pattern)
+               );
+
                $files = array();
                while ($row = $result->fetchRow()) {
                        $row['mimetype'] = $this->getMimetype($row['mimetype']);
index 8ed2ecabd981fbbff383917263d0c1196b13407a..bf17f7a1620ec74b1242d21b9cebd235505ac61f 100644 (file)
@@ -239,6 +239,12 @@ class Cache extends \PHPUnit_Framework_TestCase {
                $this->assertEquals(1, count($this->cache->search('folder%')));
                $this->assertEquals(3, count($this->cache->search('%')));
 
+               // case insensitive search should match the same files
+               $this->assertEquals(2, count($this->cache->search('%Foo%')));
+               $this->assertEquals(1, count($this->cache->search('Foo')));
+               $this->assertEquals(1, count($this->cache->search('%Folder%')));
+               $this->assertEquals(1, count($this->cache->search('Folder%')));
+
                $this->assertEquals(3, count($this->cache->searchByMime('foo')));
                $this->assertEquals(2, count($this->cache->searchByMime('foo/file')));
        }