X-Git-Url: http://git.roojs.org/?a=blobdiff_plain;f=UpdateDatabase%2FMysqlEngineCharset.php;h=ba81c6361b8648ad4fdeac6ce989e19a0cb77c96;hb=3dfa28ee12e72e27f69a7734bef807c2628e5d53;hp=bf69b9fb2299f1a69d10c7168c7ed0fcb64a1ba0;hpb=a14530ca8d3af38973acc93c04cf330669fafafb;p=Pman.Core diff --git a/UpdateDatabase/MysqlEngineCharset.php b/UpdateDatabase/MysqlEngineCharset.php index bf69b9fb..ba81c636 100644 --- a/UpdateDatabase/MysqlEngineCharset.php +++ b/UpdateDatabase/MysqlEngineCharset.php @@ -9,19 +9,33 @@ class Pman_Core_UpdateDatabase_MysqlEngineCharset { var $dburl; var $schema = array(); var $links = array(); + var $views = array(); function __construct() { - + // this might get run before we have imported the database + // and hence not have any db. $this->loadIniFiles(); //?? shared??? + + $dbo = DB_DataObject::factory('core_enum'); + + + + if (is_a($dbo, 'PDO_DataObject')) { + + $this->views = $dbo->generator()->introspection()->getListOf('views'); + } else { + $db = DB_DataObject::factory('core_enum')->getDatabaseConnection(); + $this->views = $db->getListOf( 'views'); // needs updated pear... + } + // update the engine first - get's around 1000 character limit on indexes..cd // however - Innodb does not support fulltext indexes, so this may fail... $this->updateEngine(); - + $this->updateCharacterSet(); - - + } function loadIniFiles() @@ -32,10 +46,11 @@ class Pman_Core_UpdateDatabase_MysqlEngineCharset { $ff->generateDataobjectsCache(true); $this->dburl = parse_url($ff->database); + $dbini = 'ini_'. basename($this->dburl['path']); - $iniCache = $ff->DB_DataObject[$dbini]; + $iniCache = isset( $ff->PDO_DataObject) ? $ff->PDO_DataObject['schema_location'] : $ff->DB_DataObject[$dbini]; if (!file_exists($iniCache)) { return; } @@ -49,8 +64,7 @@ class Pman_Core_UpdateDatabase_MysqlEngineCharset { function updateCharacterSet() { - $db = DB_DataObject::factory('core_enum')->getDatabaseConnection(); - $views = $db->getListOf( 'views'); + $views = $this->views; foreach (array_keys($this->schema) as $tbl){ @@ -75,7 +89,7 @@ class Pman_Core_UpdateDatabase_MysqlEngineCharset { WHERE CCSA.collation_name = T.table_collation AND - T.table_schema = '{$ce->database()}' -- COLLATE utf8_general_ci + T.table_schema = DATABASE() -- COLLATE utf8_general_ci AND T.table_name = '{$tbl}' -- COLLATE utf8_general_ci "); @@ -103,28 +117,34 @@ class Pman_Core_UpdateDatabase_MysqlEngineCharset { { $db = DB_DataObject::factory('core_enum'); $db->query("show variables like 'innodb_file_per_table'"); + $db->fetch(); - if ($db->Value == 'OFF') { - die("Error: set innodb_file_per_table = 1 in my.cnf\n\n"); + + $pg = HTML_FlexyFramework::get()->page; + + if (empty($pg->opts['skip-mysql-checks'])) { + if ($db->Value == 'OFF') { + die("Error: set innodb_file_per_table = 1 in my.cnf\n\n"); + } + } + // get a list of table views... // innodb in single files is far more efficient that MYD or one big innodb file. // first check if database is using this format. - $db = DB_DataObject::factory('core_enum')->getDatabaseConnection(); - $views = $db->getListOf( 'views'); - - - + $views = $this->views; + echo "a3\n"; foreach (array_keys($this->schema) as $tbl){ if(strpos($tbl, '__keys') !== false ){ continue; } + if(in_array($tbl , $views)) { continue; } @@ -137,7 +157,7 @@ class Pman_Core_UpdateDatabase_MysqlEngineCharset { from information_schema.tables where - table_schema='{$ce->database()}' + table_schema= DATABASE() and table_name = '{$tbl}' "); @@ -145,11 +165,20 @@ class Pman_Core_UpdateDatabase_MysqlEngineCharset { if (!$ce->fetch()) { continue; } + //AWS is returning captials? + $engine = isset($ce->engine) ? $ce->engine : $ce->ENGINE; - if($ce->engine == 'InnoDB' ){ + if($engine == 'InnoDB' ){ echo "InnoDB: SKIP $tbl\n"; continue; } + if($engine == 'ndbcluster' ){ + echo "ndbcluster: SKIP $tbl\n"; + continue; + } + + // should really determine if we are running in cluster ready ... + // this used to be utf8_unicode_ci //as the default collation for stored procedure parameters is utf8_general_ci and you can't mix collations.