Remove session caching for MySQL charsets
This cache makes the session data quite huge giving performance penalty when loading the cache. Loading the data again from MySQL server is faster than this. Also the charsets data is really needed only on few pages, the overall impact of this caching is negative. Caching the data per request however is useful. Signed-off-by: Michal Čihař <michal@cihar.com>
This commit is contained in:
parent
cfc2f1cb05
commit
54f0d14ea9
@ -7,8 +7,6 @@
|
||||
*/
|
||||
namespace PMA\libraries;
|
||||
|
||||
use PMA\libraries\Util;
|
||||
|
||||
/**
|
||||
* Class used to manage MySQL charsets
|
||||
*
|
||||
@ -48,6 +46,14 @@ class Charsets
|
||||
'windows-1257' => 'cp1257',
|
||||
);
|
||||
|
||||
private static $_loaded = false;
|
||||
private static $_mysql_charsets = array();
|
||||
private static $_mysql_charsets_descriptions = array();
|
||||
private static $_mysql_charsets_available = array();
|
||||
private static $_mysql_collations = array();
|
||||
private static $_mysql_default_collations = array();
|
||||
private static $_mysql_collations_available = array();
|
||||
|
||||
/**
|
||||
* Loads charset data from the MySQL server.
|
||||
*
|
||||
@ -55,110 +61,90 @@ class Charsets
|
||||
*/
|
||||
public static function loadCharsets()
|
||||
{
|
||||
/* Cache already exists */
|
||||
if (Util::cacheExists('mysql_charsets')) {
|
||||
/* Data already loaded */
|
||||
if (self::$_loaded) {
|
||||
return;
|
||||
}
|
||||
|
||||
$sql = 'SELECT * FROM information_schema.CHARACTER_SETS';
|
||||
$res = $GLOBALS['dbi']->query($sql);
|
||||
|
||||
$mysql_charsets = array();
|
||||
self::$_mysql_charsets = array();
|
||||
while ($row = $GLOBALS['dbi']->fetchAssoc($res)) {
|
||||
$mysql_charsets[] = $row['CHARACTER_SET_NAME'];
|
||||
self::$_mysql_charsets[] = $row['CHARACTER_SET_NAME'];
|
||||
// never used
|
||||
//$mysql_charsets_maxlen[$row['Charset']] = $row['Maxlen'];
|
||||
$mysql_charsets_descriptions[$row['CHARACTER_SET_NAME']]
|
||||
self::$_mysql_charsets_descriptions[$row['CHARACTER_SET_NAME']]
|
||||
= $row['DESCRIPTION'];
|
||||
}
|
||||
$GLOBALS['dbi']->freeResult($res);
|
||||
|
||||
sort($mysql_charsets, SORT_STRING);
|
||||
sort(self::$_mysql_charsets, SORT_STRING);
|
||||
|
||||
$mysql_collations = array_flip($mysql_charsets);
|
||||
$mysql_default_collations = $mysql_charsets_available = $mysql_collations_available = array();
|
||||
self::$_mysql_collations = array_flip(self::$_mysql_charsets);
|
||||
|
||||
$sql = 'SELECT * FROM information_schema.COLLATIONS';
|
||||
$res = $GLOBALS['dbi']->query($sql);
|
||||
while ($row = $GLOBALS['dbi']->fetchAssoc($res)) {
|
||||
$char_set_name = $row['CHARACTER_SET_NAME'];
|
||||
if (! is_array($mysql_collations[$char_set_name])) {
|
||||
$mysql_collations[$char_set_name] = array($row['COLLATION_NAME']);
|
||||
if (! is_array(self::$_mysql_collations[$char_set_name])) {
|
||||
self::$_mysql_collations[$char_set_name] = array($row['COLLATION_NAME']);
|
||||
} else {
|
||||
$mysql_collations[$char_set_name][] = $row['COLLATION_NAME'];
|
||||
self::$_mysql_collations[$char_set_name][] = $row['COLLATION_NAME'];
|
||||
}
|
||||
if ($row['IS_DEFAULT'] == 'Yes' || $row['IS_DEFAULT'] == '1') {
|
||||
$mysql_default_collations[$char_set_name]
|
||||
self::$_mysql_default_collations[$char_set_name]
|
||||
= $row['COLLATION_NAME'];
|
||||
}
|
||||
//$mysql_collations_available[$row['Collation']]
|
||||
// = ! isset($row['Compiled']) || $row['Compiled'] == 'Yes';
|
||||
$mysql_collations_available[$row['COLLATION_NAME']] = true;
|
||||
$mysql_charsets_available[$char_set_name]
|
||||
= !empty($mysql_charsets_available[$char_set_name])
|
||||
|| !empty($mysql_collations_available[$row['COLLATION_NAME']]);
|
||||
self::$_mysql_collations_available[$row['COLLATION_NAME']] = true;
|
||||
self::$_mysql_charsets_available[$char_set_name]
|
||||
= !empty(self::$_mysql_charsets_available[$char_set_name])
|
||||
|| !empty(self::$_mysql_collations_available[$row['COLLATION_NAME']]);
|
||||
}
|
||||
$GLOBALS['dbi']->freeResult($res);
|
||||
unset($res, $row);
|
||||
|
||||
foreach ($mysql_collations as $key => $value) {
|
||||
sort($mysql_collations[$key], SORT_STRING);
|
||||
foreach (self::$_mysql_collations as $key => $value) {
|
||||
sort(self::$_mysql_collations[$key], SORT_STRING);
|
||||
}
|
||||
unset($key, $value);
|
||||
|
||||
Util::cacheSet(
|
||||
'mysql_charsets', $mysql_charsets
|
||||
);
|
||||
Util::cacheSet(
|
||||
'mysql_charsets_descriptions', $mysql_charsets_descriptions
|
||||
);
|
||||
Util::cacheSet(
|
||||
'mysql_charsets_available', $mysql_charsets_available
|
||||
);
|
||||
Util::cacheSet(
|
||||
'mysql_collations', $mysql_collations
|
||||
);
|
||||
Util::cacheSet(
|
||||
'mysql_default_collations', $mysql_default_collations
|
||||
);
|
||||
Util::cacheSet(
|
||||
'mysql_collations_available', $mysql_collations_available
|
||||
);
|
||||
self::$_loaded = true;
|
||||
}
|
||||
|
||||
public static function getMySQLCharsets()
|
||||
{
|
||||
self::loadCharsets();
|
||||
return Util::cacheGet('mysql_charsets');
|
||||
return self::$_mysql_charsets;
|
||||
}
|
||||
|
||||
public static function getMySQLCharsetsDescriptions()
|
||||
{
|
||||
self::loadCharsets();
|
||||
return Util::cacheGet('mysql_charsets_descriptions');
|
||||
return self::$_mysql_charsets_descriptions;
|
||||
}
|
||||
|
||||
public static function getMySQLCharsetsAvailable()
|
||||
{
|
||||
self::loadCharsets();
|
||||
return Util::cacheGet('mysql_charsets_available');
|
||||
return self::$_mysql_charsets_available;
|
||||
}
|
||||
|
||||
public static function getMySQLCollations()
|
||||
{
|
||||
self::loadCharsets();
|
||||
return Util::cacheGet('mysql_collations');
|
||||
return self::$_mysql_collations;
|
||||
}
|
||||
|
||||
public static function getMySQLCollationsDefault()
|
||||
{
|
||||
self::loadCharsets();
|
||||
return Util::cacheGet('mysql_default_collations');
|
||||
return self::$_mysql_default_collations;
|
||||
}
|
||||
|
||||
public static function getMySQLCollationsAvailable()
|
||||
{
|
||||
self::loadCharsets();
|
||||
return Util::cacheGet('mysql_collations_available');
|
||||
return self::$_mysql_collations_available;
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user