From 384eed354f86af203b4a45ad260a53a6de0916af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= Date: Tue, 22 Nov 2016 21:58:42 +0100 Subject: [PATCH] fix it using lower, can use a function based index --- lib/private/DB/AdapterOCI8.php | 2 +- .../OCIExpressionBuilder.php | 2 +- tests/lib/Files/Cache/CacheTest.php | 24 +++++++++---------- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/lib/private/DB/AdapterOCI8.php b/lib/private/DB/AdapterOCI8.php index 4660584e5fe7..e2ea8872805f 100644 --- a/lib/private/DB/AdapterOCI8.php +++ b/lib/private/DB/AdapterOCI8.php @@ -40,7 +40,7 @@ public function lastInsertId($table) { public function fixupStatement($statement) { $statement = \preg_replace('( LIKE \?)', '$0 ESCAPE \'\\\'', $statement); - $statement = \preg_replace('/`(\w+)` ILIKE \?/', 'REGEXP_LIKE(`$1`, \'^\' || REPLACE(?, \'%\', \'.*\') || \'$\', \'i\')', $statement); + $statement = \preg_replace('/`(\w+)` ILIKE \?/', "LOWER(`$1`) LIKE LOWER(?) ESCAPE '\\' -- \\'' \n", $statement); // FIXME workaround for singletick matching with regexes in SQLParserUtils::getUnquotedStatementFragments $statement = \str_replace('`', '"', $statement); $statement = \str_ireplace('NOW()', 'CURRENT_TIMESTAMP', $statement); $statement = \str_ireplace('UNIX_TIMESTAMP()', self::UNIX_TIMESTAMP_REPLACEMENT, $statement); diff --git a/lib/private/DB/QueryBuilder/ExpressionBuilder/OCIExpressionBuilder.php b/lib/private/DB/QueryBuilder/ExpressionBuilder/OCIExpressionBuilder.php index 05f8926040c4..f210a5658d5a 100644 --- a/lib/private/DB/QueryBuilder/ExpressionBuilder/OCIExpressionBuilder.php +++ b/lib/private/DB/QueryBuilder/ExpressionBuilder/OCIExpressionBuilder.php @@ -157,7 +157,7 @@ public function castColumn($column, $type) { public function iLike($x, $y, $type = null) { $x = $this->helper->quoteColumnName($x); $y = $this->helper->quoteColumnName($y); - return new QueryFunction('REGEXP_LIKE('.$x.', \'^\' || REPLACE('.$y.', \'%\', \'.*\') || \'$\', \'i\')'); + return new QueryFunction("LOWER($x) LIKE LOWER($y) ESCAPE '\\' -- \\'' \n"); // FIXME workaround for singletick matching with regexes in SQLParserUtils::getUnquotedStatementFragments } /** diff --git a/tests/lib/Files/Cache/CacheTest.php b/tests/lib/Files/Cache/CacheTest.php index 5b6a5ec09ebc..8c280e849b23 100644 --- a/tests/lib/Files/Cache/CacheTest.php +++ b/tests/lib/Files/Cache/CacheTest.php @@ -304,23 +304,23 @@ function testSearch() { $this->cache->put($file3, $fileData['foo']); $this->cache->put($file4, $fileData['f[o.o%ba-r']); - $this->assertCount(2, $this->cache->search('%foo%')); - $this->assertCount(1, $this->cache->search('foo')); - $this->assertCount(1, $this->cache->search('%folder%')); - $this->assertCount(1, $this->cache->search('folder%')); - $this->assertCount(4, $this->cache->search('%')); + $this->assertCount(2, $this->cache->search('%foo%'), "expected 2 when searching for '%foo%'"); + $this->assertCount(1, $this->cache->search('foo'), "expected 1 when searching for 'foo'"); + $this->assertCount(1, $this->cache->search('%folder%'), "expected 1 when searching for '%folder%'"); + $this->assertCount(1, $this->cache->search('folder%'), "expected 1 when searching for 'folder%'"); + $this->assertCount(4, $this->cache->search('%'), "expected 4 when searching for '%'"); // case insensitive search should match the same files - $this->assertCount(2, $this->cache->search('%Foo%')); - $this->assertCount(1, $this->cache->search('Foo')); - $this->assertCount(1, $this->cache->search('%Folder%')); - $this->assertCount(1, $this->cache->search('Folder%')); + $this->assertCount(2, $this->cache->search('%Foo%'), "expected 2 when searching for '%Foo%'"); + $this->assertCount(1, $this->cache->search('Foo'), "expected 1 when searching for 'Foo'"); + $this->assertCount(1, $this->cache->search('%Folder%'), "expected 1 when searching for '%Folder%'"); + $this->assertCount(1, $this->cache->search('Folder%'), "expected 1 when searching for 'Folder%'"); - $this->assertCount(4, $this->cache->searchByMime('foo')); - $this->assertCount(3, $this->cache->searchByMime('foo/file')); + $this->assertCount(4, $this->cache->searchByMime('foo'), "expected 4 when searching for mime 'foo'"); + $this->assertCount(3, $this->cache->searchByMime('foo/file'), "expected 3 when searching for mime 'foo/file'"); // oracle uses regexp, - $this->assertCount(1, $this->cache->search('f[o.o%ba-r')); + $this->assertCount(1, $this->cache->search('f[o.o%ba-r'), "expected 1 when searching for 'f[o.o%ba-r'"); } function testSearchByTag() {