diff --git a/libraries/dbi/DBIDummy.php b/libraries/dbi/DBIDummy.php index dd6bd79a9c..0fd2f00503 100644 --- a/libraries/dbi/DBIDummy.php +++ b/libraries/dbi/DBIDummy.php @@ -892,6 +892,9 @@ if (!defined('PMA_MARIADB')) { */ class DBIDummy implements DBIExtension { + private $_queries = array(); + const OFFSET_GLOBAL = 1000; + /** * connects to the database server * @@ -936,6 +939,18 @@ class DBIDummy implements DBIExtension public function realQuery($query, $link = null, $options = 0) { $query = trim(preg_replace('/ */', ' ', str_replace("\n", ' ', $query))); + for ($i = 0, $nb = count($this->_queries); $i < $nb; $i++) { + if ($this->_queries[$i]['query'] != $query) { + continue; + } + + $this->_queries[$i]['pos'] = 0; + if (!is_array($this->_queries[$i]['result'])) { + return false; + } + + return $i; + } for ($i = 0, $nb = count($GLOBALS['dummy_queries']); $i < $nb; $i++) { if ($GLOBALS['dummy_queries'][$i]['query'] != $query) { continue; @@ -946,7 +961,7 @@ class DBIDummy implements DBIExtension return false; } - return $i; + return $i + self::OFFSET_GLOBAL; } echo "Not supported query: $query\n"; @@ -975,12 +990,12 @@ class DBIDummy implements DBIExtension */ public function fetchAny($result) { - $query_data = $GLOBALS['dummy_queries'][$result]; + $query_data = &$this->getQueryData($result); if ($query_data['pos'] >= count($query_data['result'])) { return false; } $ret = $query_data['result'][$query_data['pos']]; - $GLOBALS['dummy_queries'][$result]['pos'] += 1; + $query_data['pos'] += 1; return $ret; } @@ -994,15 +1009,16 @@ class DBIDummy implements DBIExtension */ public function fetchArray($result) { + $query_data = &$this->getQueryData($result); $data = $this->fetchAny($result); if (!is_array($data) - || !isset($GLOBALS['dummy_queries'][$result]['columns']) + || !isset($query_data['columns']) ) { return $data; } foreach ($data as $key => $val) { - $data[$GLOBALS['dummy_queries'][$result]['columns'][$key]] = $val; + $data[$query_data['columns'][$key]] = $val; } return $data; @@ -1018,15 +1034,14 @@ class DBIDummy implements DBIExtension public function fetchAssoc($result) { $data = $this->fetchAny($result); - if (!is_array($data) - || !isset($GLOBALS['dummy_queries'][$result]['columns']) - ) { + $query_data = &$this->getQueryData($result); + if (!is_array($data) || !isset($query_data['columns'])) { return $data; } $ret = array(); foreach ($data as $key => $val) { - $ret[$GLOBALS['dummy_queries'][$result]['columns'][$key]] = $val; + $ret[$query_data['columns'][$key]] = $val; } return $ret; @@ -1056,10 +1071,11 @@ class DBIDummy implements DBIExtension */ public function dataSeek($result, $offset) { - if ($offset > count($GLOBALS['dummy_queries'][$result]['result'])) { + $query_data = &$this->getQueryData($result); + if ($offset > count($query_data['result'])) { return false; } - $GLOBALS['dummy_queries'][$result]['pos'] = $offset; + $query_data['pos'] = $offset; return true; } @@ -1171,7 +1187,9 @@ class DBIDummy implements DBIExtension return 0; } - return count($GLOBALS['dummy_queries'][$result]['result']); + $query_data = &$this->getQueryData($result); + + return count($query_data['result']); } /** @@ -1208,11 +1226,12 @@ class DBIDummy implements DBIExtension */ public function numFields($result) { - if (!isset($GLOBALS['dummy_queries'][$result]['columns'])) { + $query_data = &$this->getQueryData($result); + if (!isset($query_data['columns'])) { return 0; } - return count($GLOBALS['dummy_queries'][$result]['columns']); + return count($query_data['columns']); } /** @@ -1266,4 +1285,36 @@ class DBIDummy implements DBIExtension { return $str; } + + /** + * Adds query result for testing + * + * @param string $query SQL + * @param array $result Expected result + * + * @return void + */ + public function setResult($query, $result) + { + $this->_queries[] = array( + 'query' => $query, + 'result' => $result, + ); + } + + /** + * Return query data for ID + * + * @param object $result result set identifier + * + * @return array + */ + private function &getQueryData($result) + { + if ($result >= self::OFFSET_GLOBAL) { + return $GLOBALS['dummy_queries'][$result - self::OFFSET_GLOBAL]; + } else { + return $this->_queries[$result]; + } + } } diff --git a/test/libraries/database_interface_test.php b/test/libraries/database_interface_test.php index 16f09d26ac..6e51d81314 100644 --- a/test/libraries/database_interface_test.php +++ b/test/libraries/database_interface_test.php @@ -27,6 +27,7 @@ class PMA_DBI_Test extends PHPUnit_Framework_TestCase { $GLOBALS['cfg']['DBG']['sql'] = false; $GLOBALS['cfg']['IconvExtraParams'] = ''; + $GLOBALS['server'] = 1; } /** @@ -38,7 +39,7 @@ class PMA_DBI_Test extends PHPUnit_Framework_TestCase */ function testQuery() { - $this->assertEquals(0, $GLOBALS['dbi']->tryQuery('SELECT 1')); + $this->assertEquals(1000, $GLOBALS['dbi']->tryQuery('SELECT 1')); } /**