From f882401d4395bcd2ad5b8306f82205ebc44adb9c Mon Sep 17 00:00:00 2001
From: mattpiwik <matthieu.aubry@gmail.com>
Date: Sun, 27 Jan 2013 22:16:38 +0000
Subject: [PATCH]  more debug information to debug build

git-svn-id: http://dev.piwik.org/svn/trunk@7796 59fd770c-687e-43c8-a1e3-f5a4ff64c105
---
 core/PluginsFunctions/Sql.php | 250 +++++++++++++++-------------------
 1 file changed, 110 insertions(+), 140 deletions(-)

diff --git a/core/PluginsFunctions/Sql.php b/core/PluginsFunctions/Sql.php
index 60bcc20f99..f0409ac6e1 100644
--- a/core/PluginsFunctions/Sql.php
+++ b/core/PluginsFunctions/Sql.php
@@ -1,11 +1,11 @@
 <?php
 /**
  * Piwik - Open source web analytics
- * 
+ *
  * @link http://piwik.org
  * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  * @version $Id$
- * 
+ *
  * @category Piwik
  * @package PluginsFunctions
  */
@@ -25,12 +25,10 @@ class Piwik_Sql
 	static private function getDb()
 	{
 		$db = null;
-		if(!empty($GLOBALS['PIWIK_TRACKER_MODE']))
-		{
+		if (!empty($GLOBALS['PIWIK_TRACKER_MODE'])) {
 			$db = Piwik_Tracker::getDatabase();
 		}
-		if($db === null)
-		{
+		if ($db === null) {
 			$db = Zend_Registry::get('db');
 		}
 		return $db;
@@ -46,7 +44,11 @@ class Piwik_Sql
 	 */
 	static public function exec($sql)
 	{
-		$profiler = Zend_Registry::get('db')->getProfiler();
+		$db = Zend_Registry::get('db');
+		if (empty($db)) {
+			debug_print_backtrace();
+		}
+		$profiler = $db->getProfiler();
 		$q = $profiler->queryStart($sql, Zend_Db_Profiler::INSERT);
 		$return = self::getDb()->exec($sql);
 		$profiler->queryEnd($q);
@@ -103,10 +105,10 @@ class Piwik_Sql
 	{
 		return self::getDb()->fetchOne($sql, $parameters);
 	}
-	
+
 	/**
 	 * Fetches result from the database query as an array of associative arrays.
-	 * 
+	 *
 	 * @param string  $sql         SQL query
 	 * @param array   $parameters  Parameters to bind in the query, array( param1 => value1, param2 => value2)
 	 * @return array
@@ -126,19 +128,18 @@ class Piwik_Sql
 	 * @param array   $parameters       Parameters to bind in the query.
 	 * @return int  The total number of rows deleted.
 	 */
-	static public function deleteAllRows( $table, $where, $maxRowsPerQuery = 100000, $parameters = array() )
+	static public function deleteAllRows($table, $where, $maxRowsPerQuery = 100000, $parameters = array())
 	{
-		$sql = "DELETE FROM $table $where LIMIT ".(int)$maxRowsPerQuery;
-		
+		$sql = "DELETE FROM $table $where LIMIT " . (int)$maxRowsPerQuery;
+
 		// delete rows w/ a limit
 		$totalRowsDeleted = 0;
-		do
-		{
+		do {
 			$rowsDeleted = self::query($sql, $parameters)->rowCount();
-			
+
 			$totalRowsDeleted += $rowsDeleted;
 		} while ($rowsDeleted >= $maxRowsPerQuery);
-		
+
 		return $totalRowsDeleted;
 	}
 
@@ -148,40 +149,36 @@ class Piwik_Sql
 	 * @param string|array  $tables  The name of the table to optimize or an array of tables to optimize.
 	 * @return Zend_Db_Statement
 	 */
-	static public function optimizeTables( $tables )
+	static public function optimizeTables($tables)
 	{
 		$optimize = Piwik_Config::getInstance()->General['enable_sql_optimize_queries'];
-		if(empty($optimize)) {
+		if (empty($optimize)) {
 			return;
 		}
 
-		if(empty($tables))
-		{
+		if (empty($tables)) {
 			return false;
 		}
-		if (!is_array($tables))
-		{
+		if (!is_array($tables)) {
 			$tables = array($tables);
 		}
-		
+
 		// filter out all InnoDB tables
 		$nonInnoDbTables = array();
-		foreach (Piwik_FetchAll("SHOW TABLE STATUS") as $row)
-		{
+		foreach (Piwik_FetchAll("SHOW TABLE STATUS") as $row) {
 			if (strtolower($row['Engine']) != 'innodb'
-				&& in_array($row['Name'], $tables))
-			{
+				&& in_array($row['Name'], $tables)
+			) {
 				$nonInnoDbTables[] = $row['Name'];
 			}
 		}
-		
-		if (empty($nonInnoDbTables))
-		{
+
+		if (empty($nonInnoDbTables)) {
 			return false;
 		}
-		
+
 		// optimize the tables
-		return self::query("OPTIMIZE TABLE ".implode(',', $nonInnoDbTables));
+		return self::query("OPTIMIZE TABLE " . implode(',', $nonInnoDbTables));
 	}
 
 	/**
@@ -190,14 +187,13 @@ class Piwik_Sql
 	 * @param string|array  $tables  The name of the table to drop or an array of table names to drop.
 	 * @return Zend_Db_Statement
 	 */
-	static public function dropTables( $tables )
+	static public function dropTables($tables)
 	{
-		if (!is_array($tables))
-		{
+		if (!is_array($tables)) {
 			$tables = array($tables);
 		}
-		
-		return self::query("DROP TABLE ".implode(',', $tables));
+
+		return self::query("DROP TABLE " . implode(',', $tables));
 	}
 
 	/**
@@ -207,28 +203,24 @@ class Piwik_Sql
 	 * @param string|array  $tablesToWrite  The table or tables to obtain 'write' locks on.
 	 * @return Zend_Db_Statement
 	 */
-	static public function lockTables( $tablesToRead, $tablesToWrite = array() )
+	static public function lockTables($tablesToRead, $tablesToWrite = array())
 	{
-		if (!is_array($tablesToRead))
-		{
+		if (!is_array($tablesToRead)) {
 			$tablesToRead = array($tablesToRead);
 		}
-		if (!is_array($tablesToWrite))
-		{
+		if (!is_array($tablesToWrite)) {
 			$tablesToWrite = array($tablesToWrite);
 		}
-		
+
 		$lockExprs = array();
-		foreach ($tablesToWrite as $table)
-		{
-			$lockExprs[] = $table." WRITE";
+		foreach ($tablesToWrite as $table) {
+			$lockExprs[] = $table . " WRITE";
 		}
-		foreach ($tablesToRead as $table)
-		{
-			$lockExprs[] = $table." READ";
+		foreach ($tablesToRead as $table) {
+			$lockExprs[] = $table . " READ";
 		}
-		
-		return self::exec("LOCK TABLES ".implode(', ', $lockExprs));
+
+		return self::exec("LOCK TABLES " . implode(', ', $lockExprs));
 	}
 
 	/**
@@ -240,11 +232,11 @@ class Piwik_Sql
 	{
 		return self::exec("UNLOCK TABLES");
 	}
-	
+
 	/**
 	 * Performs a SELECT on a table one chunk at a time and returns the first
 	 * fetched value.
-	 * 
+	 *
 	 * @param string $sql The SQL to perform. The last two conditions of the WHERE
 	 *                    expression must be as follows: 'id >= ? AND id < ?' where
 	 *                    'id' is the int id of the table. If $step < 0, the condition
@@ -255,30 +247,25 @@ class Piwik_Sql
 	 * @param array $parameters Parameters to bind in the query, array( param1 => value1, param2 => value2)
 	 * @return array
 	 */
-	static public function segmentedFetchFirst( $sql, $first, $last, $step, $params )
+	static public function segmentedFetchFirst($sql, $first, $last, $step, $params)
 	{
 		$result = false;
-		if ($step > 0)
-		{
-			for ($i = $first; $result === false && $i <= $last; $i += $step)
-			{
+		if ($step > 0) {
+			for ($i = $first; $result === false && $i <= $last; $i += $step) {
 				$result = self::fetchOne($sql, array_merge($params, array($i, $i + $step)));
 			}
-		}
-		else
-		{
-			for ($i = $first; $result === false && $i >= $last; $i += $step)
-			{
+		} else {
+			for ($i = $first; $result === false && $i >= $last; $i += $step) {
 				$result = self::fetchOne($sql, array_merge($params, array($i, $i + $step)));
 			}
 		}
 		return $result;
 	}
-	
+
 	/**
 	 * Performs a SELECT on a table one chunk at a time and returns an array
 	 * of every fetched value.
-	 * 
+	 *
 	 * @param string $sql The SQL to perform. The last two conditions of the WHERE
 	 *                    expression must be as follows: 'id >= ? AND id < ?' where
 	 *                    'id' is the int id of the table.
@@ -288,30 +275,25 @@ class Piwik_Sql
 	 * @param array $parameters Parameters to bind in the query, array( param1 => value1, param2 => value2)
 	 * @return array
 	 */
-	static public function segmentedFetchOne( $sql, $first, $last, $step, $params )
+	static public function segmentedFetchOne($sql, $first, $last, $step, $params)
 	{
 		$result = array();
-		if ($step > 0)
-		{
-			for ($i = $first; $i <= $last; $i += $step)
-			{
+		if ($step > 0) {
+			for ($i = $first; $i <= $last; $i += $step) {
 				$result[] = self::fetchOne($sql, array_merge($params, array($i, $i + $step)));
 			}
-		}
-		else
-		{
-			for ($i = $first; $i >= $last; $i += $step)
-			{
+		} else {
+			for ($i = $first; $i >= $last; $i += $step) {
 				$result[] = self::fetchOne($sql, array_merge($params, array($i, $i + $step)));
 			}
 		}
 		return $result;
 	}
-	
+
 	/**
 	 * Performs a SELECT on a table one chunk at a time and returns an array
 	 * of every fetched row.
-	 * 
+	 *
 	 * @param string $sql The SQL to perform. The last two conditions of the WHERE
 	 *                    expression must be as follows: 'id >= ? AND id < ?' where
 	 *                    'id' is the int id of the table.
@@ -321,31 +303,26 @@ class Piwik_Sql
 	 * @param array $parameters Parameters to bind in the query, array( param1 => value1, param2 => value2)
 	 * @return array
 	 */
-	static public function segmentedFetchAll( $sql, $first, $last, $step, $params )
+	static public function segmentedFetchAll($sql, $first, $last, $step, $params)
 	{
 		$result = array();
-		if ($step > 0)
-		{
-			for ($i = $first; $i <= $last; $i += $step)
-			{
+		if ($step > 0) {
+			for ($i = $first; $i <= $last; $i += $step) {
 				$currentParams = array_merge($params, array($i, $i + $step));
 				$result = array_merge($result, self::fetchAll($sql, $currentParams));
 			}
-		}
-		else
-		{
-			for ($i = $first; $i >= $last; $i += $step)
-			{
+		} else {
+			for ($i = $first; $i >= $last; $i += $step) {
 				$currentParams = array_merge($params, array($i, $i + $step));
 				$result = array_merge($result, self::fetchAll($sql, $currentParams));
 			}
 		}
 		return $result;
 	}
-	
+
 	/**
 	 * Performs a non-SELECT query on a table one chunk at a time.
-	 * 
+	 *
 	 * @param string $sql The SQL to perform. The last two conditions of the WHERE
 	 *                    expression must be as follows: 'id >= ? AND id < ?' where
 	 *                    'id' is the int id of the table.
@@ -355,35 +332,30 @@ class Piwik_Sql
 	 * @param array $parameters Parameters to bind in the query, array( param1 => value1, param2 => value2)
 	 * @return array
 	 */
-	static public function segmentedQuery( $sql, $first, $last, $step, $params )
+	static public function segmentedQuery($sql, $first, $last, $step, $params)
 	{
-		if ($step > 0)
-		{
-			for ($i = $first; $i <= $last; $i += $step)
-			{
+		if ($step > 0) {
+			for ($i = $first; $i <= $last; $i += $step) {
 				$currentParams = array_merge($params, array($i, $i + $step));
 				self::query($sql, $currentParams);
 			}
-		}
-		else
-		{
-			for ($i = $first; $i >= $last; $i += $step)
-			{
+		} else {
+			for ($i = $first; $i >= $last; $i += $step) {
 				$currentParams = array_merge($params, array($i, $i + $step));
 				self::query($sql, $currentParams);
 			}
 		}
 	}
-	
+
 	/**
 	 * Attempts to get a named lock. This function uses a timeout of 1s, but will
 	 * retry a set number of time.
-	 * 
+	 *
 	 * @param string $lockName The lock name.
 	 * @param int $maxRetries The max number of times to retry.
 	 * @return bool true if the lock was obtained, false if otherwise.
 	 */
-	static public function getDbLock( $lockName, $maxRetries = 30 )
+	static public function getDbLock($lockName, $maxRetries = 30)
 	{
 		/*
 		 * the server (e.g., shared hosting) may have a low wait timeout
@@ -395,24 +367,22 @@ class Piwik_Sql
 
 		$db = Zend_Registry::get('db');
 
-		while ($maxRetries > 0)
-		{
-			if ($db->fetchOne($sql, array($lockName)) == '1')
-			{
+		while ($maxRetries > 0) {
+			if ($db->fetchOne($sql, array($lockName)) == '1') {
 				return true;
 			}
 			$maxRetries--;
 		}
 		return false;
 	}
-	
+
 	/**
 	 * Releases a named lock.
-	 * 
+	 *
 	 * @param string $lockName The lock name.
 	 * @return bool true if the lock was released, false if otherwise.
 	 */
-	static public function releaseDbLock( $lockName )
+	static public function releaseDbLock($lockName)
 	{
 		$sql = 'SELECT RELEASE_LOCK(?)';
 
@@ -439,7 +409,7 @@ function Piwik_Exec($sqlQuery)
 /**
  * Executes a SQL query on the DB and returns the Zend_Db_Statement object
  * If you want to fetch data from the DB you should use the function Piwik_FetchAll()
- * 
+ *
  * See also http://framework.zend.com/manual/en/zend.db.statement.html
  *
  * @see Piwik_Sql::query
@@ -462,7 +432,7 @@ function Piwik_Query($sqlQuery, $parameters = array())
  * @param array   $parameters  Parameters to bind in the query, array( param1 => value1, param2 => value2)
  * @return array  (one row in the array per row fetched in the DB)
  */
-function Piwik_FetchAll( $sqlQuery, $parameters = array())
+function Piwik_FetchAll($sqlQuery, $parameters = array())
 {
 	return Piwik_Sql::fetchAll($sqlQuery, $parameters);
 }
@@ -490,19 +460,19 @@ function Piwik_FetchRow($sqlQuery, $parameters = array())
  * @param array   $parameters  Parameters to bind in the query, array( param1 => value1, param2 => value2)
  * @return string
  */
-function Piwik_FetchOne( $sqlQuery, $parameters = array())
+function Piwik_FetchOne($sqlQuery, $parameters = array())
 {
 	return Piwik_Sql::fetchOne($sqlQuery, $parameters);
 }
 
 /**
  * Fetches result from the database query as an array of associative arrays.
- * 
+ *
  * @param string $sqlQuery
  * @param array $parameters Parameters to bind in the query, array( param1 => value1, param2 => value2)
  * @return array
  */
-function Piwik_FetchAssoc( $sqlQuery, $parameters = array() )
+function Piwik_FetchAssoc($sqlQuery, $parameters = array())
 {
 	return Piwik_Sql::fetchAssoc($sqlQuery, $parameters);
 }
@@ -519,7 +489,7 @@ function Piwik_FetchAssoc( $sqlQuery, $parameters = array() )
  * @param array   $parameters       Parameters to bind in the query.
  * @return int  The total number of rows deleted.
  */
-function Piwik_DeleteAllRows( $table, $where, $maxRowsPerQuery, $parameters = array() )
+function Piwik_DeleteAllRows($table, $where, $maxRowsPerQuery, $parameters = array())
 {
 	return Piwik_Sql::deleteAllRows($table, $where, $maxRowsPerQuery, $parameters);
 }
@@ -532,7 +502,7 @@ function Piwik_DeleteAllRows( $table, $where, $maxRowsPerQuery, $parameters = ar
  * @param string|array  $tables  The name of the table to optimize or an array of tables to optimize.
  * @return Zend_Db_Statement
  */
-function Piwik_OptimizeTables( $tables )
+function Piwik_OptimizeTables($tables)
 {
 	return Piwik_Sql::optimizeTables($tables);
 }
@@ -545,7 +515,7 @@ function Piwik_OptimizeTables( $tables )
  * @param string|array  $tables  The name of the table to drop or an array of table names to drop.
  * @return Zend_Db_Statement
  */
-function Piwik_DropTables( $tables )
+function Piwik_DropTables($tables)
 {
 	return Piwik_Sql::dropTables($tables);
 }
@@ -559,7 +529,7 @@ function Piwik_DropTables( $tables )
  * @param string|array  $tablesToWrite  The table or tables to obtain 'write' locks on.
  * @return Zend_Db_Statement
  */
-function Piwik_LockTables( $tablesToRead, $tablesToWrite = array() )
+function Piwik_LockTables($tablesToRead, $tablesToWrite = array())
 {
 	return Piwik_Sql::lockTables($tablesToRead, $tablesToWrite);
 }
@@ -579,14 +549,14 @@ function Piwik_UnlockAllTables()
 /**
  * Performs a SELECT on a table one chunk at a time and returns the first
  * fetched value.
- * 
+ *
  * This function will break up a SELECT into several smaller SELECTs and
  * should be used when performing a SELECT that can take a long time to finish.
  * Using several smaller SELECTs will ensure that the table will not be locked
  * for too long.
- * 
+ *
  * @see Piwik_Sql::segmentedFetchFirst
- * 
+ *
  * @param string $sql The SQL to perform. The last two conditions of the WHERE
  *                    expression must be as follows: 'id >= ? AND id < ?' where
  *                    'id' is the int id of the table.
@@ -596,7 +566,7 @@ function Piwik_UnlockAllTables()
  * @param array $parameters Parameters to bind in the query, array( param1 => value1, param2 => value2)
  * @return string
  */
-function Piwik_SegmentedFetchFirst( $sql, $first, $last, $step, $params = array() )
+function Piwik_SegmentedFetchFirst($sql, $first, $last, $step, $params = array())
 {
 	return Piwik_Sql::segmentedFetchFirst($sql, $first, $last, $step, $params);
 }
@@ -604,14 +574,14 @@ function Piwik_SegmentedFetchFirst( $sql, $first, $last, $step, $params = array(
 /**
  * Performs a SELECT on a table one chunk at a time and returns an array
  * of every fetched value.
- * 
+ *
  * This function will break up a SELECT into several smaller SELECTs and
  * should be used when performing a SELECT that can take a long time to finish.
  * Using several smaller SELECTs will ensure that the table will not be locked
  * for too long.
- * 
+ *
  * @see Piwik_Sql::segmentedFetchFirst
- * 
+ *
  * @param string $sql The SQL to perform. The last two conditions of the WHERE
  *                    expression must be as follows: 'id >= ? AND id < ?' where
  *                    'id' is the int id of the table.
@@ -621,7 +591,7 @@ function Piwik_SegmentedFetchFirst( $sql, $first, $last, $step, $params = array(
  * @param array $parameters Parameters to bind in the query, array( param1 => value1, param2 => value2)
  * @return array
  */
-function Piwik_SegmentedFetchOne( $sql, $first, $last, $step, $params = array() )
+function Piwik_SegmentedFetchOne($sql, $first, $last, $step, $params = array())
 {
 	return Piwik_Sql::segmentedFetchOne($sql, $first, $last, $step, $params);
 }
@@ -629,14 +599,14 @@ function Piwik_SegmentedFetchOne( $sql, $first, $last, $step, $params = array()
 /**
  * Performs a SELECT on a table one chunk at a time and returns an array
  * of every fetched row.
- * 
+ *
  * This function will break up a SELECT into several smaller SELECTs and
  * should be used when performing a SELECT that can take a long time to finish.
  * Using several smaller SELECTs will ensure that the table will not be locked
  * for too long.
- * 
+ *
  * @see Piwik_Sql::segmentedFetchFirst
- * 
+ *
  * @param string $sql The SQL to perform. The last two conditions of the WHERE
  *                    expression must be as follows: 'id >= ? AND id < ?' where
  *                    'id' is the int id of the table.
@@ -646,7 +616,7 @@ function Piwik_SegmentedFetchOne( $sql, $first, $last, $step, $params = array()
  * @param array $parameters Parameters to bind in the query, array( param1 => value1, param2 => value2)
  * @return array
  */
-function Piwik_SegmentedFetchAll( $sql, $first, $last, $step, $params = array() )
+function Piwik_SegmentedFetchAll($sql, $first, $last, $step, $params = array())
 {
 	return Piwik_Sql::segmentedFetchAll($sql, $first, $last, $step, $params);
 }
@@ -654,14 +624,14 @@ function Piwik_SegmentedFetchAll( $sql, $first, $last, $step, $params = array()
 /**
  * Performs a query on a table one chunk at a time and returns an array of
  * every fetched row.
- * 
+ *
  * This function will break up a non-SELECT query (like an INSERT, UPDATE, or
  * DELETE) into smaller queries and should be used when performing an operation
  * that can take a long time to finish. Using several small queries will ensure
  * that the table will not be locked for too long.
- * 
+ *
  * @see Piwik_Sql::segmentedQuery
- * 
+ *
  * @param string $sql The SQL to perform. The last two conditions of the WHERE
  *                    expression must be as follows: 'id >= ? AND id < ?' where
  *                    'id' is the int id of the table.
@@ -671,7 +641,7 @@ function Piwik_SegmentedFetchAll( $sql, $first, $last, $step, $params = array()
  * @param array $parameters Parameters to bind in the query, array( param1 => value1, param2 => value2)
  * @return array
  */
-function Piwik_SegmentedQuery( $sql, $first, $last, $step, $params = array() )
+function Piwik_SegmentedQuery($sql, $first, $last, $step, $params = array())
 {
 	return Piwik_Sql::segmentedQuery($sql, $first, $last, $step, $params);
 }
@@ -679,27 +649,27 @@ function Piwik_SegmentedQuery( $sql, $first, $last, $step, $params = array() )
 /**
  * Attempts to get a named lock. This function uses a timeout of 1s, but will
  * retry a set number of time.
- * 
+ *
  * @see Piwik_Sql::getDbLock
- * 
+ *
  * @param string $lockName The lock name.
  * @param int $maxRetries The max number of times to retry.
  * @return bool true if the lock was obtained, false if otherwise.
  */
-function Piwik_GetDbLock( $lockName, $maxRetries = 30 )
+function Piwik_GetDbLock($lockName, $maxRetries = 30)
 {
 	return Piwik_Sql::getDbLock($lockName, $maxRetries);
 }
 
 /**
  * Releases a named lock.
- * 
+ *
  * @see Piwik_Sql::releaseDbLock
- * 
+ *
  * @param string $lockName The lock name.
  * @return bool true if the lock was released, false if otherwise.
  */
-function Piwik_ReleaseDbLock( $lockName )
+function Piwik_ReleaseDbLock($lockName)
 {
 	return Piwik_Sql::releaseDbLock($lockName);
 }
-- 
GitLab