コード例 #1
0
ファイル: relation.lib.php プロジェクト: nobodypb/phpmyadmin
/**
 * Gets all Relations to foreign tables for a given table or
 * optionally a given column in a table
 *
 * @param string $db     the name of the db to check for
 * @param string $table  the name of the table to check for
 * @param string $column the name of the column to check for
 * @param string $source the source for foreign key information
 *
 * @return array    db,table,column
 *
 * @access  public
 */
function PMA_getForeigners($db, $table, $column = '', $source = 'both')
{
    $cfgRelation = PMA_getRelationsParam();
    $foreign = array();
    if ($cfgRelation['relwork'] && ($source == 'both' || $source == 'internal')) {
        $rel_query = '
             SELECT `master_field`,
                    `foreign_db`,
                    `foreign_table`,
                    `foreign_field`
               FROM ' . PMA_Util::backquote($cfgRelation['db']) . '.' . PMA_Util::backquote($cfgRelation['relation']) . '
              WHERE `master_db`    = \'' . PMA_Util::sqlAddSlashes($db) . '\'
                AND `master_table` = \'' . PMA_Util::sqlAddSlashes($table) . '\' ';
        if (mb_strlen($column)) {
            $rel_query .= ' AND `master_field` = ' . '\'' . PMA_Util::sqlAddSlashes($column) . '\'';
        }
        $foreign = $GLOBALS['dbi']->fetchResult($rel_query, 'master_field', null, $GLOBALS['controllink']);
    }
    if (($source == 'both' || $source == 'foreign') && mb_strlen($table)) {
        $tableObj = new PMA_Table($table, $db);
        $show_create_table = $tableObj->showCreate();
        if ($show_create_table) {
            $parser = new SqlParser\Parser($show_create_table);
            /**
             * @var CreateStatement $stmt
             */
            $stmt = $parser->statements[0];
            $foreign['foreign_keys_data'] = SqlParser\Utils\Table::getForeignKeys($stmt);
        }
    }
    /**
     * Emulating relations for some information_schema and data_dictionary tables
     */
    $isInformationSchema = mb_strtolower($db) == 'information_schema';
    $is_data_dictionary = PMA_DRIZZLE && mb_strtolower($db) == 'data_dictionary';
    $isMysql = mb_strtolower($db) == 'mysql';
    if (($isInformationSchema || $is_data_dictionary || $isMysql) && ($source == 'internal' || $source == 'both')) {
        if ($isInformationSchema) {
            $relations_key = 'information_schema_relations';
            include_once './libraries/information_schema_relations.lib.php';
        } else {
            if ($is_data_dictionary) {
                $relations_key = 'data_dictionary_relations';
                include_once './libraries/data_dictionary_relations.lib.php';
            } else {
                $relations_key = 'mysql_relations';
                include_once './libraries/mysql_relations.lib.php';
            }
        }
        if (isset($GLOBALS[$relations_key][$table])) {
            foreach ($GLOBALS[$relations_key][$table] as $field => $relations) {
                if ((!mb_strlen($column) || $column == $field) && (!isset($foreign[$field]) || !mb_strlen($foreign[$field]))) {
                    $foreign[$field] = $relations;
                }
            }
        }
    }
    return $foreign;
}
コード例 #2
0
ファイル: tbl_structure.php プロジェクト: Timandes/phpmyadmin
$primary = PMA_Index::getPrimary($table, $db);
$columns_with_index = PMA_getColumnsWithIndex($db, $table, PMA_Index::UNIQUE | PMA_Index::INDEX | PMA_Index::SPATIAL | PMA_Index::FULLTEXT);
$columns_with_unique_index = PMA_getColumnsWithIndex($db, $table, PMA_Index::UNIQUE);
// 3. Get fields
$fields = (array) $GLOBALS['dbi']->getColumns($db, $table, null, true);
// Get more complete field information
// For now, this is done just for MySQL 4.1.2+ new TIMESTAMP options
// but later, if the analyser returns more information, it
// could be executed for any MySQL version and replace
// the info given by SHOW FULL COLUMNS FROM.
//
// We also need this to correctly learn if a TIMESTAMP is NOT NULL, since
// SHOW FULL COLUMNS or INFORMATION_SCHEMA incorrectly says NULL
// and SHOW CREATE TABLE says NOT NULL (tested
// in MySQL 4.0.25 and 5.0.21, http://bugs.mysql.com/20910).
$tableObj = new PMA_Table($table, $db);
$show_create_table = $tableObj->showCreate();
$parser = new SqlParser\Parser($show_create_table);
/**
 * @var CreateStatement $stmt
 */
