diff --git a/dibi/Nette/DibiNettePanel.php b/dibi/Nette/DibiNettePanel.php
index 278b671..0cce9cd 100644
--- a/dibi/Nette/DibiNettePanel.php
+++ b/dibi/Nette/DibiNettePanel.php
@@ -101,11 +101,13 @@ class DibiNettePanel extends DibiObject implements IBarPanel
*/
public function getTab()
{
- $event = reset($this->events);
-
+ $totalTime = 0;
+ foreach ($this->events as $event) {
+ $totalTime += $event->time;
+ }
return '
'
- . ($event ? $event->connection->numOfQueries : 0) . ' queries'
- . ($event && $event->connection->totalTime ? ' / ' . sprintf('%0.1f', $event->connection->totalTime * 1000) . 'ms' : '')
+ . count($this->events) . ' queries'
+ . ($totalTime ? ' / ' . sprintf('%0.1f', $totalTime * 1000) . 'ms' : '')
. '';
}
@@ -117,18 +119,19 @@ class DibiNettePanel extends DibiObject implements IBarPanel
*/
public function getPanel()
{
- $s = NULL;
+ $totalTime = $s = NULL;
$h = 'htmlSpecialChars';
foreach ($this->events as $event) {
+ $totalTime += $event->time;
$explain = NULL; // EXPLAIN is called here to work SELECT FOUND_ROWS()
if ($this->explain && $event->type === DibiEvent::SELECT) {
try {
- $backup = array($event->connection->onEvent, $event->connection->numOfQueries, $event->connection->totalTime, dibi::$numOfQueries, dibi::$totalTime);
+ $backup = array($event->connection->onEvent, dibi::$numOfQueries, dibi::$totalTime);
$event->connection->onEvent = NULL;
$cmd = is_string($this->explain) ? $this->explain : ($event->connection->getConfig('driver') === 'oracle' ? 'EXPLAIN PLAN' : 'EXPLAIN');
$explain = dibi::dump($event->connection->nativeQuery("$cmd $event->sql"), TRUE);
} catch (DibiException $e) {}
- list($event->connection->onEvent, $event->connection->numOfQueries, $event->connection->totalTime, dibi::$numOfQueries, dibi::$totalTime) = $backup;
+ list($event->connection->onEvent, dibi::$numOfQueries, dibi::$totalTime) = $backup;
}
$s .= '
' . sprintf('%0.3f', $event->time * 1000);
@@ -157,7 +160,7 @@ class DibiNettePanel extends DibiObject implements IBarPanel
'
- Queries: ' . (isset($event) ? $event->connection->numOfQueries : 0) . (isset($event) && $event->connection->totalTime === NULL ? '' : ', time: ' . sprintf('%0.3f', $event->connection->totalTime * 1000) . ' ms') . '
+ Queries: ' . count($this->events) . ($totalTime === NULL ? '' : ', time: ' . sprintf('%0.3f', $totalTime * 1000) . ' ms') . '
Time ms | SQL Statement | Rows | Connection | ' . $s . '
diff --git a/dibi/libs/DibiConnection.php b/dibi/libs/DibiConnection.php
index 4dcfad1..d768f18 100644
--- a/dibi/libs/DibiConnection.php
+++ b/dibi/libs/DibiConnection.php
@@ -44,12 +44,6 @@ class DibiConnection extends DibiObject
/** @var DibiHashMap Substitutes for identifiers */
private $substitutes;
- /** @var int Elapsed time for all queries */
- public $totalTime = 0;
-
- /** @var int Number or queries */
- public $numOfQueries = 0;
-
/**
@@ -345,9 +339,6 @@ class DibiConnection extends DibiObject
$this->connected || $this->connect();
$event = $this->onEvent ? new DibiEvent($this, DibiEvent::QUERY, $sql) : NULL;
- $this->numOfQueries++;
- dibi::$numOfQueries++;
- dibi::$sql = $sql;
try {
$res = $this->driver->query($sql);
diff --git a/dibi/libs/DibiEvent.php b/dibi/libs/DibiEvent.php
index 3dba8ea..9c5e609 100644
--- a/dibi/libs/DibiEvent.php
+++ b/dibi/libs/DibiEvent.php
@@ -80,6 +80,8 @@ class DibiEvent
}
dibi::$elapsedTime = FALSE;
+ dibi::$numOfQueries++;
+ dibi::$sql = $sql;
}
@@ -96,7 +98,6 @@ class DibiEvent
$this->time += microtime(TRUE);
dibi::$elapsedTime = $this->time;
dibi::$totalTime += $this->time;
- $this->connection->totalTime += $this->time;
return $this;
}
diff --git a/dibi/libs/DibiFirePhpLogger.php b/dibi/libs/DibiFirePhpLogger.php
index 4d66e45..605965f 100644
--- a/dibi/libs/DibiFirePhpLogger.php
+++ b/dibi/libs/DibiFirePhpLogger.php
@@ -28,6 +28,9 @@ class DibiFirePhpLogger extends DibiObject
/** @var int */
public $filter;
+ /** @var int Elapsed time for all queries */
+ public $totalTime = 0;
+
/** @var array */
private static $fireTable = array(array('Time', 'SQL Statement', 'Rows', 'Connection'));
@@ -60,6 +63,7 @@ class DibiFirePhpLogger extends DibiObject
return;
}
+ $this->totalTime += $event->time;
self::$fireTable[] = array(
sprintf('%0.3f', $event->time * 1000),
strlen($event->sql) > self::$maxLength ? substr($event->sql, 0, self::$maxLength) . '...' : $event->sql,
@@ -74,7 +78,7 @@ class DibiFirePhpLogger extends DibiObject
$payload = json_encode(array(
array(
'Type' => 'TABLE',
- 'Label' => 'dibi profiler (' . dibi::$numOfQueries . ' SQL queries took ' . sprintf('%0.3f', dibi::$totalTime * 1000) . ' ms)',
+ 'Label' => 'dibi profiler (' . count($this->events) . ' SQL queries took ' . sprintf('%0.3f', $this->totalTime * 1000) . ' ms)',
),
self::$fireTable,
));
diff --git a/examples/nette-debug-and-exceptions.php b/examples/nette-debug-and-exceptions.php
index 856c31e..d4b5554 100644
--- a/examples/nette-debug-and-exceptions.php
+++ b/examples/nette-debug-and-exceptions.php
@@ -18,6 +18,20 @@ require_once '../dibi/dibi.php';
ndebug();
+dibi::connect(array(
+ 'driver' => 'sqlite',
+ 'database' => 'data/sample.sdb',
+ 'profiler' => array(
+ 'run' => TRUE,
+ )
+));
+
+
+// throws error because SQL is bad
+dibi::query('SELECT * FROM customers WHERE customer_id < ?', 38);
+
+
+
dibi::connect(array(
'driver' => 'sqlite',
'database' => 'data/sample.sdb',
|