Parser recognizes collations / Include DB charset and collation in SQL export

This commit is contained in:
Alexander M. Turek
2004-01-02 16:11:56 +00:00
parent a65040f464
commit 0f288c3372
4 changed files with 31 additions and 6 deletions

View File

@@ -5,6 +5,12 @@ phpMyAdmin - Changelog
$Id$ $Id$
$Source$ $Source$
2004-01-02 Alexander M. Turek <wecantdance@derrabus.de>
* libraries/mysql_charsets.lib.php, libraries/sqlparser.lib.php:
MySQL collations are now parsed and highlighted.
* libraries/export/sql.php: Include charset / collation information in db
export.
2004-01-02 Marc Delisle <lem9@users.sourceforge.net> 2004-01-02 Marc Delisle <lem9@users.sourceforge.net>
* db_details_structure.php: bug 868996, debug code still in place, * db_details_structure.php: bug 868996, debug code still in place,
thanks to Matthias Fichtner (mfichtner) thanks to Matthias Fichtner (mfichtner)

View File

@@ -80,7 +80,17 @@ function PMA_exportDBCreate($db) {
if (isset($GLOBALS['drop_database'])) { if (isset($GLOBALS['drop_database'])) {
if (!PMA_exportOutputHandler('DROP DATABASE ' . (isset($GLOBALS['use_backquotes']) ? PMA_backquote($db) : $db) . ';' . $crlf)) return FALSE; if (!PMA_exportOutputHandler('DROP DATABASE ' . (isset($GLOBALS['use_backquotes']) ? PMA_backquote($db) : $db) . ';' . $crlf)) return FALSE;
} }
if (!PMA_exportOutputHandler('CREATE DATABASE ' . (isset($GLOBALS['use_backquotes']) ? PMA_backquote($db) : $db) . ';' . $crlf)) return FALSE; $create_query = 'CREATE DATABASE ' . (isset($GLOBALS['use_backquotes']) ? PMA_backquote($db) : $db);
if (PMA_MYSQL_INT_VERSION >= 40101) {
$collation = PMA_getDbCollation($db);
if (strpos($collation, '_')) {
$create_query .= ' DEFAULT CHARACTER SET ' . substr($collation, 0, strpos($collation, '_')) . ' COLLATE ' . $collation;
} else {
$create_query .= ' DEFAULT CHARACTER SET ' . $collation;
}
}
$create_query .= ';' . $crlf;
if (!PMA_exportOutputHandler($create_query)) return FALSE;
return PMA_exportOutputHandler('USE ' . $db . ';' . $crlf); return PMA_exportOutputHandler('USE ' . $db . ';' . $crlf);
} }

View File

