UpdateDatabase/MysqlEngineCharset.php
[Pman.Core] / UpdateDatabase / MysqlEngineCharset.php
index d4d772b..403a6d0 100644 (file)
@@ -7,8 +7,8 @@
 class Pman_Core_UpdateDatabase_MysqlEngineCharset {
     
     var $dburl;
-    var $schema;
-    var $links;
+    var $schema = array();
+    var $links = array();
     
     function __construct()
     {
@@ -36,6 +36,9 @@ class Pman_Core_UpdateDatabase_MysqlEngineCharset {
         
         
         $iniCache = $ff->DB_DataObject[$dbini];
+        if (!file_exists($iniCache)) {
+            return;
+        }
         
         $this->schema = parse_ini_file($iniCache, true);
         $this->links = parse_ini_file(preg_replace('/\.ini$/', '.links.ini', $iniCache), true);
@@ -77,7 +80,9 @@ class Pman_Core_UpdateDatabase_MysqlEngineCharset {
                         T.table_name = '{$tbl}' -- COLLATE utf8_general_ci
             ");
                      
-            $ce->fetch();
+            if (!$ce->fetch()) {
+                continue;
+            }
             
             if($ce->csname == 'utf8' && $ce->collatename == 'utf8_general_ci'){
                 echo "utf8: SKIP $tbl\n";
@@ -96,7 +101,18 @@ class Pman_Core_UpdateDatabase_MysqlEngineCharset {
     }
     function updateEngine()
     {
+        $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");
+        }
+        
         // 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');
@@ -115,9 +131,20 @@ class Pman_Core_UpdateDatabase_MysqlEngineCharset {
             
             $ce = DB_DataObject::factory('core_enum');
             
-            $ce->query("select engine from information_schema.tables where table_schema='{$ce->database()}' and table_name = '{$tbl}'");
+            $ce->query("
+                select
+                    engine
+                from
+                    information_schema.tables
+                where
+                    table_schema='{$ce->database()}'
+                    and
+                    table_name = '{$tbl}'
+            ");
 
-            $ce->fetch();
+            if (!$ce->fetch()) {
+                continue;
+            }
             
             if($ce->engine == 'InnoDB' ){
                 echo "InnoDB: SKIP $tbl\n";