From a222ba998d552d91eb940811202fa8442be65d64 Mon Sep 17 00:00:00 2001 From: Denis Flaven Date: Wed, 3 Dec 2014 10:58:39 +0000 Subject: [PATCH] Enhanced reporting during the setup: all the queries (create table / alter table) are now logged into "setup.log" along with their execution time. SVN:trunk[3446] --- core/metamodel.class.php | 12 +++++++++--- setup/runtimeenv.class.inc.php | 16 ++++++++++++++-- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/core/metamodel.class.php b/core/metamodel.class.php index 2919c53d2..e88d6da25 100644 --- a/core/metamodel.class.php +++ b/core/metamodel.class.php @@ -3801,7 +3801,7 @@ abstract class MetaModel } - public static function DBCreate() + public static function DBCreate($aCallback = null) { // Note: we have to check if the DB does exist, because we may share the DB // with other applications (in which case the DB does exist, not the tables with the given prefix) @@ -3809,18 +3809,24 @@ abstract class MetaModel { CMDBSource::CreateDB(self::$m_sDBName); } - self::DBCreateTables(); + self::DBCreateTables($aCallback); self::DBCreateViews(); } - protected static function DBCreateTables() + protected static function DBCreateTables($aCallback = null) { list($aErrors, $aSugFix, $aCondensedQueries) = self::DBCheckFormat(); //$sSQL = implode('; ', $aCondensedQueries); Does not work - multiple queries not allowed foreach($aCondensedQueries as $sQuery) { + $fStart = microtime(true); CMDBSource::CreateTable($sQuery); + $fDuration = microtime(true) - $fStart; + if ($aCallback != null) + { + call_user_func($aCallback, $sQuery, $fDuration); + } } } diff --git a/setup/runtimeenv.class.inc.php b/setup/runtimeenv.class.inc.php index 1155afe4c..224cf68de 100644 --- a/setup/runtimeenv.class.inc.php +++ b/setup/runtimeenv.class.inc.php @@ -46,6 +46,18 @@ class RunTimeEnvironment $this->sTargetEnv = $sEnvironment; } + /** + * Callback function for logging the queries run by the setup. + * According to the documentation the function must be defined before passing it to call_user_func... + * @param string $sQuery + * @param float $fDuration + * @return void + */ + public function LogQueryCallback($sQuery, $fDuration) + { + $this->log_info(sprintf('%.3fs - query: %s ', $fDuration, $sQuery)); + } + /** * Helper function to initialize the ORM and load the data model * from the given file @@ -411,7 +423,7 @@ class RunTimeEnvironment { if (!MetaModel::DBExists(/* bMustBeComplete */ false)) { - MetaModel::DBCreate(); + MetaModel::DBCreate(array($this, 'LogQueryCallback')); $this->log_ok("Database structure successfully created."); } else @@ -430,7 +442,7 @@ class RunTimeEnvironment { if (MetaModel::DBExists(/* bMustBeComplete */ false)) { - MetaModel::DBCreate(); + MetaModel::DBCreate(array($this, 'LogQueryCallback')); $this->log_ok("Database structure successfully updated."); // Check (and update only if it seems needed) the hierarchical keys