Skip to content

Commit

Permalink
Merge 2261e2f into a301a92
Browse files Browse the repository at this point in the history
  • Loading branch information
hrach committed May 7, 2020
2 parents a301a92 + 2261e2f commit 54bd02b
Show file tree
Hide file tree
Showing 12 changed files with 135 additions and 35 deletions.
9 changes: 7 additions & 2 deletions src/Bridges/NetteTracy/ConnectionPanel.php
Expand Up @@ -8,7 +8,7 @@

namespace Nextras\Dbal\Bridges\NetteTracy;

use Nextras\Dbal\DriverException;
use Nextras\Dbal\Drivers\Exception\DriverException;
use Nextras\Dbal\IConnection;
use Nextras\Dbal\ILogger;
use Nextras\Dbal\Platforms\IPlatform;
Expand Down Expand Up @@ -67,7 +67,7 @@ public function onDisconnect(): void
}


public function onQuery(string $sqlQuery, float $timeTaken, ?Result $result, ?DriverException $exception): void
public function onQuery(string $sqlQuery, float $timeTaken, ?Result $result): void
{
$this->count++;
if ($this->count > $this->maxQueries) {
Expand All @@ -84,6 +84,11 @@ public function onQuery(string $sqlQuery, float $timeTaken, ?Result $result, ?Dr
}


public function onQueryException(string $sqlQuery, float $timeTaken, ?DriverException $exception): void
{
}


public function getTab(): ?string
{
$count = $this->count;
Expand Down
10 changes: 7 additions & 3 deletions src/Bridges/SymfonyBundle/DataCollector/QueryDataCollector.php
Expand Up @@ -8,8 +8,7 @@

namespace Nextras\Dbal\Bridges\SymfonyBundle\DataCollector;

use Nextras\Dbal\Bridges\NetteTracy\ConnectionPanel;
use Nextras\Dbal\DriverException;
use Nextras\Dbal\Drivers\Exception\DriverException;
use Nextras\Dbal\IConnection;
use Nextras\Dbal\ILogger;
use Nextras\Dbal\Platforms\IPlatform;
Expand Down Expand Up @@ -135,7 +134,7 @@ public function onDisconnect(): void
}


public function onQuery(string $sqlQuery, float $timeTaken, ?Result $result, ?DriverException $exception): void
public function onQuery(string $sqlQuery, float $timeTaken, ?Result $result): void
{
$this->data['count']++;
if ($this->data['count'] > 100) {
Expand All @@ -149,4 +148,9 @@ public function onQuery(string $sqlQuery, float $timeTaken, ?Result $result, ?Dr
$result ? $result->count() : null,
];
}


public function onQueryException(string $sqlQuery, float $timeTaken, ?DriverException $exception): void
{
}
}
11 changes: 2 additions & 9 deletions src/Connection.php
Expand Up @@ -270,15 +270,8 @@ public function rollbackTransaction(): void
}


/**
* Returns current connection's transaction index.
* 0 = no running transaction
* 1 = basic transaction
* >1 = nested transaction through savepoints
* Todo: Add this method to interface in v4
* @return int
*/
public function getTransactionIndex(): int
/** @inheritdoc */
public function getTransactionNestedIndex(): int
{
return $this->nestedTransactionIndex;
}
Expand Down
6 changes: 3 additions & 3 deletions src/Drivers/Sqlsrv/SqlsrvDriver.php
Expand Up @@ -207,7 +207,7 @@ public function beginTransaction(): void
$time = microtime(true);
$result = sqlsrv_begin_transaction($this->connection);
$timeTaken = microtime(true) - $time;
$this->logger->onQuery('BEGIN TRANSACTION', $timeTaken, null, null);
$this->logger->onQuery('BEGIN TRANSACTION', $timeTaken, null);
if (!$result) {
$this->throwErrors();
}
Expand All @@ -220,7 +220,7 @@ public function commitTransaction(): void
$time = microtime(true);
$result = sqlsrv_commit($this->connection);
$timeTaken = microtime(true) - $time;
$this->logger->onQuery('COMMIT TRANSACTION', $timeTaken, null, null);
$this->logger->onQuery('COMMIT TRANSACTION', $timeTaken, null);
if (!$result) {
$this->throwErrors();
}
Expand All @@ -233,7 +233,7 @@ public function rollbackTransaction(): void
$time = microtime(true);
$result = sqlsrv_rollback($this->connection);
$timeTaken = microtime(true) - $time;
$this->logger->onQuery('ROLLBACK TRANSACTION', $timeTaken, null, null);
$this->logger->onQuery('ROLLBACK TRANSACTION', $timeTaken, null);
if (!$result) {
$this->throwErrors();
}
Expand Down
9 changes: 9 additions & 0 deletions src/IConnection.php
Expand Up @@ -133,6 +133,15 @@ public function commitTransaction(): void;
public function rollbackTransaction(): void;


/**
* Returns current connection's transaction nested index.
* 0 = no running transaction
* 1 = basic transaction
* >1 = nested transaction through save-points
*/
public function getTransactionNestedIndex(): int;


/**
* Creates a savepoint.
* @throws DriverException
Expand Down
12 changes: 11 additions & 1 deletion src/ILogger.php
Expand Up @@ -28,5 +28,15 @@ public function onDisconnect(): void;
/**
* When SQL query is executed on connection.
*/
public function onQuery(string $sqlQuery, float $timeTaken, ?Result $result, ?\Nextras\Dbal\Drivers\Exception\DriverException $exception): void;
public function onQuery(string $sqlQuery, float $timeTaken, ?Result $result): void;


/**
* When SQL query execution fails on connection.
*/
public function onQueryException(
string $sqlQuery,
float $timeTaken,
?\Nextras\Dbal\Drivers\Exception\DriverException $exception
): void;
}
68 changes: 68 additions & 0 deletions src/Utils/CallbackQueryLogger.php
@@ -0,0 +1,68 @@
<?php declare(strict_types = 1);

