diff options
Diffstat (limited to 'tests/lib/db/querybuilder')
-rw-r--r-- | tests/lib/db/querybuilder/expressionbuildertest.php | 427 | ||||
-rw-r--r-- | tests/lib/db/querybuilder/querybuildertest.php | 1203 | ||||
-rw-r--r-- | tests/lib/db/querybuilder/quotehelpertest.php | 145 |
3 files changed, 0 insertions, 1775 deletions
diff --git a/tests/lib/db/querybuilder/expressionbuildertest.php b/tests/lib/db/querybuilder/expressionbuildertest.php deleted file mode 100644 index 4122f300c86..00000000000 --- a/tests/lib/db/querybuilder/expressionbuildertest.php +++ /dev/null @@ -1,427 +0,0 @@ -<?php -/** - * @author Joas Schilling <nickvergessen@owncloud.com> - * - * @copyright Copyright (c) 2015, ownCloud, Inc. - * @license AGPL-3.0 - * - * This code is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License, version 3, - * as published by the Free Software Foundation. - * - * 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, version 3, - * along with this program. If not, see <http://www.gnu.org/licenses/> - * - */ - -namespace Test\DB\QueryBuilder; - -use Doctrine\DBAL\Query\Expression\ExpressionBuilder as DoctrineExpressionBuilder; -use OC\DB\QueryBuilder\ExpressionBuilder\ExpressionBuilder; -use OCP\DB\QueryBuilder\IQueryBuilder; -use Test\TestCase; - -/** - * Class ExpressionBuilderTest - * - * @group DB - * - * @package Test\DB\QueryBuilder - */ -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(); - - $this->connection = \OC::$server->getDatabaseConnection(); - - $this->expressionBuilder = new ExpressionBuilder($this->connection); - - $this->doctrineExpressionBuilder = new DoctrineExpressionBuilder($this->connection); - } - - public function dataComparison() { - $valueSets = $this->dataComparisons(); - $comparisonOperators = ['=', '<>', '<', '>', '<=', '>=']; - - $testSets = []; - foreach ($comparisonOperators as $operator) { - foreach ($valueSets as $values) { - $testSets[] = array_merge([$operator], $values); - } - } - return $testSets; - } - - /** - * @dataProvider dataComparison - * - * @param string $comparison - * @param mixed $input1 - * @param bool $isInput1Literal - * @param mixed $input2 - * @param bool $isInput2Literal - */ - public function testComparison($comparison, $input1, $isInput1Literal, $input2, $isInput2Literal) { - list($doctrineInput1, $ocInput1) = $this->helpWithLiteral($input1, $isInput1Literal); - list($doctrineInput2, $ocInput2) = $this->helpWithLiteral($input2, $isInput2Literal); - - $this->assertEquals( - $this->doctrineExpressionBuilder->comparison($doctrineInput1, $comparison, $doctrineInput2), - $this->expressionBuilder->comparison($ocInput1, $comparison, $ocInput2) - ); - } - - public function dataComparisons() { - return [ - ['value', false, 'value', false], - ['value', false, 'value', true], - ['value', true, 'value', false], - ['value', true, 'value', true], - ]; - } - - /** - * @dataProvider dataComparisons - * - * @param mixed $input1 - * @param bool $isInput1Literal - * @param mixed $input2 - * @param bool $isInput2Literal - */ - public function testEquals($input1, $isInput1Literal, $input2, $isInput2Literal) { - list($doctrineInput1, $ocInput1) = $this->helpWithLiteral($input1, $isInput1Literal); - list($doctrineInput2, $ocInput2) = $this->helpWithLiteral($input2, $isInput2Literal); - - $this->assertEquals( - $this->doctrineExpressionBuilder->eq($doctrineInput1, $doctrineInput2), - $this->expressionBuilder->eq($ocInput1, $ocInput2) - ); - } - - /** - * @dataProvider dataComparisons - * - * @param mixed $input1 - * @param bool $isInput1Literal - * @param mixed $input2 - * @param bool $isInput2Literal - */ - public function testNotEquals($input1, $isInput1Literal, $input2, $isInput2Literal) { - list($doctrineInput1, $ocInput1) = $this->helpWithLiteral($input1, $isInput1Literal); - list($doctrineInput2, $ocInput2) = $this->helpWithLiteral($input2, $isInput2Literal); - - $this->assertEquals( - $this->doctrineExpressionBuilder->neq($doctrineInput1, $doctrineInput2), - $this->expressionBuilder->neq($ocInput1, $ocInput2) - ); - } - - /** - * @dataProvider dataComparisons - * - * @param mixed $input1 - * @param bool $isInput1Literal - * @param mixed $input2 - * @param bool $isInput2Literal - */ - public function testLowerThan($input1, $isInput1Literal, $input2, $isInput2Literal) { - list($doctrineInput1, $ocInput1) = $this->helpWithLiteral($input1, $isInput1Literal); - list($doctrineInput2, $ocInput2) = $this->helpWithLiteral($input2, $isInput2Literal); - - $this->assertEquals( - $this->doctrineExpressionBuilder->lt($doctrineInput1, $doctrineInput2), - $this->expressionBuilder->lt($ocInput1, $ocInput2) - ); - } - - /** - * @dataProvider dataComparisons - * - * @param mixed $input1 - * @param bool $isInput1Literal - * @param mixed $input2 - * @param bool $isInput2Literal - */ - public function testLowerThanEquals($input1, $isInput1Literal, $input2, $isInput2Literal) { - list($doctrineInput1, $ocInput1) = $this->helpWithLiteral($input1, $isInput1Literal); - list($doctrineInput2, $ocInput2) = $this->helpWithLiteral($input2, $isInput2Literal); - - $this->assertEquals( - $this->doctrineExpressionBuilder->lte($doctrineInput1, $doctrineInput2), - $this->expressionBuilder->lte($ocInput1, $ocInput2) - ); - } - - /** - * @dataProvider dataComparisons - * - * @param mixed $input1 - * @param bool $isInput1Literal - * @param mixed $input2 - * @param bool $isInput2Literal - */ - public function testGreaterThan($input1, $isInput1Literal, $input2, $isInput2Literal) { - list($doctrineInput1, $ocInput1) = $this->helpWithLiteral($input1, $isInput1Literal); - list($doctrineInput2, $ocInput2) = $this->helpWithLiteral($input2, $isInput2Literal); - - $this->assertEquals( - $this->doctrineExpressionBuilder->gt($doctrineInput1, $doctrineInput2), - $this->expressionBuilder->gt($ocInput1, $ocInput2) - ); - } - - /** - * @dataProvider dataComparisons - * - * @param mixed $input1 - * @param bool $isInput1Literal - * @param mixed $input2 - * @param bool $isInput2Literal - */ - public function testGreaterThanEquals($input1, $isInput1Literal, $input2, $isInput2Literal) { - list($doctrineInput1, $ocInput1) = $this->helpWithLiteral($input1, $isInput1Literal); - list($doctrineInput2, $ocInput2) = $this->helpWithLiteral($input2, $isInput2Literal); - - $this->assertEquals( - $this->doctrineExpressionBuilder->gte($doctrineInput1, $doctrineInput2), - $this->expressionBuilder->gte($ocInput1, $ocInput2) - ); - } - - public function testIsNull() { - $this->assertEquals( - $this->doctrineExpressionBuilder->isNull('`test`'), - $this->expressionBuilder->isNull('test') - ); - } - - public function testIsNotNull() { - $this->assertEquals( - $this->doctrineExpressionBuilder->isNotNull('`test`'), - $this->expressionBuilder->isNotNull('test') - ); - } - - public function dataLike() { - return [ - ['value', false], - ['value', true], - ]; - } - - /** - * @dataProvider dataLike - * - * @param mixed $input - * @param bool $isLiteral - */ - public function testLike($input, $isLiteral) { - list($doctrineInput, $ocInput) = $this->helpWithLiteral($input, $isLiteral); - - $this->assertEquals( - $this->doctrineExpressionBuilder->like('`test`', $doctrineInput), - $this->expressionBuilder->like('test', $ocInput) - ); - } - - /** - * @dataProvider dataLike - * - * @param mixed $input - * @param bool $isLiteral - */ - public function testNotLike($input, $isLiteral) { - list($doctrineInput, $ocInput) = $this->helpWithLiteral($input, $isLiteral); - - $this->assertEquals( - $this->doctrineExpressionBuilder->notLike('`test`', $doctrineInput), - $this->expressionBuilder->notLike('test', $ocInput) - ); - } - - public function dataIn() { - return [ - ['value', false], - ['value', true], - [['value'], false], - [['value'], true], - ]; - } - - /** - * @dataProvider dataIn - * - * @param mixed $input - * @param bool $isLiteral - */ - public function testIn($input, $isLiteral) { - list($doctrineInput, $ocInput) = $this->helpWithLiteral($input, $isLiteral); - - $this->assertEquals( - $this->doctrineExpressionBuilder->in('`test`', $doctrineInput), - $this->expressionBuilder->in('test', $ocInput) - ); - } - - /** - * @dataProvider dataIn - * - * @param mixed $input - * @param bool $isLiteral - */ - public function testNotIn($input, $isLiteral) { - list($doctrineInput, $ocInput) = $this->helpWithLiteral($input, $isLiteral); - - $this->assertEquals( - $this->doctrineExpressionBuilder->notIn('`test`', $doctrineInput), - $this->expressionBuilder->notIn('test', $ocInput) - ); - } - - protected function helpWithLiteral($input, $isLiteral) { - if ($isLiteral) { - if (is_array($input)) { - $doctrineInput = array_map(function ($ident) { - return $this->doctrineExpressionBuilder->literal($ident); - }, $input); - $ocInput = array_map(function ($ident) { - return $this->expressionBuilder->literal($ident); - }, $input); - } else { - $doctrineInput = $this->doctrineExpressionBuilder->literal($input); - $ocInput = $this->expressionBuilder->literal($input); - } - } else { - if (is_array($input)) { - $doctrineInput = array_map(function ($input) { - return '`' . $input . '`'; - }, $input); - $ocInput = $input; - } else { - $doctrineInput = '`' . $input . '`'; - $ocInput = $input; - } - } - - return [$doctrineInput, $ocInput]; - } - - public function dataLiteral() { - return [ - ['value', null], - ['1', null], - [1, null], - [1, 'string'], - [1, 'integer'], - [1, IQueryBuilder::PARAM_INT], - ]; - } - - /** - * @dataProvider dataLiteral - * - * @param mixed $input - * @param string|null $type - */ - public function testLiteral($input, $type) { - /** @var \OC\DB\QueryBuilder\Literal $actual */ - $actual = $this->expressionBuilder->literal($input, $type); - - $this->assertInstanceOf('\OC\DB\QueryBuilder\Literal', $actual); - $this->assertEquals( - $this->doctrineExpressionBuilder->literal($input, $type), - $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(); - } -} diff --git a/tests/lib/db/querybuilder/querybuildertest.php b/tests/lib/db/querybuilder/querybuildertest.php deleted file mode 100644 index de8f84ac345..00000000000 --- a/tests/lib/db/querybuilder/querybuildertest.php +++ /dev/null @@ -1,1203 +0,0 @@ -<?php -/** - * @author Joas Schilling <nickvergessen@owncloud.com> - * - * @copyright Copyright (c) 2015, ownCloud, Inc. - * @license AGPL-3.0 - * - * This code is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License, version 3, - * as published by the Free Software Foundation. - * - * 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, version 3, - * along with this program. If not, see <http://www.gnu.org/licenses/> - * - */ - -namespace Test\DB\QueryBuilder; - -use Doctrine\DBAL\Query\Expression\CompositeExpression; -use OC\DB\QueryBuilder\Literal; -use OC\DB\QueryBuilder\Parameter; -use OC\DB\QueryBuilder\QueryBuilder; -use OCP\IDBConnection; - -/** - * Class QueryBuilderTest - * - * @group DB - * - * @package Test\DB\QueryBuilder - */ -class QueryBuilderTest extends \Test\TestCase { - /** @var QueryBuilder */ - protected $queryBuilder; - - /** @var IDBConnection */ - protected $connection; - - protected function setUp() { - parent::setUp(); - - $this->connection = \OC::$server->getDatabaseConnection(); - $this->queryBuilder = new QueryBuilder($this->connection); - } - - protected function createTestingRows($appId = 'testFirstResult') { - $qB = $this->connection->getQueryBuilder(); - for ($i = 1; $i < 10; $i++) { - $qB->insert('*PREFIX*appconfig') - ->values([ - 'appid' => $qB->expr()->literal($appId), - 'configkey' => $qB->expr()->literal('testing' . $i), - 'configvalue' => $qB->expr()->literal(100 - $i), - ]) - ->execute(); - } - } - - protected function getTestingRows(QueryBuilder $queryBuilder) { - $queryBuilder->select('configvalue') - ->from('*PREFIX*appconfig') - ->where($queryBuilder->expr()->eq( - 'appid', - $queryBuilder->expr()->literal('testFirstResult') - )) - ->orderBy('configkey', 'ASC'); - - $query = $queryBuilder->execute(); - $rows = []; - while ($row = $query->fetch()) { - $rows[] = $row['configvalue']; - } - $query->closeCursor(); - - return $rows; - } - - protected function deleteTestingRows($appId = 'testFirstResult') { - $qB = $this->connection->getQueryBuilder(); - - $qB->delete('*PREFIX*appconfig') - ->where($qB->expr()->eq('appid', $qB->expr()->literal($appId))) - ->execute(); - } - - public function dataFirstResult() { - return [ - [null, [99, 98, 97, 96, 95, 94, 93, 92, 91]], - [0, [99, 98, 97, 96, 95, 94, 93, 92, 91]], - [1, [98, 97, 96, 95, 94, 93, 92, 91]], - [5, [94, 93, 92, 91]], - ]; - } - - /** - * @dataProvider dataFirstResult - * - * @param int $firstResult - * @param array $expectedSet - */ - public function testFirstResult($firstResult, $expectedSet) { - $this->deleteTestingRows(); - $this->createTestingRows(); - - if ($firstResult !== null) { - $this->queryBuilder->setFirstResult($firstResult); - - // FIXME Remove this once Doctrine/DBAL is >2.5.1: - // FIXME See https://github.com/doctrine/dbal/pull/782 - $this->queryBuilder->setMaxResults(100); - } - - $this->assertSame( - $firstResult, - $this->queryBuilder->getFirstResult() - ); - - $rows = $this->getTestingRows($this->queryBuilder); - - $this->assertCount(sizeof($expectedSet), $rows); - $this->assertEquals($expectedSet, $rows); - - $this->deleteTestingRows(); - } - - public function dataMaxResults() { - return [ - [null, [99, 98, 97, 96, 95, 94, 93, 92, 91]], - // Limit 0 gives mixed results: either all entries or none is returned - //[0, []], - [1, [99]], - [5, [99, 98, 97, 96, 95]], - ]; - } - - /** - * @dataProvider dataMaxResults - * - * @param int $maxResult - * @param array $expectedSet - */ - public function testMaxResults($maxResult, $expectedSet) { - $this->deleteTestingRows(); - $this->createTestingRows(); - - if ($maxResult !== null) { - $this->queryBuilder->setMaxResults($maxResult); - } - - $this->assertSame( - $maxResult, - $this->queryBuilder->getMaxResults() - ); - - $rows = $this->getTestingRows($this->queryBuilder); - - $this->assertCount(sizeof($expectedSet), $rows); - $this->assertEquals($expectedSet, $rows); - - $this->deleteTestingRows(); - } - - public function dataSelect() { - $queryBuilder = new QueryBuilder(\OC::$server->getDatabaseConnection()); - return [ - // select('column1') - [['configvalue'], ['configvalue' => '99']], - - // select('column1', 'column2') - [['configvalue', 'configkey'], ['configvalue' => '99', 'configkey' => 'testing1']], - - // select(['column1', 'column2']) - [[['configvalue', 'configkey']], ['configvalue' => '99', 'configkey' => 'testing1']], - - // select(new Literal('column1')) - [[$queryBuilder->expr()->literal('column1')], [], 'column1'], - - // select('column1', 'column2') - [[$queryBuilder->expr()->literal('column1'), 'configkey'], ['configkey' => 'testing1'], 'column1'], - - // select(['column1', 'column2']) - [[[$queryBuilder->expr()->literal('column1'), 'configkey']], ['configkey' => 'testing1'], 'column1'], - ]; - } - - /** - * @dataProvider dataSelect - * - * @param array $selectArguments - * @param array $expected - * @param string $expectedLiteral - */ - public function testSelect($selectArguments, $expected, $expectedLiteral = '') { - $this->deleteTestingRows(); - $this->createTestingRows(); - - call_user_func_array( - [$this->queryBuilder, 'select'], - $selectArguments - ); - - $this->queryBuilder->from('*PREFIX*appconfig') - ->where($this->queryBuilder->expr()->eq( - 'appid', - $this->queryBuilder->expr()->literal('testFirstResult') - )) - ->orderBy('configkey', 'ASC') - ->setMaxResults(1); - - $query = $this->queryBuilder->execute(); - $row = $query->fetch(); - $query->closeCursor(); - - foreach ($expected as $key => $value) { - $this->assertArrayHasKey($key, $row); - $this->assertEquals($value, $row[$key]); - unset($row[$key]); - } - - if ($expectedLiteral) { - $this->assertEquals([$expectedLiteral], array_values($row)); - } else { - $this->assertEmpty($row); - } - - $this->deleteTestingRows(); - } - - public function dataSelectAlias() { - $queryBuilder = new QueryBuilder(\OC::$server->getDatabaseConnection()); - return [ - ['configvalue', 'cv', ['cv' => '99']], - [$queryBuilder->expr()->literal('column1'), 'thing', ['thing' => 'column1']], - ]; - } - - /** - * @dataProvider dataSelectAlias - * - * @param mixed $select - * @param array $alias - * @param array $expected - */ - public function testSelectAlias($select, $alias, $expected) { - $this->deleteTestingRows(); - $this->createTestingRows(); - - $this->queryBuilder->selectAlias($select, $alias); - - $this->queryBuilder->from('*PREFIX*appconfig') - ->where($this->queryBuilder->expr()->eq( - 'appid', - $this->queryBuilder->expr()->literal('testFirstResult') - )) - ->orderBy('configkey', 'ASC') - ->setMaxResults(1); - - $query = $this->queryBuilder->execute(); - $row = $query->fetch(); - $query->closeCursor(); - - $this->assertEquals( - $expected, - $row - ); - - $this->deleteTestingRows(); - } - - public function testSelectDistinct() { - $this->deleteTestingRows('testFirstResult1'); - $this->deleteTestingRows('testFirstResult2'); - $this->createTestingRows('testFirstResult1'); - $this->createTestingRows('testFirstResult2'); - - $this->queryBuilder->selectDistinct('appid'); - - $this->queryBuilder->from('*PREFIX*appconfig') - ->where($this->queryBuilder->expr()->in( - 'appid', - [$this->queryBuilder->expr()->literal('testFirstResult1'), $this->queryBuilder->expr()->literal('testFirstResult2')] - )) - ->orderBy('appid', 'DESC'); - - $query = $this->queryBuilder->execute(); - $rows = $query->fetchAll(); - $query->closeCursor(); - - $this->assertEquals( - [['appid' => 'testFirstResult2'], ['appid' => 'testFirstResult1']], - $rows - ); - - $this->deleteTestingRows('testFirstResult1'); - $this->deleteTestingRows('testFirstResult2'); - } - - public function dataAddSelect() { - $queryBuilder = new QueryBuilder(\OC::$server->getDatabaseConnection()); - return [ - // addSelect('column1') - [['configvalue'], ['appid' => 'testFirstResult', 'configvalue' => '99']], - - // addSelect('column1', 'column2') - [['configvalue', 'configkey'], ['appid' => 'testFirstResult', 'configvalue' => '99', 'configkey' => 'testing1']], - - // addSelect(['column1', 'column2']) - [[['configvalue', 'configkey']], ['appid' => 'testFirstResult', 'configvalue' => '99', 'configkey' => 'testing1']], - - // select(new Literal('column1')) - [[$queryBuilder->expr()->literal('column1')], ['appid' => 'testFirstResult'], 'column1'], - - // select('column1', 'column2') - [[$queryBuilder->expr()->literal('column1'), 'configkey'], ['appid' => 'testFirstResult', 'configkey' => 'testing1'], 'column1'], - - // select(['column1', 'column2']) - [[[$queryBuilder->expr()->literal('column1'), 'configkey']], ['appid' => 'testFirstResult', 'configkey' => 'testing1'], 'column1'], - ]; - } - - /** - * @dataProvider dataAddSelect - * - * @param array $selectArguments - * @param array $expected - * @param string $expectedLiteral - */ - public function testAddSelect($selectArguments, $expected, $expectedLiteral = '') { - $this->deleteTestingRows(); - $this->createTestingRows(); - - $this->queryBuilder->select('appid'); - - call_user_func_array( - [$this->queryBuilder, 'addSelect'], - $selectArguments - ); - - $this->queryBuilder->from('*PREFIX*appconfig') - ->where($this->queryBuilder->expr()->eq( - 'appid', - $this->queryBuilder->expr()->literal('testFirstResult') - )) - ->orderBy('configkey', 'ASC') - ->setMaxResults(1); - - $query = $this->queryBuilder->execute(); - $row = $query->fetch(); - $query->closeCursor(); - - foreach ($expected as $key => $value) { - $this->assertArrayHasKey($key, $row); - $this->assertEquals($value, $row[$key]); - unset($row[$key]); - } - - if ($expectedLiteral) { - $this->assertEquals([$expectedLiteral], array_values($row)); - } else { - $this->assertEmpty($row); - } - - $this->deleteTestingRows(); - } - - public function dataDelete() { - return [ - ['data', null, ['table' => '`*PREFIX*data`', 'alias' => null], '`*PREFIX*data`'], - ['data', 't', ['table' => '`*PREFIX*data`', 'alias' => 't'], '`*PREFIX*data` t'], - ]; - } - - /** - * @dataProvider dataDelete - * - * @param string $tableName - * @param string $tableAlias - * @param array $expectedQueryPart - * @param string $expectedQuery - */ - public function testDelete($tableName, $tableAlias, $expectedQueryPart, $expectedQuery) { - $this->queryBuilder->delete($tableName, $tableAlias); - - $this->assertSame( - $expectedQueryPart, - $this->queryBuilder->getQueryPart('from') - ); - - $this->assertSame( - 'DELETE FROM ' . $expectedQuery, - $this->queryBuilder->getSQL() - ); - } - - public function dataUpdate() { - return [ - ['data', null, ['table' => '`*PREFIX*data`', 'alias' => null], '`*PREFIX*data`'], - ['data', 't', ['table' => '`*PREFIX*data`', 'alias' => 't'], '`*PREFIX*data` t'], - ]; - } - - /** - * @dataProvider dataUpdate - * - * @param string $tableName - * @param string $tableAlias - * @param array $expectedQueryPart - * @param string $expectedQuery - */ - public function testUpdate($tableName, $tableAlias, $expectedQueryPart, $expectedQuery) { - $this->queryBuilder->update($tableName, $tableAlias); - - $this->assertSame( - $expectedQueryPart, - $this->queryBuilder->getQueryPart('from') - ); - - $this->assertSame( - 'UPDATE ' . $expectedQuery . ' SET ', - $this->queryBuilder->getSQL() - ); - } - - public function dataInsert() { - return [ - ['data', ['table' => '`*PREFIX*data`'], '`*PREFIX*data`'], - ]; - } - - /** - * @dataProvider dataInsert - * - * @param string $tableName - * @param array $expectedQueryPart - * @param string $expectedQuery - */ - public function testInsert($tableName, $expectedQueryPart, $expectedQuery) { - $this->queryBuilder->insert($tableName); - - $this->assertSame( - $expectedQueryPart, - $this->queryBuilder->getQueryPart('from') - ); - - $this->assertSame( - 'INSERT INTO ' . $expectedQuery . ' () VALUES()', - $this->queryBuilder->getSQL() - ); - } - - public function dataFrom() { - return [ - ['data', null, null, null, [['table' => '`*PREFIX*data`', 'alias' => null]], '`*PREFIX*data`'], - ['data', 't', null, null, [['table' => '`*PREFIX*data`', 'alias' => 't']], '`*PREFIX*data` t'], - ['data1', null, 'data2', null, [ - ['table' => '`*PREFIX*data1`', 'alias' => null], - ['table' => '`*PREFIX*data2`', 'alias' => null] - ], '`*PREFIX*data1`, `*PREFIX*data2`'], - ['data', 't1', 'data', 't2', [ - ['table' => '`*PREFIX*data`', 'alias' => 't1'], - ['table' => '`*PREFIX*data`', 'alias' => 't2'] - ], '`*PREFIX*data` t1, `*PREFIX*data` t2'], - ]; - } - - /** - * @dataProvider dataFrom - * - * @param string $table1Name - * @param string $table1Alias - * @param string $table2Name - * @param string $table2Alias - * @param array $expectedQueryPart - * @param string $expectedQuery - */ - public function testFrom($table1Name, $table1Alias, $table2Name, $table2Alias, $expectedQueryPart, $expectedQuery) { - $this->queryBuilder->from($table1Name, $table1Alias); - if ($table2Name !== null) { - $this->queryBuilder->from($table2Name, $table2Alias); - } - - $this->assertSame( - $expectedQueryPart, - $this->queryBuilder->getQueryPart('from') - ); - - $this->assertSame( - 'SELECT FROM ' . $expectedQuery, - $this->queryBuilder->getSQL() - ); - } - - public function dataJoin() { - return [ - [ - 'd1', 'data2', null, null, - ['d1' => [['joinType' => 'inner', 'joinTable' => '`*PREFIX*data2`', 'joinAlias' => null, 'joinCondition' => null]]], - '`*PREFIX*data1` d1 INNER JOIN `*PREFIX*data2` ON ' - ], - [ - 'd1', 'data2', 'd2', null, - ['d1' => [['joinType' => 'inner', 'joinTable' => '`*PREFIX*data2`', 'joinAlias' => 'd2', 'joinCondition' => null]]], - '`*PREFIX*data1` d1 INNER JOIN `*PREFIX*data2` d2 ON ' - ], - [ - 'd1', 'data2', 'd2', 'd1.`field1` = d2.`field2`', - ['d1' => [['joinType' => 'inner', 'joinTable' => '`*PREFIX*data2`', 'joinAlias' => 'd2', 'joinCondition' => 'd1.`field1` = d2.`field2`']]], - '`*PREFIX*data1` d1 INNER JOIN `*PREFIX*data2` d2 ON d1.`field1` = d2.`field2`' - ], - - ]; - } - - /** - * @dataProvider dataJoin - * - * @param string $fromAlias - * @param string $tableName - * @param string $tableAlias - * @param string $condition - * @param array $expectedQueryPart - * @param string $expectedQuery - */ - public function testJoin($fromAlias, $tableName, $tableAlias, $condition, $expectedQueryPart, $expectedQuery) { - $this->queryBuilder->from('data1', 'd1'); - $this->queryBuilder->join( - $fromAlias, - $tableName, - $tableAlias, - $condition - ); - - $this->assertSame( - $expectedQueryPart, - $this->queryBuilder->getQueryPart('join') - ); - - $this->assertSame( - 'SELECT FROM ' . $expectedQuery, - $this->queryBuilder->getSQL() - ); - } - - /** - * @dataProvider dataJoin - * - * @param string $fromAlias - * @param string $tableName - * @param string $tableAlias - * @param string $condition - * @param array $expectedQueryPart - * @param string $expectedQuery - */ - public function testInnerJoin($fromAlias, $tableName, $tableAlias, $condition, $expectedQueryPart, $expectedQuery) { - $this->queryBuilder->from('data1', 'd1'); - $this->queryBuilder->innerJoin( - $fromAlias, - $tableName, - $tableAlias, - $condition - ); - - $this->assertSame( - $expectedQueryPart, - $this->queryBuilder->getQueryPart('join') - ); - - $this->assertSame( - 'SELECT FROM ' . $expectedQuery, - $this->queryBuilder->getSQL() - ); - } - - public function dataLeftJoin() { - return [ - [ - 'd1', 'data2', null, null, - ['d1' => [['joinType' => 'left', 'joinTable' => '`*PREFIX*data2`', 'joinAlias' => null, 'joinCondition' => null]]], - '`*PREFIX*data1` d1 LEFT JOIN `*PREFIX*data2` ON ' - ], - [ - 'd1', 'data2', 'd2', null, - ['d1' => [['joinType' => 'left', 'joinTable' => '`*PREFIX*data2`', 'joinAlias' => 'd2', 'joinCondition' => null]]], - '`*PREFIX*data1` d1 LEFT JOIN `*PREFIX*data2` d2 ON ' - ], - [ - 'd1', 'data2', 'd2', 'd1.`field1` = d2.`field2`', - ['d1' => [['joinType' => 'left', 'joinTable' => '`*PREFIX*data2`', 'joinAlias' => 'd2', 'joinCondition' => 'd1.`field1` = d2.`field2`']]], - '`*PREFIX*data1` d1 LEFT JOIN `*PREFIX*data2` d2 ON d1.`field1` = d2.`field2`' - ], - ]; - } - - /** - * @dataProvider dataLeftJoin - * - * @param string $fromAlias - * @param string $tableName - * @param string $tableAlias - * @param string $condition - * @param array $expectedQueryPart - * @param string $expectedQuery - */ - public function testLeftJoin($fromAlias, $tableName, $tableAlias, $condition, $expectedQueryPart, $expectedQuery) { - $this->queryBuilder->from('data1', 'd1'); - $this->queryBuilder->leftJoin( - $fromAlias, - $tableName, - $tableAlias, - $condition - ); - - $this->assertSame( - $expectedQueryPart, - $this->queryBuilder->getQueryPart('join') - ); - - $this->assertSame( - 'SELECT FROM ' . $expectedQuery, - $this->queryBuilder->getSQL() - ); - } - - public function dataRightJoin() { - return [ - [ - 'd1', 'data2', null, null, - ['d1' => [['joinType' => 'right', 'joinTable' => '`*PREFIX*data2`', 'joinAlias' => null, 'joinCondition' => null]]], - '`*PREFIX*data1` d1 RIGHT JOIN `*PREFIX*data2` ON ' - ], - [ - 'd1', 'data2', 'd2', null, - ['d1' => [['joinType' => 'right', 'joinTable' => '`*PREFIX*data2`', 'joinAlias' => 'd2', 'joinCondition' => null]]], - '`*PREFIX*data1` d1 RIGHT JOIN `*PREFIX*data2` d2 ON ' - ], - [ - 'd1', 'data2', 'd2', 'd1.`field1` = d2.`field2`', - ['d1' => [['joinType' => 'right', 'joinTable' => '`*PREFIX*data2`', 'joinAlias' => 'd2', 'joinCondition' => 'd1.`field1` = d2.`field2`']]], - '`*PREFIX*data1` d1 RIGHT JOIN `*PREFIX*data2` d2 ON d1.`field1` = d2.`field2`' - ], - ]; - } - - /** - * @dataProvider dataRightJoin - * - * @param string $fromAlias - * @param string $tableName - * @param string $tableAlias - * @param string $condition - * @param array $expectedQueryPart - * @param string $expectedQuery - */ - public function testRightJoin($fromAlias, $tableName, $tableAlias, $condition, $expectedQueryPart, $expectedQuery) { - $this->queryBuilder->from('data1', 'd1'); - $this->queryBuilder->rightJoin( - $fromAlias, - $tableName, - $tableAlias, - $condition - ); - - $this->assertSame( - $expectedQueryPart, - $this->queryBuilder->getQueryPart('join') - ); - - $this->assertSame( - 'SELECT FROM ' . $expectedQuery, - $this->queryBuilder->getSQL() - ); - } - - public function dataSet() { - return [ - ['column1', new Literal('value'), null, null, ['`column1` = value'], '`column1` = value'], - ['column1', new Parameter(':param'), null, null, ['`column1` = :param'], '`column1` = :param'], - ['column1', 'column2', null, null, ['`column1` = `column2`'], '`column1` = `column2`'], - ['column1', 'column2', 'column3', new Literal('value'), ['`column1` = `column2`', '`column3` = value'], '`column1` = `column2`, `column3` = value'], - ]; - } - - /** - * @dataProvider dataSet - * - * @param string $partOne1 - * @param string $partOne2 - * @param string $partTwo1 - * @param string $partTwo2 - * @param array $expectedQueryPart - * @param string $expectedQuery - */ - public function testSet($partOne1, $partOne2, $partTwo1, $partTwo2, $expectedQueryPart, $expectedQuery) { - $this->queryBuilder->update('data'); - $this->queryBuilder->set($partOne1, $partOne2); - if ($partTwo1 !== null) { - $this->queryBuilder->set($partTwo1, $partTwo2); - } - - $this->assertSame( - $expectedQueryPart, - $this->queryBuilder->getQueryPart('set') - ); - - $this->assertSame( - 'UPDATE `*PREFIX*data` SET ' . $expectedQuery, - $this->queryBuilder->getSQL() - ); - } - - public function dataWhere() { - return [ - [['where1'], new CompositeExpression('AND', ['where1']), 'where1'], - [['where1', 'where2'], new CompositeExpression('AND', ['where1', 'where2']), '(where1) AND (where2)'], - ]; - } - - /** - * @dataProvider dataWhere - * - * @param array $whereArguments - * @param array $expectedQueryPart - * @param string $expectedQuery - */ - public function testWhere($whereArguments, $expectedQueryPart, $expectedQuery) { - $this->queryBuilder->select('column'); - call_user_func_array( - [$this->queryBuilder, 'where'], - $whereArguments - ); - - $this->assertEquals( - $expectedQueryPart, - $this->queryBuilder->getQueryPart('where') - ); - - $this->assertSame( - 'SELECT `column` FROM WHERE ' . $expectedQuery, - $this->queryBuilder->getSQL() - ); - } - - /** - * @dataProvider dataWhere - * - * @param array $whereArguments - * @param array $expectedQueryPart - * @param string $expectedQuery - */ - public function testAndWhere($whereArguments, $expectedQueryPart, $expectedQuery) { - $this->queryBuilder->select('column'); - call_user_func_array( - [$this->queryBuilder, 'andWhere'], - $whereArguments - ); - - $this->assertEquals( - $expectedQueryPart, - $this->queryBuilder->getQueryPart('where') - ); - - $this->assertSame( - 'SELECT `column` FROM WHERE ' . $expectedQuery, - $this->queryBuilder->getSQL() - ); - } - - public function dataOrWhere() { - return [ - [['where1'], new CompositeExpression('OR', ['where1']), 'where1'], - [['where1', 'where2'], new CompositeExpression('OR', ['where1', 'where2']), '(where1) OR (where2)'], - ]; - } - - /** - * @dataProvider dataOrWhere - * - * @param array $whereArguments - * @param array $expectedQueryPart - * @param string $expectedQuery - */ - public function testOrWhere($whereArguments, $expectedQueryPart, $expectedQuery) { - $this->queryBuilder->select('column'); - call_user_func_array( - [$this->queryBuilder, 'orWhere'], - $whereArguments - ); - - $this->assertEquals( - $expectedQueryPart, - $this->queryBuilder->getQueryPart('where') - ); - - $this->assertSame( - 'SELECT `column` FROM WHERE ' . $expectedQuery, - $this->queryBuilder->getSQL() - ); - } - - public function dataGroupBy() { - return [ - [['column1'], ['`column1`'], '`column1`'], - [['column1', 'column2'], ['`column1`', '`column2`'], '`column1`, `column2`'], - ]; - } - - /** - * @dataProvider dataGroupBy - * - * @param array $groupByArguments - * @param array $expectedQueryPart - * @param string $expectedQuery - */ - public function testGroupBy($groupByArguments, $expectedQueryPart, $expectedQuery) { - $this->queryBuilder->select('column'); - call_user_func_array( - [$this->queryBuilder, 'groupBy'], - $groupByArguments - ); - - $this->assertEquals( - $expectedQueryPart, - $this->queryBuilder->getQueryPart('groupBy') - ); - - $this->assertSame( - 'SELECT `column` FROM GROUP BY ' . $expectedQuery, - $this->queryBuilder->getSQL() - ); - } - - public function dataAddGroupBy() { - return [ - [['column2'], ['`column1`', '`column2`'], '`column1`, `column2`'], - [['column2', 'column3'], ['`column1`', '`column2`', '`column3`'], '`column1`, `column2`, `column3`'], - ]; - } - - /** - * @dataProvider dataAddGroupBy - * - * @param array $groupByArguments - * @param array $expectedQueryPart - * @param string $expectedQuery - */ - public function testAddGroupBy($groupByArguments, $expectedQueryPart, $expectedQuery) { - $this->queryBuilder->select('column'); - $this->queryBuilder->groupBy('column1'); - call_user_func_array( - [$this->queryBuilder, 'addGroupBy'], - $groupByArguments - ); - - $this->assertEquals( - $expectedQueryPart, - $this->queryBuilder->getQueryPart('groupBy') - ); - - $this->assertSame( - 'SELECT `column` FROM GROUP BY ' . $expectedQuery, - $this->queryBuilder->getSQL() - ); - } - - public function dataSetValue() { - return [ - ['column', 'value', ['`column`' => 'value'], '(`column`) VALUES(value)'], - ]; - } - - /** - * @dataProvider dataSetValue - * - * @param string $column - * @param string $value - * @param array $expectedQueryPart - * @param string $expectedQuery - */ - public function testSetValue($column, $value, $expectedQueryPart, $expectedQuery) { - $this->queryBuilder->insert('data'); - $this->queryBuilder->setValue($column, $value); - - $this->assertEquals( - $expectedQueryPart, - $this->queryBuilder->getQueryPart('values') - ); - - $this->assertSame( - 'INSERT INTO `*PREFIX*data` ' . $expectedQuery, - $this->queryBuilder->getSQL() - ); - } - - /** - * @dataProvider dataSetValue - * - * @param string $column - * @param string $value - * @param array $expectedQueryPart - * @param string $expectedQuery - */ - public function testValues($column, $value, $expectedQueryPart, $expectedQuery) { - $this->queryBuilder->insert('data'); - $this->queryBuilder->values([ - $column => $value, - ]); - - $this->assertEquals( - $expectedQueryPart, - $this->queryBuilder->getQueryPart('values') - ); - - $this->assertSame( - 'INSERT INTO `*PREFIX*data` ' . $expectedQuery, - $this->queryBuilder->getSQL() - ); - } - - public function dataHaving() { - return [ - [['condition1'], new CompositeExpression('AND', ['condition1']), 'HAVING condition1'], - [['condition1', 'condition2'], new CompositeExpression('AND', ['condition1', 'condition2']), 'HAVING (condition1) AND (condition2)'], - [ - [new CompositeExpression('OR', ['condition1', 'condition2'])], - new CompositeExpression('OR', ['condition1', 'condition2']), - 'HAVING (condition1) OR (condition2)' - ], - [ - [new CompositeExpression('AND', ['condition1', 'condition2'])], - new CompositeExpression('AND', ['condition1', 'condition2']), - 'HAVING (condition1) AND (condition2)' - ], - ]; - } - - /** - * @dataProvider dataHaving - * - * @param array $havingArguments - * @param array $expectedQueryPart - * @param string $expectedQuery - */ - public function testHaving($havingArguments, $expectedQueryPart, $expectedQuery) { - call_user_func_array( - [$this->queryBuilder, 'having'], - $havingArguments - ); - - $this->assertEquals( - $expectedQueryPart, - $this->queryBuilder->getQueryPart('having') - ); - - $this->assertSame( - 'SELECT FROM ' . $expectedQuery, - $this->queryBuilder->getSQL() - ); - } - - public function dataAndHaving() { - return [ - [['condition2'], new CompositeExpression('AND', ['condition1', 'condition2']), 'HAVING (condition1) AND (condition2)'], - [['condition2', 'condition3'], new CompositeExpression('AND', ['condition1', 'condition2', 'condition3']), 'HAVING (condition1) AND (condition2) AND (condition3)'], - [ - [new CompositeExpression('OR', ['condition2', 'condition3'])], - new CompositeExpression('AND', ['condition1', new CompositeExpression('OR', ['condition2', 'condition3'])]), - 'HAVING (condition1) AND ((condition2) OR (condition3))' - ], - [ - [new CompositeExpression('AND', ['condition2', 'condition3'])], - new CompositeExpression('AND', ['condition1', new CompositeExpression('AND', ['condition2', 'condition3'])]), - 'HAVING (condition1) AND ((condition2) AND (condition3))' - ], - ]; - } - - /** - * @dataProvider dataAndHaving - * - * @param array $havingArguments - * @param array $expectedQueryPart - * @param string $expectedQuery - */ - public function testAndHaving($havingArguments, $expectedQueryPart, $expectedQuery) { - $this->queryBuilder->having('condition1'); - call_user_func_array( - [$this->queryBuilder, 'andHaving'], - $havingArguments - ); - - $this->assertEquals( - $expectedQueryPart, - $this->queryBuilder->getQueryPart('having') - ); - - $this->assertSame( - 'SELECT FROM ' . $expectedQuery, - $this->queryBuilder->getSQL() - ); - } - - public function dataOrHaving() { - return [ - [['condition2'], new CompositeExpression('OR', ['condition1', 'condition2']), 'HAVING (condition1) OR (condition2)'], - [['condition2', 'condition3'], new CompositeExpression('OR', ['condition1', 'condition2', 'condition3']), 'HAVING (condition1) OR (condition2) OR (condition3)'], - [ - [new CompositeExpression('OR', ['condition2', 'condition3'])], - new CompositeExpression('OR', ['condition1', new CompositeExpression('OR', ['condition2', 'condition3'])]), - 'HAVING (condition1) OR ((condition2) OR (condition3))' - ], - [ - [new CompositeExpression('AND', ['condition2', 'condition3'])], - new CompositeExpression('OR', ['condition1', new CompositeExpression('AND', ['condition2', 'condition3'])]), - 'HAVING (condition1) OR ((condition2) AND (condition3))' - ], - ]; - } - - /** - * @dataProvider dataOrHaving - * - * @param array $havingArguments - * @param array $expectedQueryPart - * @param string $expectedQuery - */ - public function testOrHaving($havingArguments, $expectedQueryPart, $expectedQuery) { - $this->queryBuilder->having('condition1'); - call_user_func_array( - [$this->queryBuilder, 'orHaving'], - $havingArguments - ); - - $this->assertEquals( - $expectedQueryPart, - $this->queryBuilder->getQueryPart('having') - ); - - $this->assertSame( - 'SELECT FROM ' . $expectedQuery, - $this->queryBuilder->getSQL() - ); - } - - public function dataOrderBy() { - return [ - ['column', null, ['`column` ASC'], 'ORDER BY `column` ASC'], - ['column', 'ASC', ['`column` ASC'], 'ORDER BY `column` ASC'], - ['column', 'DESC', ['`column` DESC'], 'ORDER BY `column` DESC'], - ]; - } - - /** - * @dataProvider dataOrderBy - * - * @param string $sort - * @param string $order - * @param array $expectedQueryPart - * @param string $expectedQuery - */ - public function testOrderBy($sort, $order, $expectedQueryPart, $expectedQuery) { - $this->queryBuilder->orderBy($sort, $order); - - $this->assertEquals( - $expectedQueryPart, - $this->queryBuilder->getQueryPart('orderBy') - ); - - $this->assertSame( - 'SELECT FROM ' . $expectedQuery, - $this->queryBuilder->getSQL() - ); - } - - public function dataAddOrderBy() { - return [ - ['column2', null, null, ['`column1` ASC', '`column2` ASC'], 'ORDER BY `column1` ASC, `column2` ASC'], - ['column2', null, 'ASC', ['`column1` ASC', '`column2` ASC'], 'ORDER BY `column1` ASC, `column2` ASC'], - ['column2', null, 'DESC', ['`column1` DESC', '`column2` ASC'], 'ORDER BY `column1` DESC, `column2` ASC'], - ['column2', 'ASC', null, ['`column1` ASC', '`column2` ASC'], 'ORDER BY `column1` ASC, `column2` ASC'], - ['column2', 'ASC', 'ASC', ['`column1` ASC', '`column2` ASC'], 'ORDER BY `column1` ASC, `column2` ASC'], - ['column2', 'ASC', 'DESC', ['`column1` DESC', '`column2` ASC'], 'ORDER BY `column1` DESC, `column2` ASC'], - ['column2', 'DESC', null, ['`column1` ASC', '`column2` DESC'], 'ORDER BY `column1` ASC, `column2` DESC'], - ['column2', 'DESC', 'ASC', ['`column1` ASC', '`column2` DESC'], 'ORDER BY `column1` ASC, `column2` DESC'], - ['column2', 'DESC', 'DESC', ['`column1` DESC', '`column2` DESC'], 'ORDER BY `column1` DESC, `column2` DESC'], - ]; - } - - /** - * @dataProvider dataAddOrderBy - * - * @param string $sort2 - * @param string $order2 - * @param string $order1 - * @param array $expectedQueryPart - * @param string $expectedQuery - */ - public function testAddOrderBy($sort2, $order2, $order1, $expectedQueryPart, $expectedQuery) { - $this->queryBuilder->orderBy('column1', $order1); - $this->queryBuilder->addOrderBy($sort2, $order2); - - $this->assertEquals( - $expectedQueryPart, - $this->queryBuilder->getQueryPart('orderBy') - ); - - $this->assertSame( - 'SELECT FROM ' . $expectedQuery, - $this->queryBuilder->getSQL() - ); - } - - public function testGetLastInsertId() { - $qB = $this->connection->getQueryBuilder(); - - try { - $qB->getLastInsertId(); - $this->fail('getLastInsertId() should throw an exception, when being called before insert()'); - } catch (\BadMethodCallException $e) { - $this->assertTrue(true); - } - - $qB->insert('properties') - ->values([ - 'userid' => $qB->expr()->literal('testFirstResult'), - 'propertypath' => $qB->expr()->literal('testing'), - 'propertyname' => $qB->expr()->literal('testing'), - 'propertyvalue' => $qB->expr()->literal('testing'), - ]) - ->execute(); - - $actual = $qB->getLastInsertId(); - - $this->assertNotNull($actual); - $this->assertInternalType('int', $actual); - $this->assertEquals($this->connection->lastInsertId('*PREFIX*properties'), $actual); - - $qB->delete('properties') - ->where($qB->expr()->eq('userid', $qB->expr()->literal('testFirstResult'))) - ->execute(); - - try { - $qB->getLastInsertId(); - $this->fail('getLastInsertId() should throw an exception, when being called after delete()'); - } catch (\BadMethodCallException $e) { - $this->assertTrue(true); - } - } - - public function dataGetTableName() { - return [ - ['*PREFIX*table', null, '`*PREFIX*table`'], - ['*PREFIX*table', true, '`*PREFIX*table`'], - ['*PREFIX*table', false, '`*PREFIX*table`'], - - ['table', null, '`*PREFIX*table`'], - ['table', true, '`*PREFIX*table`'], - ['table', false, '`table`'], - ]; - } - - /** - * @dataProvider dataGetTableName - * - * @param string $tableName - * @param bool $automatic - * @param string $expected - */ - public function testGetTableName($tableName, $automatic, $expected) { - if ($automatic !== null) { - $this->queryBuilder->automaticTablePrefix($automatic); - } - - $this->assertSame( - $expected, - $this->queryBuilder->getTableName($tableName) - ); - } - - public function dataGetColumnName() { - return [ - ['column', '', '`column`'], - ['column', 'a', 'a.`column`'], - ]; - } - - /** - * @dataProvider dataGetColumnName - * @param string $column - * @param string $prefix - * @param string $expected - */ - public function testGetColumnName($column, $prefix, $expected) { - $this->assertSame( - $expected, - $this->queryBuilder->getColumnName($column, $prefix) - ); - } -} diff --git a/tests/lib/db/querybuilder/quotehelpertest.php b/tests/lib/db/querybuilder/quotehelpertest.php deleted file mode 100644 index b83d9eed2df..00000000000 --- a/tests/lib/db/querybuilder/quotehelpertest.php +++ /dev/null @@ -1,145 +0,0 @@ -<?php -/** - * @author Joas Schilling <nickvergessen@owncloud.com> - * - * @copyright Copyright (c) 2015, ownCloud, Inc. - * @license AGPL-3.0 - * - * This code is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License, version 3, - * as published by the Free Software Foundation. - * - * 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, version 3, - * along with this program. If not, see <http://www.gnu.org/licenses/> - * - */ - -namespace Test\DB\QueryBuilder; - -use OC\DB\QueryBuilder\Literal; -use OC\DB\QueryBuilder\Parameter; -use OC\DB\QueryBuilder\QuoteHelper; -use OCP\DB\QueryBuilder\ILiteral; -use OCP\DB\QueryBuilder\IParameter; - -class QuoteHelperTest extends \Test\TestCase { - /** @var QuoteHelper */ - protected $helper; - - protected function setUp() { - parent::setUp(); - - $this->helper = new QuoteHelper(); - } - - public function dataQuoteColumnName() { - return [ - ['column', '`column`'], - [new Literal('literal'), 'literal'], - [new Literal(1), '1'], - [new Parameter(':param'), ':param'], - - // (string) 'null' is Doctrines way to set columns to null - // See https://github.com/owncloud/core/issues/19314 - ['null', 'null'], - ]; - } - - /** - * @dataProvider dataQuoteColumnName - * @param mixed $input - * @param string $expected - */ - public function testQuoteColumnName($input, $expected) { - $this->assertSame( - $expected, - $this->helper->quoteColumnName($input) - ); - } - - public function dataQuoteColumnNames() { - return [ - // Single case - ['d.column', 'd.`column`'], - ['column', '`column`'], - [new Literal('literal'), 'literal'], - [new Literal(1), '1'], - [new Parameter(':param'), ':param'], - - // Array case - [['column'], ['`column`']], - [[new Literal('literal')], ['literal']], - [[new Literal(1)], ['1']], - [[new Parameter(':param')], [':param']], - - // Array mixed cases - [['column1', 'column2'], ['`column1`', '`column2`']], - [['column', new Literal('literal')], ['`column`', 'literal']], - [['column', new Literal(1)], ['`column`', '1']], - [['column', new Parameter(':param')], ['`column`', ':param']], - ]; - } - - /** - * @dataProvider dataQuoteColumnNames - * @param mixed $input - * @param string $expected - */ - public function testQuoteColumnNames($input, $expected) { - $this->assertSame( - $expected, - $this->helper->quoteColumnNames($input) - ); - } - - /** - * @param array|string|ILiteral|IParameter $strings string, Literal or Parameter - * @return array|string - */ - public function quoteColumnNames($strings) { - if (!is_array($strings)) { - return $this->quoteColumnName($strings); - } - - $return = []; - foreach ($strings as $string) { - $return[] = $this->quoteColumnName($string); - } - - return $return; - } - - /** - * @param string|ILiteral|IParameter $string string, Literal or Parameter - * @return string - */ - public function quoteColumnName($string) { - if ($string instanceof IParameter) { - return $string->getName(); - } - - if ($string instanceof ILiteral) { - return $string->getLiteral(); - } - - if ($string === null) { - return $string; - } - - if (!is_string($string)) { - throw new \InvalidArgumentException('Only strings, Literals and Parameters are allowed'); - } - - if (substr_count($string, '.')) { - list($alias, $columnName) = explode('.', $string); - return '`' . $alias . '`.`' . $columnName . '`'; - } - - return '`' . $string . '`'; - } -} |