From 9b7b964696326863476ddd434b8cdc70ba289759 Mon Sep 17 00:00:00 2001 From: David Grudl Date: Mon, 6 Feb 2012 18:15:52 +0100 Subject: [PATCH] numOfQueries and totalTime moved to profilers --- dibi/Nette/DibiNettePanel.php | 19 +++++++++++-------- dibi/libs/DibiConnection.php | 9 --------- dibi/libs/DibiEvent.php | 3 ++- dibi/libs/DibiFirePhpLogger.php | 6 +++++- examples/nette-debug-and-exceptions.php | 14 ++++++++++++++ 5 files changed, 32 insertions(+), 19 deletions(-) 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') . '

' . $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',
Time msSQL StatementRowsConnection