X-Git-Url: http://git.roojs.org/?p=Pman.Core;a=blobdiff_plain;f=UpdateDatabase%2FMysqlEngineCharset.php;h=82630ecaa0f5d7735c9605a173ba1c695efb7ce8;hp=403a6d04128174d5ded9fce7d29a296d7a84d263;hb=3f35cb8d591cf6a3f0fb21a3045aa3e692bb651e;hpb=e35652fab76fb34b62cd3c4b4e745861c0df5310 diff --git a/UpdateDatabase/MysqlEngineCharset.php b/UpdateDatabase/MysqlEngineCharset.php index 403a6d04..82630eca 100644 --- a/UpdateDatabase/MysqlEngineCharset.php +++ b/UpdateDatabase/MysqlEngineCharset.php @@ -9,12 +9,30 @@ 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??? + try { + $dbo = DB_DataObject::factory('core_enum'); + } catch(PDO_DataObject_Exception_InvalidConfig $e) { + echo "SKipping MysqlEngineCharse - no database yet\n"; + return; + } + + die("HERE"); + 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(); @@ -32,10 +50,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 +68,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 +93,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 "); @@ -104,20 +122,24 @@ 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; foreach (array_keys($this->schema) as $tbl){ @@ -125,6 +147,7 @@ class Pman_Core_UpdateDatabase_MysqlEngineCharset { if(strpos($tbl, '__keys') !== false ){ continue; } + if(in_array($tbl , $views)) { continue; } @@ -137,7 +160,7 @@ class Pman_Core_UpdateDatabase_MysqlEngineCharset { from information_schema.tables where - table_schema='{$ce->database()}' + table_schema= DATABASE() and table_name = '{$tbl}' "); @@ -145,11 +168,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.