$stmt = $parser->statements[0];
$create_table_fields = SqlParser\Utils\Table::getFields($stmt);
/**
 * prepare table infos
 */
// action titles (image or string)
$titles = PMA_getActionTitlesArray();
//display table structure
require_once 'libraries/display_structure.inc.php';
$response->addHTML('</div>');
コード例 #3
0
/**
 * Get HTML for edit views'
 *
 * @param string $url_params URL parameters
 *
 * @return string $html_output
 */
function PMA_getHtmlForEditView($url_params)
{
    $query = "SELECT `VIEW_DEFINITION`, `CHECK_OPTION`, `DEFINER`, `SECURITY_TYPE`" . " FROM `INFORMATION_SCHEMA`.`VIEWS`" . " WHERE TABLE_SCHEMA='" . PMA_Util::sqlAddSlashes($GLOBALS['db']) . "'" . " AND TABLE_NAME='" . PMA_Util::sqlAddSlashes($GLOBALS['table']) . "';";
    $item = $GLOBALS['dbi']->fetchSingleRow($query);
    $tableObj = new PMA_Table($GLOBALS['table'], $GLOBALS['db']);
    $createView = $tableObj->showCreate();
    // get algorithm from $createView of the form CREATE ALGORITHM=<ALGORITHM> DE...
    $parts = explode(" ", substr($createView, 17));
    $item['ALGORITHM'] = $parts[0];
    $view = array('operation' => 'alter', 'definer' => $item['DEFINER'], 'sql_security' => $item['SECURITY_TYPE'], 'name' => $GLOBALS['table'], 'as' => $item['VIEW_DEFINITION'], 'with' => $item['CHECK_OPTION'], 'algorithm' => $item['ALGORITHM']);
    $url = 'view_create.php' . PMA_URL_getCommon($url_params) . '&amp;';
    $url .= implode('&amp;', array_map(function ($key, $val) {
        return 'view[' . urlencode($key) . ']=' . urlencode($val);
    }, array_keys($view), $view));
    $html_output = PMA_Util::linkOrButton($url, PMA_Util::getIcon('b_edit.png', __('Edit view'), true));
    return $html_output;
}
コード例 #4
0
ファイル: structure.lib.php プロジェクト: saisai/phpmyadmin
/**
 * Returns Html for show create.
 *
 * @param string $db         Database name
 * @param array  $db_objects Array containing DB objects
 *
 * @return string Html
 */
function PMA_getHtmlShowCreate($db, $db_objects)
{
    // Main outer container.
    $html_output = '<div class="show_create_results">' . '<h2>' . __('Showing create queries') . '</h2>';
    // Table header.
    $output_table = '<fieldset>' . '<legend>%s</legend>' . '<table class="show_create">' . '<thead>' . '<tr>' . '<th>%s</th>' . '<th>Create %s</th>' . '</tr>' . '</thead>' . '<tbody>';
    // Holds rows html for views.
    $views = '';
    // Holds rows html for tables.
    $tables = '';
    // Handles odd, even classes for rows.
    // for 'Views'
    $odd1 = true;
    // for 'Tables'
    $odd2 = true;
    // Iterate through each object.
    foreach ($db_objects as $object) {
        $tableObj = new PMA_Table($object, $db);
        // Check if current object is a View or Table.
        $isView = PMA_Table::isView($db, $object);
        if ($isView) {
            $row_class = $odd1 ? 'odd' : 'even';
            $views .= '<tr class="' . $row_class . '">' . '<td><strong>' . PMA_mimeDefaultFunction($object) . '</strong></td>' . '<td>' . PMA_mimeDefaultFunction($tableObj->showCreate()) . '</td>' . '</tr>';
            $odd1 = !$odd1;
        } else {
            $row_class = $odd2 ? 'odd' : 'even';
            $tables .= '<tr class="' . $row_class . '">' . '<td><strong>' . PMA_mimeDefaultFunction($object) . '</strong></td>' . '<td>' . PMA_mimeDefaultFunction($tableObj->showCreate()) . '</td>' . '</tr>';
            $odd2 = !$odd2;
        }
    }
    // Prepare table header for each type of object.
    if (!empty($tables)) {
        $title = __('Tables');
        $tables = sprintf($output_table, $title, 'Table', 'Table') . $tables . '</tbody></table></fieldset>';
    }
    if (!empty($views)) {
        $title = __('Views');
        $views = sprintf($output_table, $title, 'View', 'View') . $views . '</tbody></table></fieldset>';
    }
    // Compile the final html.
    $html_output .= $tables . $views . '</div>';
    return $html_output;
}