summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorThomas Müller <thomas.mueller@tmit.eu>2016-01-27 09:36:21 +0100
committerThomas Müller <thomas.mueller@tmit.eu>2016-01-27 09:36:21 +0100
commitc274f03e1287b735d732396fb7d668e6b4099429 (patch)
tree98e4cc58222efbed69fd6ba700914b068697902a /tests
parent0fffc3a0de0546eb17a338798f097adcd6939150 (diff)
parent01164e89a4fb18d45b63bc33236cf979fabaafd8 (diff)
downloadnextcloud-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.php90
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();
+ }
}