/home/mjc1/public_html/ej_sql/libraries/db_routines.inc.php


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
 *
 * @version $Id$
 */
if (! defined('PHPMYADMIN')) {
    exit;
}

/**
 * @todo Support seeing the "results" of the called procedure or
 *       function. This needs further reseach because a procedure
 *       does not necessarily contain a SELECT statement that
 *       produces something to see. But it seems we could at least
 *       get the number of rows affected. We would have to
 *       use the CLIENT_MULTI_RESULTS flag to get the result set
 *       and also the call status. All this does not fit well with
 *       our current sql.php.
 *       Of course the interface would need a way to pass calling parameters.
 *       Also, support DEFINER (like we do in export).
 */
if (PMA_MYSQL_INT_VERSION >= 50002) {
    
$url_query .= '&amp;goto=db_structure.php';

    
$routines PMA_DBI_fetch_result('SELECT SPECIFIC_NAME,ROUTINE_NAME,ROUTINE_TYPE,DTD_IDENTIFIER FROM information_schema.ROUTINES WHERE ROUTINE_SCHEMA= \'' PMA_sqlAddslashes($db,true) . '\';');

    if (
$routines) {
        echo 
'<fieldset>' "\n";
        echo 
' <legend>' $strRoutines '</legend>' "\n";
        echo 
'<table border="0">';
        echo 
sprintf('<tr>
                          <th>%s</th>
                          <th>&nbsp;</th>
                          <th>&nbsp;</th>
                          <th>%s</th>
                          <th>%s</th>
                    </tr>'
,
              
$strName,
              
$strType,
              
$strRoutineReturnType);
        
$ct=0;
        
$delimiter '//';
        foreach (
$routines as $routine) {

            
// information_schema (at least in MySQL 5.0.45)
            // does not return the routine parameters
            // so we rely on PMA_DBI_get_procedure_or_function_def() which
            // uses SHOW CREATE

            
$definition 'DROP ' $routine['ROUTINE_TYPE'] . ' ' PMA_backquote($routine['SPECIFIC_NAME']) . $delimiter "\n"
                
.  PMA_DBI_get_procedure_or_function_def($db$routine['ROUTINE_TYPE'], $routine['SPECIFIC_NAME'])
                . 
"\n";

            
//if ($routine['ROUTINE_TYPE'] == 'PROCEDURE') {
            //    $sqlUseProc  = 'CALL ' . $routine['SPECIFIC_NAME'] . '()';
            //} else {
            //    $sqlUseProc = 'SELECT ' . $routine['SPECIFIC_NAME'] . '()';
                /* this won't get us far: to really use the function
                   i'd need to know how many parameters the function needs and then create
                   something to ask for them. As i don't see this directly in
                   the table i am afraid that requires parsing the ROUTINE_DEFINITION
                   and i don't really need that now so i simply don't offer
                   a method for running the function*/
            //}
            
if ($routine['ROUTINE_TYPE'] == 'PROCEDURE') {
                
$sqlDropProc 'DROP PROCEDURE ' PMA_backquote($routine['SPECIFIC_NAME']);
            } else {
                
$sqlDropProc 'DROP FUNCTION ' PMA_backquote($routine['SPECIFIC_NAME']);
            }
            echo 
sprintf('<tr class="%s">
                              <td><b>%s</b></td>
                              <td>%s</td>
                              <td>%s</td>
                              <td>%s</td>
                              <td>%s</td>
                         </tr>'
,
                         (
$ct%== 0) ? 'even' 'odd',
                         
$routine['ROUTINE_NAME'],
                         ! empty(
$definition) ? PMA_linkOrButton('db_sql.php?' $url_query '&amp;sql_query=' urlencode($definition) . '&amp;show_query=1&amp;delimiter=' urlencode($delimiter), $titles['Structure']) : '&nbsp;',
                         
//$routine['ROUTINE_TYPE'] == 'PROCEDURE' ? '<a href="sql.php?' . $url_query . '&sql_query=' . urlencode($sqlUseProc) . '">' . $titles['Browse'] . '</a>' : '&nbsp;',
                         
'<a href="sql.php?' $url_query '&sql_query=' urlencode($sqlDropProc) . '" onclick="return confirmLink(this, \'' PMA_jsFormat($sqlDropProcfalse) . '\')">' $titles['Drop'] . '</a>',
                         
$routine['ROUTINE_TYPE'],
                         
$routine['DTD_IDENTIFIER']);
            
$ct++;
        }
        echo 
'</table>';
        echo 
'</fieldset>' "\n";
    }
}
?>