From 863b9d2d72cd248623c80ec774611970ef503c41 Mon Sep 17 00:00:00 2001 From: Steffen Vogel Date: Sat, 4 Sep 2010 01:30:49 +0200 Subject: [PATCH] fixed critical bug in static definition classes updated debugging class to new doctrine SQLLogger interface --- backend/lib/Util/Debug.php | 36 ++++++++++++++++----------------- backend/lib/Util/Definition.php | 19 +++++++---------- 2 files changed, 24 insertions(+), 31 deletions(-) diff --git a/backend/lib/Util/Debug.php b/backend/lib/Util/Debug.php index e086f0c..e39c8f4 100644 --- a/backend/lib/Util/Debug.php +++ b/backend/lib/Util/Debug.php @@ -23,6 +23,8 @@ namespace Volkszaehler\Util; +use Doctrine\ORM; + use Doctrine\DBAL\Logging; /** @@ -31,11 +33,11 @@ use Doctrine\DBAL\Logging; * @package util * @author Steffen Vogel */ -class Debug implements Logging\SQLLogger { +class Debug { protected static $instance = NULL; - protected $queries = array(); protected $messages = array(); + protected $sqlLogger; /** @var float holds timestamp of initialization, used later to return time of execution */ protected $started; @@ -48,12 +50,17 @@ class Debug implements Logging\SQLLogger { * * @param integer $level the debug level */ - public function __construct($level) { + public function __construct($level, ORM\EntityManager $em) { // taking timestamp to stop execution time $this->created = microtime(TRUE); + // saving debug level $this->level = $level; + // starting logging of sql queries + $this->sqlLogger = new Logging\DebugStack(); + $em->getConnection()->getConfiguration()->setSQLLogger($this->sqlLogger); + if (isset(self::$instance)) { throw new \Exception('debugging has already been started. please use the static functions!'); } @@ -66,16 +73,6 @@ class Debug implements Logging\SQLLogger { assert_options(ASSERT_CALLBACK, array($this, 'assertHandler')); } - /** - * interface for Doctrine's DBAL SQLLogger - * - * @param string $sql the sql query - * @param array $parameters optional parameters for prepared queries - */ - function logSQL($sql, array $parameters = NULL, $executionMS = null) { - $this->queries[] = array('sql' => $sql, 'parameters' => $parameters, 'execution' => round($executionMS, 5)); - } - /* * logs messages to the debug stack including file, lineno, args and a stacktrace * @@ -85,14 +82,15 @@ class Debug implements Logging\SQLLogger { static public function log($message) { if (isset(self::$instance)) { $trace = debug_backtrace(); + $info = $trace[0]; self::$instance->messages[] = array( 'message' => $message, - 'file' => $trace[0]['file'], - 'line' => $trace[0]['line'], + 'file' => $info['file'], + 'line' => $info['line'], 'time' => date('r'), - 'args' => array_slice($trace[0]['args'], 1), - 'trace' => $trace + 'args' => array_slice($info['args'], 1), + 'trace' => array_slice($trace, 1) ); } } @@ -123,7 +121,7 @@ class Debug implements Logging\SQLLogger { 'file' => $info['file'], 'line' => $info['line'], 'time' => date('r'), - 'trace' => array_slice($trace, 2) + 'trace' => array_slice($trace, 3) ); } @@ -141,7 +139,7 @@ class Debug implements Logging\SQLLogger { /** * @return 2 dimensional array with sql queries and parameters */ - public function getQueries() { return $this->queries; } + public function getQueries() { return $this->sqlLogger->queries; } /** * @return 2 dimensional array with messages diff --git a/backend/lib/Util/Definition.php b/backend/lib/Util/Definition.php index cb3e42f..2edd2c8 100644 --- a/backend/lib/Util/Definition.php +++ b/backend/lib/Util/Definition.php @@ -28,9 +28,6 @@ namespace Volkszaehler\Util; * @package util */ abstract class Definition { - /** @var array cached json definitions */ - protected static $definitions = NULL; - /** @var string discriminator for database column */ protected $name; @@ -64,11 +61,11 @@ abstract class Definition { * @return Util\Definition */ public static function get($name) { - if (!self::exists($name)) { + if (!static::exists($name)) { throw new \Exception('unknown definition'); } - return self::$definitions[$name]; + return static::$definitions[$name]; } /** @@ -76,13 +73,11 @@ abstract class Definition { * @param string $name */ public static function exists($name) { - if (is_null(self::$definitions)) { - self::load(); + if (is_null(static::$definitions)) { + static::load(); } - Debug::log('definitions', self::$definitions); - - return isset(self::$definitions[$name]); + return isset(static::$definitions[$name]); } /** @@ -91,10 +86,10 @@ abstract class Definition { protected static function load() { $json = JSON::decode(file_get_contents(VZ_DIR . static::FILE)); - self::$definitions = array(); + static::$definitions = array(); foreach ($json as $property) { - self::$definitions[$property->name] = new static($property); + static::$definitions[$property->name] = new static($property); } } }