/** * 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; }
$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>');
/** * 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) . '&'; $url .= implode('&', 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; }
/** * 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; }