diff options
author | Thomas Müller <thomas.mueller@tmit.eu> | 2016-01-27 09:36:21 +0100 |
---|---|---|
committer | Thomas Müller <thomas.mueller@tmit.eu> | 2016-01-27 09:36:21 +0100 |
commit | c274f03e1287b735d732396fb7d668e6b4099429 (patch) | |
tree | 98e4cc58222efbed69fd6ba700914b068697902a /tests | |
parent | 0fffc3a0de0546eb17a338798f097adcd6939150 (diff) | |
parent | 01164e89a4fb18d45b63bc33236cf979fabaafd8 (diff) | |
download | nextcloud-server-c274f03e1287b735d732396fb7d668e6b4099429.tar.gz nextcloud-server-c274f03e1287b735d732396fb7d668e6b4099429.zip |
Merge pull request #21906 from owncloud/querybuilder-clob-comparison
Querybuilder clob comparison
Diffstat (limited to 'tests')
-rw-r--r-- | tests/lib/db/querybuilder/expressionbuildertest.php | 90 |
1 files changed, 86 insertions, 4 deletions
diff --git a/tests/lib/db/querybuilder/expressionbuildertest.php b/tests/lib/db/querybuilder/expressionbuildertest.php index 0563ff92334..8310c4adf68 100644 --- a/tests/lib/db/querybuilder/expressionbuildertest.php +++ b/tests/lib/db/querybuilder/expressionbuildertest.php @@ -23,6 +23,8 @@ namespace Test\DB\QueryBuilder; use Doctrine\DBAL\Query\Expression\ExpressionBuilder as DoctrineExpressionBuilder; use OC\DB\QueryBuilder\ExpressionBuilder; +use OCP\DB\QueryBuilder\IQueryBuilder; +use Test\TestCase; /** * Class ExpressionBuilderTest @@ -31,21 +33,24 @@ use OC\DB\QueryBuilder\ExpressionBuilder; * * @package Test\DB\QueryBuilder */ -class ExpressionBuilderTest extends \Test\TestCase { +class ExpressionBuilderTest extends TestCase { /** @var ExpressionBuilder */ protected $expressionBuilder; /** @var DoctrineExpressionBuilder */ protected $doctrineExpressionBuilder; + /** @var \Doctrine\DBAL\Connection|\OCP\IDBConnection */ + protected $connection; + protected function setUp() { parent::setUp(); - $connection = \OC::$server->getDatabaseConnection(); + $this->connection = \OC::$server->getDatabaseConnection(); - $this->expressionBuilder = new ExpressionBuilder($connection); + $this->expressionBuilder = new ExpressionBuilder($this->connection); - $this->doctrineExpressionBuilder = new DoctrineExpressionBuilder($connection); + $this->doctrineExpressionBuilder = new DoctrineExpressionBuilder($this->connection); } public function dataComparison() { @@ -342,4 +347,81 @@ class ExpressionBuilderTest extends \Test\TestCase { $actual->__toString() ); } + + public function dataClobComparisons() { + return [ + ['eq', '5', IQueryBuilder::PARAM_STR, false, 3], + ['eq', '5', IQueryBuilder::PARAM_STR, true, 1], + ['neq', '5', IQueryBuilder::PARAM_STR, false, 6], + ['neq', '5', IQueryBuilder::PARAM_STR, true, 4], + ['lt', '5', IQueryBuilder::PARAM_STR, false, 3], + ['lt', '5', IQueryBuilder::PARAM_STR, true, 1], + ['lte', '5', IQueryBuilder::PARAM_STR, false, 6], + ['lte', '5', IQueryBuilder::PARAM_STR, true, 4], + ['gt', '5', IQueryBuilder::PARAM_STR, false, 3], + ['gt', '5', IQueryBuilder::PARAM_STR, true, 1], + ['gte', '5', IQueryBuilder::PARAM_STR, false, 6], + ['gte', '5', IQueryBuilder::PARAM_STR, true, 4], + ['like', '%5%', IQueryBuilder::PARAM_STR, false, 3], + ['like', '%5%', IQueryBuilder::PARAM_STR, true, 1], + ['notLike', '%5%', IQueryBuilder::PARAM_STR, false, 6], + ['notLike', '%5%', IQueryBuilder::PARAM_STR, true, 4], + ['in', ['5'], IQueryBuilder::PARAM_STR_ARRAY, false, 3], + ['in', ['5'], IQueryBuilder::PARAM_STR_ARRAY, true, 1], + ['notIn', ['5'], IQueryBuilder::PARAM_STR_ARRAY, false, 6], + ['notIn', ['5'], IQueryBuilder::PARAM_STR_ARRAY, true, 4], + ]; + } + + /** + * @dataProvider dataClobComparisons + * @param string $function + * @param mixed $value + * @param mixed $type + * @param bool $compareKeyToValue + * @param int $expected + */ + public function testClobComparisons($function, $value, $type, $compareKeyToValue, $expected) { + $appId = $this->getUniqueID('testing'); + $this->createConfig($appId, 1, 4); + $this->createConfig($appId, 2, 5); + $this->createConfig($appId, 3, 6); + $this->createConfig($appId, 4, 4); + $this->createConfig($appId, 5, 5); + $this->createConfig($appId, 6, 6); + $this->createConfig($appId, 7, 4); + $this->createConfig($appId, 8, 5); + $this->createConfig($appId, 9, 6); + + $query = $this->connection->getQueryBuilder(); + $query->select($query->createFunction('COUNT(*) AS `count`')) + ->from('appconfig') + ->where($query->expr()->eq('appid', $query->createNamedParameter($appId))) + ->andWhere(call_user_func([$query->expr(), $function], 'configvalue', $query->createNamedParameter($value, $type), IQueryBuilder::PARAM_STR)); + + if ($compareKeyToValue) { + $query->andWhere(call_user_func([$query->expr(), $function], 'configkey', 'configvalue', IQueryBuilder::PARAM_STR)); + } + + $result = $query->execute(); + + $this->assertEquals(['count' => $expected], $result->fetch()); + $result->closeCursor(); + + $query = $this->connection->getQueryBuilder(); + $query->delete('appconfig') + ->where($query->expr()->eq('appid', $query->createNamedParameter($appId))) + ->execute(); + } + + protected function createConfig($appId, $key, $value) { + $query = $this->connection->getQueryBuilder(); + $query->insert('appconfig') + ->values([ + 'appid' => $query->createNamedParameter($appId), + 'configkey' => $query->createNamedParameter((string) $key), + 'configvalue' => $query->createNamedParameter((string) $value), + ]) + ->execute(); + } } |