getHeader(); $header->enablePrintView(); /** * Gets the relations settings */ $cfgRelation = PMA_getRelationsParam(); require_once 'libraries/transformations.lib.php'; require_once 'libraries/Index.class.php'; /** * Check parameters */ PMA_Util::checkParameters(array('db')); /** * Defines the url to return to in case of error in a sql statement */ if (strlen($table)) { $err_url = 'tbl_sql.php?' . PMA_URL_getCommon($db, $table); } else { $err_url = 'db_sql.php?' . PMA_URL_getCommon($db); } if ($cfgRelation['commwork']) { $comment = PMA_getDbComment($db); /** * Displays DB comment */ if ($comment) { echo '

' . __('Database comment: ') . '' . htmlspecialchars($comment) . '

'; } // end if } /** * Selects the database and gets tables names */ $GLOBALS['dbi']->selectDb($db); $tables = $GLOBALS['dbi']->getTables($db); $count = 0; foreach ($tables as $table) { $comments = PMA_getComments($db, $table); echo '
' . "\n"; echo '

' . htmlspecialchars($table) . '

' . "\n"; /** * Gets table informations */ $show_comment = PMA_Table::sGetStatusInfo($db, $table, 'TABLE_COMMENT'); /** * Gets table keys and retains them */ $GLOBALS['dbi']->selectDb($db); $indexes = $GLOBALS['dbi']->getTableIndexes($db, $table); $primary = ''; $indexes = array(); $lastIndex = ''; $indexes_info = array(); $indexes_data = array(); $pk_array = array(); // will be use to emphasis prim. keys in the table // view foreach ($indexes as $row) { // Backups the list of primary keys if ($row['Key_name'] == 'PRIMARY') { $primary .= $row['Column_name'] . ', '; $pk_array[$row['Column_name']] = 1; } // Retains keys informations if ($row['Key_name'] != $lastIndex) { $indexes[] = $row['Key_name']; $lastIndex = $row['Key_name']; } $indexes_info[$row['Key_name']]['Sequences'][] = $row['Seq_in_index']; $indexes_info[$row['Key_name']]['Non_unique'] = $row['Non_unique']; if (isset($row['Cardinality'])) { $indexes_info[$row['Key_name']]['Cardinality'] = $row['Cardinality']; } // I don't know what does following column mean.... // $indexes_info[$row['Key_name']]['Packed'] = $row['Packed']; $indexes_info[$row['Key_name']]['Comment'] = $row['Comment']; $indexes_data[$row['Key_name']][$row['Seq_in_index']]['Column_name'] = $row['Column_name']; if (isset($row['Sub_part'])) { $indexes_data[$row['Key_name']][$row['Seq_in_index']]['Sub_part'] = $row['Sub_part']; } } // end while /** * Gets columns properties */ $columns = $GLOBALS['dbi']->getColumns($db, $table); if (PMA_MYSQL_INT_VERSION < 50025) { // We 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 // http://bugs.mysql.com/20910. $show_create_table_query = 'SHOW CREATE TABLE ' . PMA_Util::backquote($db) . '.' . PMA_Util::backquote($table); $show_create_table = $GLOBALS['dbi']->fetchValue( $show_create_table_query, 0, 1 ); $analyzed_sql = PMA_SQP_analyze(PMA_SQP_parse($show_create_table)); } // Check if we can use Relations if (!empty($cfgRelation['relation'])) { // Find which tables are related with the current one and write it in // an array $res_rel = PMA_getForeigners($db, $table); if (count($res_rel) > 0) { $have_rel = true; } else { $have_rel = false; } } else { $have_rel = false; } // end if /** * Displays the comments of the table if MySQL >= 3.23 */ if (!empty($show_comment)) { echo __('Table comments:') . ' '; echo htmlspecialchars($show_comment) . '

'; } /** * Displays the table structure */ echo ''; echo ''; echo ''; echo ''; echo ''; if ($have_rel) { echo ' ' . "\n"; } echo ' ' . "\n"; if ($cfgRelation['mimework']) { echo ' ' . "\n"; } echo ''; $odd_row = true; foreach ($columns as $row) { if ($row['Null'] == '') { $row['Null'] = 'NO'; } $extracted_columnspec = PMA_Util::extractColumnSpec($row['Type']); // reformat mysql query output // set or enum types: slashes single quotes inside options if ('set' == $extracted_columnspec['type'] || 'enum' == $extracted_columnspec['type'] ) { $type_nowrap = ''; } else { $type_nowrap = ' class="nowrap"'; } $type = htmlspecialchars($extracted_columnspec['print_type']); $attribute = $extracted_columnspec['attribute']; if (! isset($row['Default'])) { if ($row['Null'] != 'NO') { $row['Default'] = 'NULL'; } } else { $row['Default'] = htmlspecialchars($row['Default']); } $column_name = $row['Field']; $tmp_column = $analyzed_sql[0]['create_table_fields'][$column_name]; if (PMA_MYSQL_INT_VERSION < 50025 && ! empty($tmp_column['type']) && $tmp_column['type'] == 'TIMESTAMP' && $tmp_column['timestamp_not_null'] ) { // here, we have a TIMESTAMP that SHOW FULL COLUMNS reports as // having the NULL attribute, but SHOW CREATE TABLE says the // contrary. Believe the latter. /** * @todo merge this logic with the one in tbl_structure.php * or move it in a function similar to $GLOBALS['dbi']->getColumnsFull() * but based on SHOW CREATE TABLE because information_schema * cannot be trusted in this case (MySQL bug) */ $row['Null'] = 'NO'; } echo ''; echo ''; echo '' . $type . ''; echo ''; echo ''; if ($have_rel) { echo ' ' . "\n"; } echo ' ' . "\n"; if ($cfgRelation['mimework']) { $mime_map = PMA_getMIME($db, $table, true); echo ' ' . "\n"; } echo ''; } // end foreach $count++; echo '
' . __('Column') . '' . __('Type') . '' . __('Null') . '' . __('Default') . '' . __('Links to') . '' . __('Comments') . 'MIME
'; if (isset($pk_array[$row['Field']])) { echo '' . htmlspecialchars($column_name) . ''; } else { echo htmlspecialchars($column_name); } echo ''; echo (($row['Null'] == 'NO') ? __('No') : __('Yes')); echo ''; if (isset($row['Default'])) { echo $row['Default']; } echo ''; if (isset($res_rel[$column_name])) { echo htmlspecialchars( $res_rel[$column_name]['foreign_table'] . ' -> ' . $res_rel[$column_name]['foreign_field'] ); } echo ''; if (isset($comments[$column_name])) { echo htmlspecialchars($comments[$column_name]); } echo ''; if (isset($mime_map[$column_name])) { echo htmlspecialchars( str_replace('_', '/', $mime_map[$column_name]['mimetype']) ); } echo '
'; // display indexes information if (count(PMA_Index::getFromTable($table, $db)) > 0) { echo PMA_Index::getView($table, $db, true); } echo '
'; } //ends main while /** * Displays the footer */ echo PMA_Util::getButton(); ?>