@@ -19,24 +19,26 @@ if (PMA_MYSQL_INT_VERSION >= 40100){
$res = PMA_mysql_query('SHOW COLLATION;', $userlink) $res = PMA_mysql_query('SHOW COLLATION;', $userlink)
or PMA_mysqlDie(PMA_mysql_error($userlink), 'SHOW COLLATION;'); or PMA_mysqlDie(PMA_mysql_error($userlink), 'SHOW COLLATION;');
$mysql_charsets_count = count($mysql_charsets);
sort($mysql_charsets, SORT_STRING); sort($mysql_charsets, SORT_STRING);
$mysql_collations = array_flip($mysql_charsets); $mysql_collations = array_flip($mysql_charsets);
$mysql_default_collations = array();; $mysql_default_collations = $mysql_collations_flat = array();;
while ($row = PMA_mysql_fetch_array($res, MYSQL_ASSOC)) { while ($row = PMA_mysql_fetch_array($res, MYSQL_ASSOC)) {
if (!is_array($mysql_collations[$row['Charset']])) { if (!is_array($mysql_collations[$row['Charset']])) {
$mysql_collations[$row['Charset']] = array($row['Collation']); $mysql_collations[$row['Charset']] = array($row['Collation']);
} else { } else {
$mysql_collations[$row['Charset']][] = $row['Collation']; $mysql_collations[$row['Charset']][] = $row['Collation'];
} }
$mysql_collations_flat[] = $row['Collation'];
if ((isset($row['D']) && $row['D'] == 'Y') || (isset($row['Default']) && $row['Default'] == 'Yes')) { if ((isset($row['D']) && $row['D'] == 'Y') || (isset($row['Default']) && $row['Default'] == 'Yes')) {
$mysql_default_collations[$row['Charset']] = $row['Collation']; $mysql_default_collations[$row['Charset']] = $row['Collation'];
} }
} }
$mysql_collations_count = 0; $mysql_collations_count = count($mysql_collations_flat);
sort($mysql_collations_flat, SORT_STRING);
foreach($mysql_collations AS $key => $value) { foreach($mysql_collations AS $key => $value) {
$mysql_collations_count += count($mysql_collations[$key]);
sort($mysql_collations[$key], SORT_STRING); sort($mysql_collations[$key], SORT_STRING);
reset($mysql_collations[$key]); reset($mysql_collations[$key]);
} }

View File

@@ -52,6 +52,9 @@ if ($is_minimum_common == FALSE) {
require_once('./libraries/mysql_charsets.lib.php'); require_once('./libraries/mysql_charsets.lib.php');
if (!isset($mysql_charsets)) { if (!isset($mysql_charsets)) {
$mysql_charsets = array(); $mysql_charsets = array();
$mysql_charsets_count = 0;
$mysql_collations_flat = array();
$mysql_collations_count = 0;
} }
if (!defined('DEBUG_TIMING')) { if (!defined('DEBUG_TIMING')) {
@@ -191,6 +194,9 @@ if ($is_minimum_common == FALSE) {
* @global integer MySQL column types count * @global integer MySQL column types count
* @global integer MySQL function names count * @global integer MySQL function names count
* @global array List of available character sets * @global array List of available character sets
* @global array List of available collations
* @global integer Character sets count
* @global integer Collations count
* *
* @access public * @access public
*/ */
@@ -199,7 +205,7 @@ if ($is_minimum_common == FALSE) {
global $cfg; global $cfg;
global $PMA_SQPdata_column_attrib, $PMA_SQPdata_reserved_word, $PMA_SQPdata_column_type, $PMA_SQPdata_function_name, global $PMA_SQPdata_column_attrib, $PMA_SQPdata_reserved_word, $PMA_SQPdata_column_type, $PMA_SQPdata_function_name,
$PMA_SQPdata_column_attrib_cnt, $PMA_SQPdata_reserved_word_cnt, $PMA_SQPdata_column_type_cnt, $PMA_SQPdata_function_name_cnt; $PMA_SQPdata_column_attrib_cnt, $PMA_SQPdata_reserved_word_cnt, $PMA_SQPdata_column_type_cnt, $PMA_SQPdata_function_name_cnt;
global $mysql_charsets; global $mysql_charsets, $mysql_collations_flat, $mysql_charsets_count, $mysql_collations_count;
// rabus: Convert all line feeds to Unix style // rabus: Convert all line feeds to Unix style
$sql = str_replace("\r\n", "\n", $sql); $sql = str_replace("\r\n", "\n", $sql);
@@ -623,7 +629,8 @@ if ($is_minimum_common == FALSE) {
) && PMA_STR_binarySearchInArr($d_cur, $mysql_charsets, count($mysql_charsets))) { ) && PMA_STR_binarySearchInArr($d_cur, $mysql_charsets, count($mysql_charsets))) {
$t_suffix = '_charset'; $t_suffix = '_charset';
} }
} elseif (PMA_STR_binarySearchInArr($d_cur, $mysql_charsets, count($mysql_charsets))) { } elseif (PMA_STR_binarySearchInArr($d_cur, $mysql_charsets, $mysql_charsets_count)
|| PMA_STR_binarySearchInArr($d_cur, $mysql_collations_flat, $mysql_collations_count)) {
$t_suffix = '_charset'; $t_suffix = '_charset';
} else { } else {
// Do nothing // Do nothing