Extend Dummy driver to be able to inject expected queries results
Signed-off-by: Michal Čihař <michal@cihar.com>
This commit is contained in:
parent
ce49be7e07
commit
bb95ecf852
@ -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];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -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'));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Loading…
Reference in New Issue
Block a user