UpdateDatabase/MysqlEngineCharset.php
[Pman.Core] / UpdateDatabase / MysqlEngineCharset.php
index 2e1120e..82630ec 100644 (file)
@@ -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,12 +50,11 @@ class Pman_Core_UpdateDatabase_MysqlEngineCharset {
         $ff->generateDataobjectsCache(true);
         $this->dburl = parse_url($ff->database);
         
-        print_R($ff->PDO_DataObject);exit;
-        
+         
         $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;
         }
@@ -51,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){
@@ -77,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
             ");
@@ -106,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');  // needs updated pear... 
-        
-        
+        $views = $this->views;
         
         
         foreach (array_keys($this->schema) as $tbl){
@@ -127,6 +147,7 @@ class Pman_Core_UpdateDatabase_MysqlEngineCharset {
             if(strpos($tbl, '__keys') !== false ){
                 continue;
             }
+            
             if(in_array($tbl , $views)) {
                 continue;
             }
@@ -139,7 +160,7 @@ class Pman_Core_UpdateDatabase_MysqlEngineCharset {
                 from
                     information_schema.tables
                 where
-                    table_schema='{$ce->database()}'
+                    table_schema= DATABASE()
                     and
                     table_name = '{$tbl}'
             ");
@@ -147,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.