From fee818f49347e332aa59bdbfc82847d7964cc653 Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Tue, 21 Feb 2017 14:48:00 +0100 Subject: [PATCH] Add tests for query builder (i)like Signed-off-by: Robin Appelman --- lib/private/Files/Cache/Cache.php | 2 +- .../QueryBuilder/ExpressionBuilderDBTest.php | 106 ++++++++++++++++++ 2 files changed, 107 insertions(+), 1 deletion(-) create mode 100644 tests/lib/DB/QueryBuilder/ExpressionBuilderDBTest.php diff --git a/lib/private/Files/Cache/Cache.php b/lib/private/Files/Cache/Cache.php index 7b25041551..ce3e38dd46 100644 --- a/lib/private/Files/Cache/Cache.php +++ b/lib/private/Files/Cache/Cache.php @@ -543,7 +543,7 @@ class Cache implements ICache { try { $query->execute(); - } catch (\Exception $e) { + } catch (\OC\DatabaseException $e) { $this->connection->rollBack(); throw $e; } diff --git a/tests/lib/DB/QueryBuilder/ExpressionBuilderDBTest.php b/tests/lib/DB/QueryBuilder/ExpressionBuilderDBTest.php new file mode 100644 index 0000000000..c71e83f5fd --- /dev/null +++ b/tests/lib/DB/QueryBuilder/ExpressionBuilderDBTest.php @@ -0,0 +1,106 @@ + + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ + +namespace Test\DB\QueryBuilder; + +use OC\DB\QueryBuilder\Literal; +use Test\TestCase; + +/** + * @group DB + */ +class ExpressionBuilderDBTest extends TestCase { + /** @var \Doctrine\DBAL\Connection|\OCP\IDBConnection */ + protected $connection; + + protected function setUp() { + parent::setUp(); + + $this->connection = \OC::$server->getDatabaseConnection(); + } + + public function likeProvider() { + $connection = \OC::$server->getDatabaseConnection(); + + return [ + ['foo', 'bar', false], + ['foo', 'foo', true], + ['foo', 'f%', true], + ['foo', '%o', true], + ['foo', '%', true], + ['foo', 'fo_', true], + ['foo', 'foo_', false], + ['foo', $connection->escapeLikeParameter('fo_'), false], + ['foo', $connection->escapeLikeParameter('f%'), false], + ]; + } + + /** + * @dataProvider likeProvider + * + * @param string $param1 + * @param string $param2 + * @param boolean $match + */ + public function testLike($param1, $param2, $match) { + $query = $this->connection->getQueryBuilder(); + + $query->select(new Literal('1')) + ->from('users') + ->where($query->expr()->like($query->createNamedParameter($param1), $query->createNamedParameter($param2))); + + $this->assertEquals($match, $query->execute()->fetchColumn()); + } + + public function ilikeProvider() { + $connection = \OC::$server->getDatabaseConnection(); + + return [ + ['foo', 'bar', false], + ['foo', 'foo', true], + ['foo', 'Foo', true], + ['foo', 'f%', true], + ['foo', '%o', true], + ['foo', '%', true], + ['foo', 'fo_', true], + ['foo', 'foo_', false], + ['foo', $connection->escapeLikeParameter('fo_'), false], + ['foo', $connection->escapeLikeParameter('f%'), false], + ]; + } + + /** + * @dataProvider ilikeProvider + * + * @param string $param1 + * @param string $param2 + * @param boolean $match + */ + public function testILike($param1, $param2, $match) { + $query = $this->connection->getQueryBuilder(); + + $query->select(new Literal('1')) + ->from('users') + ->where($query->expr()->iLike($query->createNamedParameter($param1), $query->createNamedParameter($param2))); + + $this->assertEquals($match, $query->execute()->fetchColumn()); + } +}