namespace Nextras\Dbal\Utils;

use Nextras\Dbal\Drivers\Exception\DriverException;
use Nextras\Dbal\ILogger;
use Nextras\Dbal\Result\Result;


/**
* Support class to ease BC with Dbal 3.0.
*
* Replace
*
* <code>
* $connection->onQuery[] = function(...) {...};
* </code>
*
* with
*
* <code>
* $connection->addLogger(new CallbackQueryLogger(function (...) {...}));
* </code>
* @deprecated
*/
class CallbackQueryLogger implements ILogger
{
/**
* @var callable
* @phpstan-var callable(string $sqlQuery, float $timeTaken, ?Result $result): void
*/
private $callback;


/**
* @phpstan-param callable(string $sqlQuery, float $timeTaken, ?Result $result): void $callback
*/
public function __construct(callable $callback)
{
$this->callback = $callback;
}


public function onConnect(): void
{
}


public function onDisconnect(): void
{
}


public function onQuery(string $sqlQuery, float $timeTaken, ?Result $result): void
{
$callback = $this->callback;
$callback($sqlQuery, $timeTaken, $result);
}


public function onQueryException(
string $sqlQuery,
float $timeTaken,
?DriverException $exception
): void
{
}
}
8 changes: 3 additions & 5 deletions src/Utils/LoggerHelper.php
Expand Up @@ -8,7 +8,7 @@

namespace Nextras\Dbal\Utils;

use Nextras\Dbal\DriverException;
use Nextras\Dbal\Drivers\Exception\DriverException;
use Nextras\Dbal\Drivers\IDriver;
use Nextras\Dbal\ILogger;
use Nextras\Dbal\Result\Result;
Expand All @@ -32,15 +32,13 @@ public static function loggedQuery(IDriver $driver, ILogger $logger, string $sql
$logger->onQuery(
$sqlQuery,
$driver->getQueryElapsedTime(),
$result,
null // exception
$result
);
return $result;
} catch (DriverException $exception) {
$logger->onQuery(
$logger->onQueryException(
$sqlQuery,
$driver->getQueryElapsedTime(),
null, // result
$exception
);
throw $exception;
Expand Down
12 changes: 10 additions & 2 deletions src/Utils/MultiLogger.php
Expand Up @@ -38,10 +38,18 @@ public function onDisconnect(): void
}


public function onQuery(string $sqlQuery, float $timeTaken, ?Result $result, ?DriverException $exception): void
public function onQuery(string $sqlQuery, float $timeTaken, ?Result $result): void
{
foreach ($this->loggers as $logger) {
$logger->onQuery($sqlQuery, $timeTaken, $result, $exception);
$logger->onQuery($sqlQuery, $timeTaken, $result);
}
}


public function onQueryException(string $sqlQuery, float $timeTaken, ?DriverException $exception): void
{
foreach ($this->loggers as $logger) {
$logger->onQueryException($sqlQuery, $timeTaken, $exception);
}
}
}
10 changes: 5 additions & 5 deletions tests/cases/integration/exceptions.phpt
Expand Up @@ -7,11 +7,11 @@

namespace NextrasTests\Dbal;

use Nextras\Dbal\ConnectionException;
use Nextras\Dbal\ForeignKeyConstraintViolationException;
use Nextras\Dbal\NotNullConstraintViolationException;
use Nextras\Dbal\QueryException;
use Nextras\Dbal\UniqueConstraintViolationException;
use Nextras\Dbal\Drivers\Exception\ConnectionException;
use Nextras\Dbal\Drivers\Exception\ForeignKeyConstraintViolationException;
use Nextras\Dbal\Drivers\Exception\NotNullConstraintViolationException;
use Nextras\Dbal\Drivers\Exception\QueryException;
use Nextras\Dbal\Drivers\Exception\UniqueConstraintViolationException;
use Tester\Assert;

require_once __DIR__ . '/../../bootstrap.php';
Expand Down
4 changes: 2 additions & 2 deletions tests/cases/integration/transactions.phpt
Expand Up @@ -105,11 +105,11 @@ class TransactionsTest extends IntegrationTestCase

$this->connection->rollbackTransaction();
$this->connection->rollbackTransaction();
Assert::same(0, $this->connection->getTransactionIndex());
Assert::same(0, $this->connection->getTransactionNestedIndex());

$this->connection->commitTransaction();
$this->connection->commitTransaction();
Assert::same(0, $this->connection->getTransactionIndex());
Assert::same(0, $this->connection->getTransactionNestedIndex());
}


Expand Down
11 changes: 8 additions & 3 deletions tests/inc/TestLogger.php
Expand Up @@ -2,7 +2,7 @@

namespace NextrasTests\Dbal;

use Nextras\Dbal\DriverException;
use Nextras\Dbal\Drivers\Exception\DriverException;
use Nextras\Dbal\ILogger;
use Nextras\Dbal\Result\Result;

Expand All @@ -28,10 +28,15 @@ public function onDisconnect(): void
}


public function onQuery(string $sqlQuery, float $timeTaken, ?Result $result, ?DriverException $exception): void
public function onQuery(string $sqlQuery, float $timeTaken, ?Result $result): void
{
if ($this->logQueries) {
$this->logged[] = [$sqlQuery, $timeTaken, $result, $exception];
$this->logged[] = [$sqlQuery, $timeTaken, $result];
}
}


public function onQueryException(string $sqlQuery, float $timeTaken, ?DriverException $exception): void
{
}
}

0 comments on commit 54bd02b

Please sign in to comment.