Inject config and logger

Signed-off-by: Joas Schilling <coding@schilljs.com>
This commit is contained in:
Joas Schilling 2016-10-28 13:48:58 +02:00 committed by Lukas Reschke
parent cd13f50a3f
commit 2c4035e806
No known key found for this signature in database
GPG Key ID: B9F6980CF6E759B1
4 changed files with 51 additions and 13 deletions

View File

@ -67,7 +67,11 @@ class Connection extends \Doctrine\DBAL\Connection implements IDBConnection {
* @return \OCP\DB\QueryBuilder\IQueryBuilder * @return \OCP\DB\QueryBuilder\IQueryBuilder
*/ */
public function getQueryBuilder() { public function getQueryBuilder() {
return new QueryBuilder($this); return new QueryBuilder(
$this,
\OC::$server->getSystemConfig(),
\OC::$server->getLogger()
);
} }
/** /**

View File

@ -31,16 +31,24 @@ use OC\DB\QueryBuilder\ExpressionBuilder\ExpressionBuilder;
use OC\DB\QueryBuilder\ExpressionBuilder\MySqlExpressionBuilder; use OC\DB\QueryBuilder\ExpressionBuilder\MySqlExpressionBuilder;
use OC\DB\QueryBuilder\ExpressionBuilder\OCIExpressionBuilder; use OC\DB\QueryBuilder\ExpressionBuilder\OCIExpressionBuilder;
use OC\DB\QueryBuilder\ExpressionBuilder\PgSqlExpressionBuilder; use OC\DB\QueryBuilder\ExpressionBuilder\PgSqlExpressionBuilder;
use OC\SystemConfig;
use OCP\DB\QueryBuilder\IQueryBuilder; use OCP\DB\QueryBuilder\IQueryBuilder;
use OCP\DB\QueryBuilder\IQueryFunction; use OCP\DB\QueryBuilder\IQueryFunction;
use OCP\DB\QueryBuilder\IParameter; use OCP\DB\QueryBuilder\IParameter;
use OCP\IDBConnection; use OCP\IDBConnection;
use OCP\ILogger;
class QueryBuilder implements IQueryBuilder { class QueryBuilder implements IQueryBuilder {
/** @var \OCP\IDBConnection */ /** @var \OCP\IDBConnection */
private $connection; private $connection;
/** @var SystemConfig */
private $systemConfig;
/** @var ILogger */
private $logger;
/** @var \Doctrine\DBAL\Query\QueryBuilder */ /** @var \Doctrine\DBAL\Query\QueryBuilder */
private $queryBuilder; private $queryBuilder;
@ -56,10 +64,14 @@ class QueryBuilder implements IQueryBuilder {
/** /**
* Initializes a new QueryBuilder. * Initializes a new QueryBuilder.
* *
* @param \OCP\IDBConnection $connection * @param IDBConnection $connection
* @param SystemConfig $systemConfig
* @param ILogger $logger
*/ */
public function __construct(IDBConnection $connection) { public function __construct(IDBConnection $connection, SystemConfig $systemConfig, ILogger $logger) {
$this->connection = $connection; $this->connection = $connection;
$this->systemConfig = $systemConfig;
$this->logger = $logger;
$this->queryBuilder = new \Doctrine\DBAL\Query\QueryBuilder($this->connection); $this->queryBuilder = new \Doctrine\DBAL\Query\QueryBuilder($this->connection);
$this->helper = new QuoteHelper(); $this->helper = new QuoteHelper();
} }
@ -139,7 +151,7 @@ class QueryBuilder implements IQueryBuilder {
* @return \Doctrine\DBAL\Driver\Statement|int * @return \Doctrine\DBAL\Driver\Statement|int
*/ */
public function execute() { public function execute() {
if (\OC::$server->getConfig()->getSystemValue('log_query', false)) { if ($this->systemConfig->getValue('log_query', false)) {
$params = []; $params = [];
foreach ($this->getParameters() as $placeholder => $value) { foreach ($this->getParameters() as $placeholder => $value) {
if (is_array($value)) { if (is_array($value)) {
@ -149,12 +161,12 @@ class QueryBuilder implements IQueryBuilder {
} }
} }
if (empty($params)) { if (empty($params)) {
\OC::$server->getLogger()->debug('DB QueryBuilder: \'{query}\'', [ $this->logger->debug('DB QueryBuilder: \'{query}\'', [
'query' => $this->getSQL(), 'query' => $this->getSQL(),
'app' => 'core', 'app' => 'core',
]); ]);
} else { } else {
\OC::$server->getLogger()->debug('DB QueryBuilder: \'{query}\' with parameters: {params}', [ $this->logger->debug('DB QueryBuilder: \'{query}\' with parameters: {params}', [
'query' => $this->getSQL(), 'query' => $this->getSQL(),
'params' => implode(', ', $params), 'params' => implode(', ', $params),
'app' => 'core', 'app' => 'core',

View File

@ -25,7 +25,9 @@ use Doctrine\DBAL\Query\Expression\CompositeExpression;
use OC\DB\QueryBuilder\Literal; use OC\DB\QueryBuilder\Literal;
use OC\DB\QueryBuilder\Parameter; use OC\DB\QueryBuilder\Parameter;
use OC\DB\QueryBuilder\QueryBuilder; use OC\DB\QueryBuilder\QueryBuilder;
use OC\SystemConfig;
use OCP\IDBConnection; use OCP\IDBConnection;
use OCP\ILogger;
/** /**
* Class QueryBuilderTest * Class QueryBuilderTest
@ -41,11 +43,19 @@ class QueryBuilderTest extends \Test\TestCase {
/** @var IDBConnection */ /** @var IDBConnection */
protected $connection; protected $connection;
/** @var SystemConfig|\PHPUnit_Framework_MockObject_MockObject */
protected $config;
/** @var ILogger|\PHPUnit_Framework_MockObject_MockObject */
protected $logger;
protected function setUp() { protected function setUp() {
parent::setUp(); parent::setUp();
$this->connection = \OC::$server->getDatabaseConnection(); $this->connection = \OC::$server->getDatabaseConnection();
$this->queryBuilder = new QueryBuilder($this->connection); $this->config = $this->createMock(SystemConfig::class);
$this->logger = $this->createMock(ILogger::class);
$this->queryBuilder = new QueryBuilder($this->connection, $this->config, $this->logger);
} }
protected function createTestingRows($appId = 'testFirstResult') { protected function createTestingRows($appId = 'testFirstResult') {
@ -166,7 +176,9 @@ class QueryBuilderTest extends \Test\TestCase {
} }
public function dataSelect() { public function dataSelect() {
$queryBuilder = new QueryBuilder(\OC::$server->getDatabaseConnection()); $config = $this->createMock(SystemConfig::class);
$logger = $this->createMock(ILogger::class);
$queryBuilder = new QueryBuilder(\OC::$server->getDatabaseConnection(), $config, $logger);
return [ return [
// select('column1') // select('column1')
[['configvalue'], ['configvalue' => '99']], [['configvalue'], ['configvalue' => '99']],
@ -232,7 +244,9 @@ class QueryBuilderTest extends \Test\TestCase {
} }
public function dataSelectAlias() { public function dataSelectAlias() {
$queryBuilder = new QueryBuilder(\OC::$server->getDatabaseConnection()); $config = $this->createMock(SystemConfig::class);
$logger = $this->createMock(ILogger::class);
$queryBuilder = new QueryBuilder(\OC::$server->getDatabaseConnection(), $config, $logger);
return [ return [
['configvalue', 'cv', ['cv' => '99']], ['configvalue', 'cv', ['cv' => '99']],
[$queryBuilder->expr()->literal('column1'), 'thing', ['thing' => 'column1']], [$queryBuilder->expr()->literal('column1'), 'thing', ['thing' => 'column1']],
@ -301,7 +315,9 @@ class QueryBuilderTest extends \Test\TestCase {
} }
public function dataAddSelect() { public function dataAddSelect() {
$queryBuilder = new QueryBuilder(\OC::$server->getDatabaseConnection()); $config = $this->createMock(SystemConfig::class);
$logger = $this->createMock(ILogger::class);
$queryBuilder = new QueryBuilder(\OC::$server->getDatabaseConnection(), $config, $logger);
return [ return [
// addSelect('column1') // addSelect('column1')
[['configvalue'], ['appid' => 'testFirstResult', 'configvalue' => '99']], [['configvalue'], ['appid' => 'testFirstResult', 'configvalue' => '99']],

View File

@ -21,6 +21,8 @@
namespace Test\Security; namespace Test\Security;
use OC\SystemConfig;
use OCP\ILogger;
use \OCP\Security\ICrypto; use \OCP\Security\ICrypto;
use \OCP\IDBConnection; use \OCP\IDBConnection;
use \OC\Security\CredentialsManager; use \OC\Security\CredentialsManager;
@ -45,7 +47,7 @@ class CredentialsManagerTest extends \Test\TestCase {
$this->manager = new CredentialsManager($this->crypto, $this->dbConnection); $this->manager = new CredentialsManager($this->crypto, $this->dbConnection);
} }
private function getQeuryResult($row) { private function getQueryResult($row) {
$result = $this->getMockBuilder('\Doctrine\DBAL\Driver\Statement') $result = $this->getMockBuilder('\Doctrine\DBAL\Driver\Statement')
->disableOriginalConstructor() ->disableOriginalConstructor()
->getMock(); ->getMock();
@ -87,12 +89,16 @@ class CredentialsManagerTest extends \Test\TestCase {
->willReturn(json_encode('bar')); ->willReturn(json_encode('bar'));
$qb = $this->getMockBuilder('\OC\DB\QueryBuilder\QueryBuilder') $qb = $this->getMockBuilder('\OC\DB\QueryBuilder\QueryBuilder')
->setConstructorArgs([$this->dbConnection]) ->setConstructorArgs([
$this->dbConnection,
$this->createMock(SystemConfig::class),
$this->createMock(ILogger::class),
])
->setMethods(['execute']) ->setMethods(['execute'])
->getMock(); ->getMock();
$qb->expects($this->once()) $qb->expects($this->once())
->method('execute') ->method('execute')
->willReturn($this->getQeuryResult(['credentials' => 'baz'])); ->willReturn($this->getQueryResult(['credentials' => 'baz']));
$this->dbConnection->expects($this->once()) $this->dbConnection->expects($this->once())
->method('getQueryBuilder') ->method('getQueryBuilder')