From 54f0d14ea9bdd2d3420afcdd470c2fe94c1bfaa9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20=C4=8Ciha=C5=99?= Date: Mon, 11 Apr 2016 11:00:01 +0200 Subject: [PATCH] Remove session caching for MySQL charsets MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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ř --- libraries/Charsets.php | 78 +++++++++++++++++------------------------- 1 file changed, 32 insertions(+), 46 deletions(-) diff --git a/libraries/Charsets.php b/libraries/Charsets.php index f763d46f9c..d333ec43fe 100644 --- a/libraries/Charsets.php +++ b/libraries/Charsets.php @@ -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; } }