2 /* vim: set expandtab sw=4 ts=4 sts=4: */
4 * Functionality for the navigation tree
6 * @package PhpMyAdmin-Navigation
8 if (! defined('PHPMYADMIN')) {
13 * Represents a database node in the navigation tree
15 class Node_Database
extends Node
18 * Initialises the class
20 * @param string $name An identifier for the new node
21 * @param int $type Type of node, may be one of CONTAINER or OBJECT
22 * @param bool $is_group Whether this object has been created
23 * while grouping nodes
25 * @return Node_Database
27 public function __construct($name, $type = Node
::OBJECT, $is_group = false)
29 parent
::__construct($name, $type, $is_group);
30 $this->icon
= PMA_Util
::getImage('s_db.png');
32 'text' => $GLOBALS['cfg']['DefaultTabDatabase']
33 . '?server=' . $GLOBALS['server']
34 . '&db=%1$s&token=' . $GLOBALS['token'],
35 'icon' => 'db_operations.php?server=' . $GLOBALS['server']
36 . '&db=%1$s&token=' . $GLOBALS['token']
41 * Returns the number of children of type $type present inside this container
42 * This method is overridden by the Node_Database and Node_Table classes
44 * @param string $type The type of item we are looking for
45 * ('tables', 'views', etc)
46 * @param string $searchClause A string used to filter the results of the query
50 public function getPresence($type = '', $searchClause = '')
53 $db = $this->real_name
;
56 if (! $GLOBALS['cfg']['Servers'][$GLOBALS['server']]['DisableIS']) {
57 $db = PMA_Util
::sqlAddSlashes($db);
58 $query = "SELECT COUNT(*) ";
59 $query .= "FROM `INFORMATION_SCHEMA`.`TABLES` ";
60 $query .= "WHERE `TABLE_SCHEMA`='$db' ";
61 $query .= "AND `TABLE_TYPE`='BASE TABLE' ";
62 if (! empty($searchClause)) {
63 $query .= "AND `TABLE_NAME` LIKE '%";
64 $query .= PMA_Util
::sqlAddSlashes(
69 $retval = (int)PMA_DBI_fetch_value($query);
71 $query = "SHOW FULL TABLES FROM ";
72 $query .= PMA_Util
::backquote($db);
73 $query .= " WHERE `Table_type`='BASE TABLE' ";
74 if (! empty($searchClause)) {
75 $query .= "AND " . PMA_Util
::backquote(
78 $query .= " LIKE '%" . PMA_Util
::sqlAddSlashes(
83 $retval = PMA_DBI_num_rows(PMA_DBI_try_query($query));
87 if (! $GLOBALS['cfg']['Servers'][$GLOBALS['server']]['DisableIS']) {
88 $db = PMA_Util
::sqlAddSlashes($db);
89 $query = "SELECT COUNT(*) ";
90 $query .= "FROM `INFORMATION_SCHEMA`.`TABLES` ";
91 $query .= "WHERE `TABLE_SCHEMA`='$db' ";
92 $query .= "AND `TABLE_TYPE`!='BASE TABLE' ";
93 if (! empty($searchClause)) {
94 $query .= "AND `TABLE_NAME` LIKE '%";
95 $query .= PMA_Util
::sqlAddSlashes(
100 $retval = (int)PMA_DBI_fetch_value($query);
102 $query = "SHOW FULL TABLES FROM ";
103 $query .= PMA_Util
::backquote($db);
104 $query .= " WHERE `Table_type`!='BASE TABLE' ";
105 if (! empty($searchClause)) {
106 $query .= "AND " . PMA_Util
::backquote(
109 $query .= " LIKE '%" . PMA_Util
::sqlAddSlashes(
114 $retval = PMA_DBI_num_rows(PMA_DBI_try_query($query));
118 if (! $GLOBALS['cfg']['Servers'][$GLOBALS['server']]['DisableIS']) {
119 $db = PMA_Util
::sqlAddSlashes($db);
120 $query = "SELECT COUNT(*) ";
121 $query .= "FROM `INFORMATION_SCHEMA`.`ROUTINES` ";
122 $query .= "WHERE `ROUTINE_SCHEMA`='$db'";
123 $query .= "AND `ROUTINE_TYPE`='PROCEDURE' ";
124 if (! empty($searchClause)) {
125 $query .= "AND `ROUTINE_NAME` LIKE '%";
126 $query .= PMA_Util
::sqlAddSlashes(
131 $retval = (int)PMA_DBI_fetch_value($query);
133 $db = PMA_Util
::sqlAddSlashes($db);
134 $query = "SHOW PROCEDURE STATUS WHERE `Db`='$db' ";
135 if (! empty($searchClause)) {
136 $query .= "AND `Name` LIKE '%";
137 $query .= PMA_Util
::sqlAddSlashes(
142 $retval = PMA_DBI_num_rows(PMA_DBI_try_query($query));
146 if (! $GLOBALS['cfg']['Servers'][$GLOBALS['server']]['DisableIS']) {
147 $db = PMA_Util
::sqlAddSlashes($db);
148 $query = "SELECT COUNT(*) ";
149 $query .= "FROM `INFORMATION_SCHEMA`.`ROUTINES` ";
150 $query .= "WHERE `ROUTINE_SCHEMA`='$db' ";
151 $query .= "AND `ROUTINE_TYPE`='FUNCTION' ";
152 if (! empty($searchClause)) {
153 $query .= "AND `ROUTINE_NAME` LIKE '%";
154 $query .= PMA_Util
::sqlAddSlashes(
159 $retval = (int)PMA_DBI_fetch_value($query);
161 $db = PMA_Util
::sqlAddSlashes($db);
162 $query = "SHOW FUNCTION STATUS WHERE `Db`='$db' ";
163 if (! empty($searchClause)) {
164 $query .= "AND `Name` LIKE '%";
165 $query .= PMA_Util
::sqlAddSlashes(
170 $retval = PMA_DBI_num_rows(PMA_DBI_try_query($query));
174 if (! $GLOBALS['cfg']['Servers'][$GLOBALS['server']]['DisableIS']) {
175 $db = PMA_Util
::sqlAddSlashes($db);
176 $query = "SELECT COUNT(*) ";
177 $query .= "FROM `INFORMATION_SCHEMA`.`EVENTS` ";
178 $query .= "WHERE `EVENT_SCHEMA`='$db' ";
179 if (! empty($searchClause)) {
180 $query .= "AND `EVENT_NAME` LIKE '%";
181 $query .= PMA_Util
::sqlAddSlashes(
186 $retval = (int)PMA_DBI_fetch_value($query);
188 $db = PMA_Util
::backquote($db);
189 $query = "SHOW EVENTS FROM $db ";
190 if (! empty($searchClause)) {
191 $query .= "WHERE `Name` LIKE '%";
192 $query .= PMA_Util
::sqlAddSlashes(
197 $retval = PMA_DBI_num_rows(PMA_DBI_try_query($query));
207 * Returns the names of children of type $type present inside this container
208 * This method is overridden by the Node_Database and Node_Table classes
210 * @param string $type The type of item we are looking for
211 * ('tables', 'views', etc)
212 * @param int $pos The offset of the list within the results
213 * @param string $searchClause A string used to filter the results of the query
217 public function getData($type, $pos, $searchClause = '')
219 $maxItems = $GLOBALS['cfg']['MaxNavigationItems'];
221 $db = $this->real_name
;
224 if (! $GLOBALS['cfg']['Servers'][$GLOBALS['server']]['DisableIS']) {
225 $db = PMA_Util
::sqlAddSlashes($db);
226 $query = "SELECT `TABLE_NAME` AS `name` ";
227 $query .= "FROM `INFORMATION_SCHEMA`.`TABLES` ";
228 $query .= "WHERE `TABLE_SCHEMA`='$db' ";
229 $query .= "AND `TABLE_TYPE`='BASE TABLE' ";
230 if (! empty($searchClause)) {
231 $query .= "AND `TABLE_NAME` LIKE '%";
232 $query .= PMA_Util
::sqlAddSlashes(
237 $query .= "ORDER BY `TABLE_NAME` ASC ";
238 $query .= "LIMIT " . intval($pos) . ", $maxItems";
239 $retval = PMA_DBI_fetch_result($query);
241 $query = " SHOW FULL TABLES FROM ";
242 $query .= PMA_Util
::backquote($db);
243 $query .= " WHERE `Table_type`='BASE TABLE' ";
244 if (! empty($searchClause)) {
245 $query .= "AND " . PMA_Util
::backquote(
248 $query .= " LIKE '%" . PMA_Util
::sqlAddSlashes(
253 $handle = PMA_DBI_try_query($query);
254 if ($handle !== false) {
256 while ($arr = PMA_DBI_fetch_array($handle)) {
257 if ($pos <= 0 && $count < $maxItems) {
267 if (! $GLOBALS['cfg']['Servers'][$GLOBALS['server']]['DisableIS']) {
268 $db = PMA_Util
::sqlAddSlashes($db);
269 $query = "SELECT `TABLE_NAME` AS `name` ";
270 $query .= "FROM `INFORMATION_SCHEMA`.`TABLES` ";
271 $query .= "WHERE `TABLE_SCHEMA`='$db' ";
272 $query .= "AND `TABLE_TYPE`!='BASE TABLE' ";
273 if (! empty($searchClause)) {
274 $query .= "AND `TABLE_NAME` LIKE '%";
275 $query .= PMA_Util
::sqlAddSlashes(
280 $query .= "ORDER BY `TABLE_NAME` ASC ";
281 $query .= "LIMIT " . intval($pos) . ", $maxItems";
282 $retval = PMA_DBI_fetch_result($query);
284 $query = "SHOW FULL TABLES FROM ";
285 $query .= PMA_Util
::backquote($db);
286 $query .= " WHERE `Table_type`!='BASE TABLE' ";
287 if (! empty($searchClause)) {
288 $query .= "AND " . PMA_Util
::backquote(
291 $query .= " LIKE '%" . PMA_Util
::sqlAddSlashes(
296 $handle = PMA_DBI_try_query($query);
297 if ($handle !== false) {
299 while ($arr = PMA_DBI_fetch_array($handle)) {
300 if ($pos <= 0 && $count < $maxItems) {
310 if (! $GLOBALS['cfg']['Servers'][$GLOBALS['server']]['DisableIS']) {
311 $db = PMA_Util
::sqlAddSlashes($db);
312 $query = "SELECT `ROUTINE_NAME` AS `name` ";
313 $query .= "FROM `INFORMATION_SCHEMA`.`ROUTINES` ";
314 $query .= "WHERE `ROUTINE_SCHEMA`='$db'";
315 $query .= "AND `ROUTINE_TYPE`='PROCEDURE' ";
316 if (! empty($searchClause)) {
317 $query .= "AND `ROUTINE_NAME` LIKE '%";
318 $query .= PMA_Util
::sqlAddSlashes(
323 $query .= "ORDER BY `ROUTINE_NAME` ASC ";
324 $query .= "LIMIT " . intval($pos) . ", $maxItems";
325 $retval = PMA_DBI_fetch_result($query);
327 $db = PMA_Util
::sqlAddSlashes($db);
328 $query = "SHOW PROCEDURE STATUS WHERE `Db`='$db' ";
329 if (! empty($searchClause)) {
330 $query .= "AND `Name` LIKE '%";
331 $query .= PMA_Util
::sqlAddSlashes(
336 $handle = PMA_DBI_try_query($query);
337 if ($handle !== false) {
339 while ($arr = PMA_DBI_fetch_array($handle)) {
340 if ($pos <= 0 && $count < $maxItems) {
341 $retval[] = $arr['Name'];
350 if (! $GLOBALS['cfg']['Servers'][$GLOBALS['server']]['DisableIS']) {
351 $db = PMA_Util
::sqlAddSlashes($db);
352 $query = "SELECT `ROUTINE_NAME` AS `name` ";
353 $query .= "FROM `INFORMATION_SCHEMA`.`ROUTINES` ";
354 $query .= "WHERE `ROUTINE_SCHEMA`='$db' ";
355 $query .= "AND `ROUTINE_TYPE`='FUNCTION' ";
356 if (! empty($searchClause)) {
357 $query .= "AND `ROUTINE_NAME` LIKE '%";
358 $query .= PMA_Util
::sqlAddSlashes(
363 $query .= "ORDER BY `ROUTINE_NAME` ASC ";
364 $query .= "LIMIT " . intval($pos) . ", $maxItems";
365 $retval = PMA_DBI_fetch_result($query);
367 $db = PMA_Util
::sqlAddSlashes($db);
368 $query = "SHOW FUNCTION STATUS WHERE `Db`='$db' ";
369 if (! empty($searchClause)) {
370 $query .= "AND `Name` LIKE '%";
371 $query .= PMA_Util
::sqlAddSlashes(
376 $handle = PMA_DBI_try_query($query);
377 if ($handle !== false) {
379 while ($arr = PMA_DBI_fetch_array($handle)) {
380 if ($pos <= 0 && $count < $maxItems) {
381 $retval[] = $arr['Name'];
390 if (! $GLOBALS['cfg']['Servers'][$GLOBALS['server']]['DisableIS']) {
391 $db = PMA_Util
::sqlAddSlashes($db);
392 $query = "SELECT `EVENT_NAME` AS `name` ";
393 $query .= "FROM `INFORMATION_SCHEMA`.`EVENTS` ";
394 $query .= "WHERE `EVENT_SCHEMA`='$db' ";
395 if (! empty($searchClause)) {
396 $query .= "AND `EVENT_NAME` LIKE '%";
397 $query .= PMA_Util
::sqlAddSlashes(
402 $query .= "ORDER BY `EVENT_NAME` ASC ";
403 $query .= "LIMIT " . intval($pos) . ", $maxItems";
404 $retval = PMA_DBI_fetch_result($query);
406 $db = PMA_Util
::backquote($db);
407 $query = "SHOW EVENTS FROM $db ";
408 if (! empty($searchClause)) {
409 $query .= "WHERE `Name` LIKE '%";
410 $query .= PMA_Util
::sqlAddSlashes(
415 $handle = PMA_DBI_try_query($query);
416 if ($handle !== false) {
418 while ($arr = PMA_DBI_fetch_array($handle)) {
419 if ($pos <= 0 && $count < $maxItems) {
420 $retval[] = $arr['Name'];
436 * Returns the comment associated with node
437 * This method should be overridden by specific type of nodes
441 public function getComment()
443 return PMA_getDbComment($this->real_name
);