dummy.lib.php 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552
  1. <?php
  2. /* vim: set expandtab sw=4 ts=4 sts=4: */
  3. /**
  4. * Fake database driver for testing purposes
  5. *
  6. * It has hardcoded results for given queries what makes easy to use it
  7. * in testsuite. Feel free to include other queries which your test will
  8. * need.
  9. *
  10. * @package PhpMyAdmin-DBI
  11. * @subpackage Dummy
  12. */
  13. if (! defined('PHPMYADMIN')) {
  14. exit;
  15. }
  16. /**
  17. * Array of queries this "driver" supports
  18. */
  19. $GLOBALS['dummy_queries'] = array(
  20. array('query' => 'SELECT 1', 'result' => array(array('1'))),
  21. array(
  22. 'query' => 'SELECT CURRENT_USER();',
  23. 'result' => array(array('pma_test@localhost')),
  24. ),
  25. array(
  26. 'query' => 'SELECT COUNT(*) FROM mysql.user',
  27. 'result' => false,
  28. ),
  29. array(
  30. 'query' => 'SHOW MASTER LOGS',
  31. 'result' => false,
  32. ),
  33. array(
  34. 'query' => 'SHOW STORAGE ENGINES',
  35. 'result' => array(
  36. array('Engine' => 'dummy', 'Support' => 'YES', 'Comment' => 'dummy comment'),
  37. array('Engine' => 'dummy2', 'Support' => 'NO', 'Comment' => 'dummy2 comment'),
  38. )
  39. ),
  40. array(
  41. 'query' => 'SHOW STATUS WHERE Variable_name LIKE \'Innodb\\_buffer\\_pool\\_%\' OR Variable_name = \'Innodb_page_size\';',
  42. 'result' => array(
  43. array('Innodb_buffer_pool_pages_data', 0),
  44. array('Innodb_buffer_pool_pages_dirty', 0),
  45. array('Innodb_buffer_pool_pages_flushed', 0),
  46. array('Innodb_buffer_pool_pages_free', 0),
  47. array('Innodb_buffer_pool_pages_misc', 0),
  48. array('Innodb_buffer_pool_pages_total', 4096),
  49. array('Innodb_buffer_pool_read_ahead_rnd', 0),
  50. array('Innodb_buffer_pool_read_ahead', 0),
  51. array('Innodb_buffer_pool_read_ahead_evicted', 0),
  52. array('Innodb_buffer_pool_read_requests', 64),
  53. array('Innodb_buffer_pool_reads', 32),
  54. array('Innodb_buffer_pool_wait_free', 0),
  55. array('Innodb_buffer_pool_write_requests', 64),
  56. array('Innodb_page_size', 16384),
  57. )
  58. ),
  59. array(
  60. 'query' => 'SHOW INNODB STATUS;',
  61. 'result' => false,
  62. ),
  63. array(
  64. 'query' => 'SELECT @@innodb_version;',
  65. 'result' => array(
  66. array('1.1.8'),
  67. )
  68. ),
  69. array(
  70. 'query' => 'SHOW GLOBAL VARIABLES LIKE \'innodb_file_per_table\';',
  71. 'result' => array(
  72. array('innodb_file_per_table', 'OFF'),
  73. )
  74. ),
  75. array(
  76. 'query' => 'SHOW GLOBAL VARIABLES LIKE \'innodb_file_format\';',
  77. 'result' => array(
  78. array('innodb_file_format', 'Antelope'),
  79. )
  80. ),
  81. array(
  82. 'query' => 'SHOW VARIABLES LIKE \'collation_server\'',
  83. 'result' => array(
  84. array('collation_server', 'utf8_general_ci'),
  85. )
  86. ),
  87. array(
  88. 'query' => 'SHOW VARIABLES LIKE \'language\';',
  89. 'result' => array(),
  90. ),
  91. array(
  92. 'query' => 'SHOW TABLES FROM `pma_test`;',
  93. 'result' => array(
  94. array('table1'),
  95. array('table2'),
  96. )
  97. ),
  98. array(
  99. 'query' => 'SHOW TABLES FROM `pmadb`',
  100. 'result' => array(
  101. array('column_info'),
  102. )
  103. ),
  104. array(
  105. 'query' => 'SHOW COLUMNS FROM `pma_test`.`table1`',
  106. 'columns' => array(
  107. 'Field', 'Type', 'Null', 'Key', 'Default', 'Extra'
  108. ),
  109. 'result' => array(
  110. array('i', 'int(11)', 'NO', 'PRI', 'NULL', 'auto_increment'),
  111. array('o', 'int(11)', 'NO', 'MUL', 'NULL', ''),
  112. )
  113. ),
  114. array(
  115. 'query' => 'SHOW INDEXES FROM `pma_test`.`table1` WHERE (Non_unique = 0)',
  116. 'result' => array(),
  117. ),
  118. array(
  119. 'query' => 'SHOW COLUMNS FROM `pma_test`.`table2`',
  120. 'columns' => array(
  121. 'Field', 'Type', 'Null', 'Key', 'Default', 'Extra'
  122. ),
  123. 'result' => array(
  124. array('i', 'int(11)', 'NO', 'PRI', 'NULL', 'auto_increment'),
  125. array('o', 'int(11)', 'NO', 'MUL', 'NULL', ''),
  126. )
  127. ),
  128. array(
  129. 'query' => 'SHOW INDEXES FROM `pma_test`.`table1`',
  130. 'result' => array(),
  131. ),
  132. array(
  133. 'query' => 'SHOW INDEXES FROM `pma_test`.`table2`',
  134. 'result' => array(),
  135. ),
  136. array(
  137. 'query' => 'SHOW COLUMNS FROM `pma`.`table1`',
  138. 'columns' => array(
  139. 'Field', 'Type', 'Null', 'Key', 'Default', 'Extra', 'Privileges', 'Comment'
  140. ),
  141. 'result' => array(
  142. array('i', 'int(11)', 'NO', 'PRI', 'NULL', 'auto_increment', 'select,insert,update,references', ''),
  143. array('o', 'varchar(100)', 'NO', 'MUL', 'NULL', '', 'select,insert,update,references', ''),
  144. )
  145. ),
  146. array(
  147. 'query' => 'SELECT * FROM information_schema.CHARACTER_SETS',
  148. 'columns' => array('CHARACTER_SET_NAME', 'DEFAULT_COLLATE_NAME', 'DESCRIPTION', 'MAXLEN'),
  149. 'result' => array(
  150. array('utf8', 'utf8_general_ci', 'UTF-8 Unicode', 3),
  151. )
  152. ),
  153. array(
  154. 'query' => 'SELECT * FROM information_schema.COLLATIONS',
  155. 'columns' => array(
  156. 'COLLATION_NAME', 'CHARACTER_SET_NAME', 'ID', 'IS_DEFAULT', 'IS_COMPILED', 'SORTLEN'
  157. ),
  158. 'result' => array(
  159. array('utf8_general_ci', 'utf8', 33, 'Yes', 'Yes', 1),
  160. array('utf8_bin', 'utf8', 83, '', 'Yes', 1),
  161. )
  162. ),
  163. array(
  164. 'query' => 'SELECT `TABLE_NAME` FROM `INFORMATION_SCHEMA`.`TABLES` WHERE `TABLE_SCHEMA`=\'pma_test\' AND `TABLE_TYPE`=\'BASE TABLE\'',
  165. 'result' => array(),
  166. ),
  167. array(
  168. 'query' => 'SELECT upper(plugin_name) f FROM data_dictionary.plugins WHERE plugin_name IN (\'MYSQL_PASSWORD\',\'ROT13\') AND plugin_type = \'Function\' AND is_active',
  169. 'columns' => array('f'),
  170. 'result' => array(array('ROT13')),
  171. ),
  172. array(
  173. 'query' => 'SELECT `column_name`, `mimetype`, `transformation`, `transformation_options` FROM `pmadb`.`column_info` WHERE `db_name` = \'pma_test\' AND `table_name` = \'table1\' AND ( `mimetype` != \'\' OR `transformation` != \'\' OR `transformation_options` != \'\')',
  174. 'columns' => array('column_name', 'mimetype', 'transformation', 'transformation_options'),
  175. 'result' => array(
  176. array('o', 'text/plain', 'sql'),
  177. )
  178. ),
  179. array(
  180. 'query' => 'SELECT TABLE_NAME FROM information_schema.VIEWS WHERE TABLE_SCHEMA = \'pma_test\' AND TABLE_NAME = \'table1\'',
  181. 'result' => array(),
  182. ),
  183. array(
  184. 'query' => 'SELECT *, `TABLE_SCHEMA` AS `Db`, `TABLE_NAME` AS `Name`, `TABLE_TYPE` AS `TABLE_TYPE`, `ENGINE` AS `Engine`, `ENGINE` AS `Type`, `VERSION` AS `Version`, `ROW_FORMAT` AS `Row_format`, `TABLE_ROWS` AS `Rows`, `AVG_ROW_LENGTH` AS `Avg_row_length`, `DATA_LENGTH` AS `Data_length`, `MAX_DATA_LENGTH` AS `Max_data_length`, `INDEX_LENGTH` AS `Index_length`, `DATA_FREE` AS `Data_free`, `AUTO_INCREMENT` AS `Auto_increment`, `CREATE_TIME` AS `Create_time`, `UPDATE_TIME` AS `Update_time`, `CHECK_TIME` AS `Check_time`, `TABLE_COLLATION` AS `Collation`, `CHECKSUM` AS `Checksum`, `CREATE_OPTIONS` AS `Create_options`, `TABLE_COMMENT` AS `Comment` FROM `information_schema`.`TABLES` t WHERE BINARY `TABLE_SCHEMA` IN (\'pma_test\') AND t.`TABLE_NAME` = \'table1\' ORDER BY Name ASC',
  185. 'columns' => array('TABLE_CATALOG', 'TABLE_SCHEMA', 'TABLE_NAME', 'TABLE_TYPE', 'ENGINE', 'VERSION', 'ROW_FORMAT', 'TABLE_ROWS', 'AVG_ROW_LENGTH', 'DATA_LENGTH', 'MAX_DATA_LENGTH', 'INDEX_LENGTH', 'DATA_FREE', 'AUTO_INCREMENT', 'CREATE_TIME', 'UPDATE_TIME', 'CHECK_TIME', 'TABLE_COLLATION', 'CHECKSUM', 'CREATE_OPTIONS', 'TABLE_COMMENT', 'Db', 'Name', 'TABLE_TYPE', 'Engine', 'Type', 'Version', 'Row_format', 'Rows', 'Avg_row_length', 'Data_length', 'Max_data_length', 'Index_length', 'Data_free', 'Auto_increment', 'Create_time', 'Update_time', 'Check_time', 'Collation', 'Checksum', 'Create_options', 'Comment'),
  186. 'result' => array(
  187. array('def', 'smash', 'issues_issue', 'BASE TABLE', 'InnoDB', '10', 'Compact', '9136', '862', '7880704', '0', '1032192', '420478976', '155862', '2012-08-29 13:28:28', 'NULL', 'NULL', 'utf8_general_ci', 'NULL', '', '', 'smash', 'issues_issue', 'BASE TABLE', 'InnoDB', 'InnoDB', '10', 'Compact', '9136', '862', '7880704', '0', '1032192', '420478976', '155862', '2012-08-29 13:28:28', 'NULL', 'NULL', 'utf8_general_ci', 'NULL'),
  188. ),
  189. ),
  190. array(
  191. 'query' => 'SELECT *, `TABLE_SCHEMA` AS `Db`, `TABLE_NAME` AS `Name`, `TABLE_TYPE` AS `TABLE_TYPE`, `ENGINE` AS `Engine`, `ENGINE` AS `Type`, `VERSION` AS `Version`, `ROW_FORMAT` AS `Row_format`, `TABLE_ROWS` AS `Rows`, `AVG_ROW_LENGTH` AS `Avg_row_length`, `DATA_LENGTH` AS `Data_length`, `MAX_DATA_LENGTH` AS `Max_data_length`, `INDEX_LENGTH` AS `Index_length`, `DATA_FREE` AS `Data_free`, `AUTO_INCREMENT` AS `Auto_increment`, `CREATE_TIME` AS `Create_time`, `UPDATE_TIME` AS `Update_time`, `CHECK_TIME` AS `Check_time`, `TABLE_COLLATION` AS `Collation`, `CHECKSUM` AS `Checksum`, `CREATE_OPTIONS` AS `Create_options`, `TABLE_COMMENT` AS `Comment` FROM `information_schema`.`TABLES` t WHERE `TABLE_SCHEMA` IN (\'pma_test\') AND t.`TABLE_NAME` = \'table1\' ORDER BY Name ASC',
  192. 'columns' => array('TABLE_CATALOG', 'TABLE_SCHEMA', 'TABLE_NAME', 'TABLE_TYPE', 'ENGINE', 'VERSION', 'ROW_FORMAT', 'TABLE_ROWS', 'AVG_ROW_LENGTH', 'DATA_LENGTH', 'MAX_DATA_LENGTH', 'INDEX_LENGTH', 'DATA_FREE', 'AUTO_INCREMENT', 'CREATE_TIME', 'UPDATE_TIME', 'CHECK_TIME', 'TABLE_COLLATION', 'CHECKSUM', 'CREATE_OPTIONS', 'TABLE_COMMENT', 'Db', 'Name', 'TABLE_TYPE', 'Engine', 'Type', 'Version', 'Row_format', 'Rows', 'Avg_row_length', 'Data_length', 'Max_data_length', 'Index_length', 'Data_free', 'Auto_increment', 'Create_time', 'Update_time', 'Check_time', 'Collation', 'Checksum', 'Create_options', 'Comment'),
  193. 'result' => array(
  194. array('def', 'smash', 'issues_issue', 'BASE TABLE', 'InnoDB', '10', 'Compact', '9136', '862', '7880704', '0', '1032192', '420478976', '155862', '2012-08-29 13:28:28', 'NULL', 'NULL', 'utf8_general_ci', 'NULL', '', '', 'smash', 'issues_issue', 'BASE TABLE', 'InnoDB', 'InnoDB', '10', 'Compact', '9136', '862', '7880704', '0', '1032192', '420478976', '155862', '2012-08-29 13:28:28', 'NULL', 'NULL', 'utf8_general_ci', 'NULL'),
  195. ),
  196. ),
  197. array(
  198. 'query' => 'SELECT COUNT(*) FROM `pma_test`.`table1`',
  199. 'result' => array(array(0)),
  200. ),
  201. array(
  202. 'query' => 'SELECT `PRIVILEGE_TYPE` FROM `INFORMATION_SCHEMA`.'
  203. . '`USER_PRIVILEGES`'
  204. . ' WHERE GRANTEE=\'\'\'pma_test\'\'@\'\'localhost\'\'\''
  205. . ' AND PRIVILEGE_TYPE=\'TRIGGER\'',
  206. 'result' => array(),
  207. ),
  208. array(
  209. 'query' => 'SELECT `PRIVILEGE_TYPE` FROM `INFORMATION_SCHEMA`.'
  210. . '`SCHEMA_PRIVILEGES`'
  211. . ' WHERE GRANTEE=\'\'\'pma_test\'\'@\'\'localhost\'\'\''
  212. . ' AND PRIVILEGE_TYPE=\'TRIGGER\' AND \'pma\\\\_test\''
  213. . ' REGEXP REPLACE(REPLACE(TABLE_SCHEMA, \'_\', \'.\'), \'%\', \'.*\')',
  214. 'result' => array(),
  215. ),
  216. array(
  217. 'query' => 'SELECT `PRIVILEGE_TYPE` FROM `INFORMATION_SCHEMA`.'
  218. . '`TABLE_PRIVILEGES`'
  219. . ' WHERE GRANTEE=\'\'\'pma_test\'\'@\'\'localhost\'\'\''
  220. . ' AND PRIVILEGE_TYPE=\'TRIGGER\' AND \'pma\\\\_test\''
  221. . ' REGEXP REPLACE(REPLACE(TABLE_SCHEMA, \'_\', \'.\'), \'%\', \'.*\')'
  222. . ' AND TABLE_NAME=\'table1\'',
  223. 'result' => array(),
  224. ),
  225. array(
  226. 'query' => 'SELECT `PRIVILEGE_TYPE` FROM `INFORMATION_SCHEMA`.'
  227. . '`USER_PRIVILEGES`'
  228. . ' WHERE GRANTEE=\'\'\'pma_test\'\'@\'\'localhost\'\'\''
  229. . ' AND PRIVILEGE_TYPE=\'EVENT\'',
  230. 'result' => array(),
  231. ),
  232. array(
  233. 'query' => 'SELECT `PRIVILEGE_TYPE` FROM `INFORMATION_SCHEMA`.'
  234. . '`SCHEMA_PRIVILEGES`'
  235. . ' WHERE GRANTEE=\'\'\'pma_test\'\'@\'\'localhost\'\'\''
  236. . ' AND PRIVILEGE_TYPE=\'EVENT\' AND \'pma\\\\_test\''
  237. . ' REGEXP REPLACE(REPLACE(TABLE_SCHEMA, \'_\', \'.\'), \'%\', \'.*\')',
  238. 'result' => array(),
  239. ),
  240. array(
  241. 'query' => 'SELECT `PRIVILEGE_TYPE` FROM `INFORMATION_SCHEMA`.'
  242. . '`TABLE_PRIVILEGES`'
  243. . ' WHERE GRANTEE=\'\'\'pma_test\'\'@\'\'localhost\'\'\''
  244. . ' AND PRIVILEGE_TYPE=\'EVENT\''
  245. . ' AND TABLE_SCHEMA=\'pma\\\\_test\' AND TABLE_NAME=\'table1\'',
  246. 'result' => array(),
  247. ),
  248. array(
  249. 'query' => 'RENAME TABLE `pma_test`.`table1` TO `pma_test`.`table3`;',
  250. 'result' => array(),
  251. ),
  252. array(
  253. 'query' => 'SELECT TRIGGER_SCHEMA, TRIGGER_NAME, EVENT_MANIPULATION, EVENT_OBJECT_TABLE, ACTION_TIMING, ACTION_STATEMENT, EVENT_OBJECT_SCHEMA, EVENT_OBJECT_TABLE, DEFINER FROM information_schema.TRIGGERS WHERE TRIGGER_SCHEMA= \'pma_test\' AND EVENT_OBJECT_TABLE = \'table1\';',
  254. 'result' => array(),
  255. ),
  256. array(
  257. 'query' => 'SHOW TABLES FROM `pma`;',
  258. 'result' => array(),
  259. ),
  260. array(
  261. 'query' => 'SHOW TABLES FROM `mysql`;',
  262. 'result' => array(),
  263. ),
  264. array(
  265. 'query' => "SELECT `PRIVILEGE_TYPE` FROM `INFORMATION_SCHEMA`.`SCHEMA_PRIVILEGES` WHERE GRANTEE='''pma_test''@''localhost''' AND PRIVILEGE_TYPE='TRIGGER' AND 'mysql' REGEXP REPLACE(REPLACE(TABLE_SCHEMA, '_', '.'), '%', '.*')",
  266. 'result' => array(),
  267. ),
  268. array(
  269. 'query' => "SELECT `PRIVILEGE_TYPE` FROM `INFORMATION_SCHEMA`.`SCHEMA_PRIVILEGES` WHERE GRANTEE='''pma_test''@''localhost''' AND PRIVILEGE_TYPE='EVENT' AND 'mysql' REGEXP REPLACE(REPLACE(TABLE_SCHEMA, '_', '.'), '%', '.*')",
  270. 'result' => array(),
  271. ),
  272. array(
  273. 'query' => "SELECT `PRIVILEGE_TYPE` FROM `INFORMATION_SCHEMA`.`SCHEMA_PRIVILEGES` WHERE GRANTEE='''pma_test''@''localhost''' AND PRIVILEGE_TYPE='EVENT' AND TABLE_SCHEMA='pma'",
  274. 'result' => array(),
  275. ),
  276. array(
  277. 'query' => "SELECT `PRIVILEGE_TYPE` FROM `INFORMATION_SCHEMA`.`SCHEMA_PRIVILEGES` WHERE GRANTEE='''pma_test''@''localhost''' AND PRIVILEGE_TYPE='EVENT' AND 'pma' REGEXP REPLACE(REPLACE(TABLE_SCHEMA, '_', '.'), '%', '.*')",
  278. 'result' => array(),
  279. ),
  280. array(
  281. 'query' => "SELECT `PRIVILEGE_TYPE` FROM `INFORMATION_SCHEMA`.`SCHEMA_PRIVILEGES` WHERE GRANTEE='''pma_test''@''localhost''' AND PRIVILEGE_TYPE='TRIGGER' AND 'pma' REGEXP REPLACE(REPLACE(TABLE_SCHEMA, '_', '.'), '%', '.*')",
  282. 'result' => array(),
  283. ),
  284. array(
  285. 'query' => "SELECT `PRIVILEGE_TYPE` FROM `INFORMATION_SCHEMA`.`SCHEMA_PRIVILEGES` WHERE GRANTEE='''pma_test''@''localhost''' AND PRIVILEGE_TYPE='TRIGGER' AND TABLE_SCHEMA='pma'",
  286. 'result' => array(),
  287. ),
  288. );
  289. /**
  290. * Current database.
  291. */
  292. $GLOBALS['dummy_db'] = '';
  293. /* Some basic setup for dummy driver */
  294. $GLOBALS['userlink'] = 1;
  295. $GLOBALS['controllink'] = 2;
  296. $GLOBALS['cfg']['DBG']['sql'] = false;
  297. if (! defined('PMA_DRIZZLE')) {
  298. define('PMA_DRIZZLE', 0);
  299. }
  300. /**
  301. * Run the multi query and output the results
  302. *
  303. * @param mysqli $link mysqli object
  304. * @param string $query multi query statement to execute
  305. *
  306. * @return boolean false always false since mysql extention not support
  307. * for multi query executions
  308. */
  309. function PMA_DBI_real_multi_query($link, $query)
  310. {
  311. return false;
  312. }
  313. /**
  314. * connects to the database server
  315. *
  316. * @param string $user mysql user name
  317. * @param string $password mysql user password
  318. * @param bool $is_controluser whether this is a control user connection
  319. * @param array $server host/port/socket/persistent
  320. * @param bool $auxiliary_connection (when true, don't go back to login if
  321. * connection fails)
  322. *
  323. * @return mixed false on error or a mysqli object on success
  324. */
  325. function PMA_DBI_connect(
  326. $user, $password, $is_controluser = false, $server = null,
  327. $auxiliary_connection = false
  328. ) {
  329. return true;
  330. }
  331. /**
  332. * selects given database
  333. *
  334. * @param string $dbname name of db to select
  335. * @param resource $link mysql link resource
  336. *
  337. * @return bool
  338. */
  339. function PMA_DBI_select_db($dbname, $link = null)
  340. {
  341. $GLOBALS['dummy_db'] = $dbname;
  342. return true;
  343. }
  344. /**
  345. * runs a query and returns the result
  346. *
  347. * @param string $query query to run
  348. * @param resource $link mysql link resource
  349. * @param int $options query options
  350. *
  351. * @return mixed
  352. */
  353. function PMA_DBI_real_query($query, $link = null, $options = 0)
  354. {
  355. $query = trim(preg_replace('/ */', ' ', str_replace("\n", ' ', $query)));
  356. for ($i = 0; $i < count($GLOBALS['dummy_queries']); $i++) {
  357. if ($GLOBALS['dummy_queries'][$i]['query'] == $query) {
  358. $GLOBALS['dummy_queries'][$i]['pos'] = 0;
  359. if (is_array($GLOBALS['dummy_queries'][$i]['result'])) {
  360. return $i;
  361. } else {
  362. return false;
  363. }
  364. }
  365. }
  366. echo "Not supported query: $query\n";
  367. return false;
  368. }
  369. /**
  370. * returns result data from $result
  371. *
  372. * @param resource $result result MySQL result
  373. *
  374. * @return array
  375. */
  376. function PMA_DBI_fetch_any($result)
  377. {
  378. $query_data = $GLOBALS['dummy_queries'][$result];
  379. if ($query_data['pos'] >= count($query_data['result'])) {
  380. return false;
  381. }
  382. $ret = $query_data['result'][$query_data['pos']];
  383. $GLOBALS['dummy_queries'][$result]['pos'] += 1;
  384. return $ret;
  385. }
  386. /**
  387. * returns array of rows with associative and numeric keys from $result
  388. *
  389. * @param resource $result result MySQL result
  390. *
  391. * @return array
  392. */
  393. function PMA_DBI_fetch_array($result)
  394. {
  395. $data = PMA_DBI_fetch_any($result);
  396. if (is_array($data) && isset($GLOBALS['dummy_queries'][$result]['columns'])) {
  397. foreach ($data as $key => $val) {
  398. $data[$GLOBALS['dummy_queries'][$result]['columns'][$key]] = $val;
  399. }
  400. return $data;
  401. }
  402. return $data;
  403. }
  404. /**
  405. * returns array of rows with associative keys from $result
  406. *
  407. * @param resource $result MySQL result
  408. *
  409. * @return array
  410. */
  411. function PMA_DBI_fetch_assoc($result)
  412. {
  413. $data = PMA_DBI_fetch_any($result);
  414. if (is_array($data) && isset($GLOBALS['dummy_queries'][$result]['columns'])) {
  415. $ret = array();
  416. foreach ($data as $key => $val) {
  417. $ret[$GLOBALS['dummy_queries'][$result]['columns'][$key]] = $val;
  418. }
  419. return $ret;
  420. }
  421. return $data;
  422. }
  423. /**
  424. * returns array of rows with numeric keys from $result
  425. *
  426. * @param resource $result MySQL result
  427. *
  428. * @return array
  429. */
  430. function PMA_DBI_fetch_row($result)
  431. {
  432. $data = PMA_DBI_fetch_any($result);
  433. return $data;
  434. }
  435. /**
  436. * Adjusts the result pointer to an arbitrary row in the result
  437. *
  438. * @param resource $result database result
  439. * @param integer $offset offset to seek
  440. *
  441. * @return bool true on success, false on failure
  442. */
  443. function PMA_DBI_data_seek($result, $offset)
  444. {
  445. if ($offset > count($GLOBALS['dummy_queries'][$result]['result'])) {
  446. return false;
  447. }
  448. $GLOBALS['dummy_queries'][$result]['pos'] = $offset;
  449. return true;
  450. }
  451. /**
  452. * Frees memory associated with the result
  453. *
  454. * @param resource $result database result
  455. *
  456. * @return void
  457. */
  458. function PMA_DBI_free_result($result)
  459. {
  460. return;
  461. }
  462. /**
  463. * Check if there are any more query results from a multi query
  464. *
  465. * @return bool false
  466. */
  467. function PMA_DBI_more_results()
  468. {
  469. return false;
  470. }
  471. /**
  472. * Prepare next result from multi_query
  473. *
  474. * @return boo false
  475. */
  476. function PMA_DBI_next_result()
  477. {
  478. return false;
  479. }
  480. /**
  481. * returns the number of rows returned by last query
  482. *
  483. * @param resource $result MySQL result
  484. *
  485. * @return string|int
  486. */
  487. function PMA_DBI_num_rows($result)
  488. {
  489. if (!is_bool($result)) {
  490. return count($GLOBALS['dummy_queries'][$result]['result']);
  491. } else {
  492. return 0;
  493. }
  494. }
  495. /**
  496. * returns the number of rows affected by last query
  497. *
  498. * @param resource $link the mysql object
  499. * @param bool $get_from_cache whether to retrieve from cache
  500. *
  501. * @return string|int
  502. */
  503. function PMA_DBI_affected_rows($link = null, $get_from_cache = true)
  504. {
  505. return 0;
  506. }
  507. /**
  508. * return number of fields in given $result
  509. *
  510. * @param resource $result MySQL result
  511. *
  512. * @return int field count
  513. */
  514. function PMA_DBI_num_fields($result)
  515. {
  516. if (isset($GLOBALS['dummy_queries'][$result]['columns'])) {
  517. return count($GLOBALS['dummy_queries'][$result]['columns']);
  518. } else {
  519. return 0;
  520. }
  521. }
  522. /**
  523. * returns last error message or false if no errors occured
  524. *
  525. * @param resource $link mysql link
  526. *
  527. * @return string|bool $error or false
  528. */
  529. function PMA_DBI_getError($link = null)
  530. {
  531. return false;
  532. }