]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Cleanup on making the schema work for installer (not quite there yet)
authorBrion Vibber <brion@pobox.com>
Fri, 15 Oct 2010 20:47:38 +0000 (13:47 -0700)
committerBrion Vibber <brion@pobox.com>
Fri, 15 Oct 2010 20:47:38 +0000 (13:47 -0700)
lib/installer.php
lib/mysqlschema.php
lib/schema.php

index e89c914e11d559cc88709bdcc60989d8a0a4ef1a..5cc3eccddee7f6e848ff4b17b837d51a123ccb86 100644 (file)
@@ -264,25 +264,23 @@ abstract class Installer
         }
         $this->updateStatus("Starting installation...");
 
-        if (empty($password)) {
+        if (empty($this->password)) {
             $auth = '';
         } else {
             $auth = ":$this->password";
         }
         $scheme = self::$dbModules[$this->dbtype]['scheme'];
+        $dsn = "{$scheme}://{$this->username}{$auth}@{$this->host}/{$this->database}";
 
         $this->updateStatus("Checking database...");
         $conn = $this->connectDatabase($dsn);
-        if (DB::isError($conn)) {
-            $this->updateStatus("Database connection error: " . $conn->getMessage(), true);
-            return false;
-        }
 
         // ensure database encoding is UTF8
         if ($this->dbtype == 'mysql') {
             // @fixme utf8m4 support for mysql 5.5?
             // Force the comms charset to utf8 for sanity
-            $conn->execute('SET names utf8');
+            // This doesn't currently work. :P
+            //$conn->executes('set names utf8');
         } else if ($this->dbtype == 'pgsql') {
             $record = $conn->getRow('SHOW server_encoding');
             if ($record->server_encoding != 'UTF8') {
@@ -321,6 +319,8 @@ abstract class Installer
      */
     function connectDatabase($dsn)
     {
+        // @fixme move this someplace more sensible
+        //set_include_path(INSTALLDIR . '/extlib' . PATH_SEPARATOR . get_include_path());
         require_once 'DB.php';
         return DB::connect($dsn);
     }
@@ -335,6 +335,9 @@ abstract class Installer
         $schema = Schema::get($conn);
         $tableDefs = $this->getCoreSchema();
         foreach ($tableDefs as $name => $def) {
+            if (defined('DEBUG_INSTALLER')) {
+                echo " $name ";
+            }
             $schema->ensureTable($name, $def);
         }
     }
@@ -471,10 +474,22 @@ abstract class Installer
      */
     function doInstall()
     {
-        $this->db = $this->setupDatabase();
-
-        if (!$this->db) {
-            // database connection failed, do not move on to create config file.
+        $this->updateStatus("Initializing...");
+        ini_set('display_errors', 1);
+        error_reporting(E_ALL);
+        define('STATUSNET', 1);
+        require_once INSTALLDIR . '/lib/framework.php';
+        StatusNet::initDefaults($this->server, $this->path);
+
+        try {
+            $this->db = $this->setupDatabase();
+            if (!$this->db) {
+                // database connection failed, do not move on to create config file.
+                return false;
+            }
+        } catch (Exception $e) {
+            // Lower-level DB error!
+            $this->updateStatus("Database error: " . $e->getMessage(), true);
             return false;
         }
 
index eeabae8cd37c59d1f2ebba8b31756b16ebb3ceca..400a7ee598f130e4d343f7bab754ade350008425 100644 (file)
@@ -246,13 +246,13 @@ class MysqlSchema extends Schema
     /**
      * Close out a 'create table' SQL statement.
      *
-     * @param array $sql
      * @param string $name
      * @param array $def
+     * @return string;
      */
-    function appendCreateTableEnd(array &$sql, $name, array $def)
+    function endCreateTable($name, array $def)
     {
-        $sql[] = ") ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_bin";
+        return ") ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_bin";
     }
 
     /**
@@ -286,7 +286,7 @@ class MysqlSchema extends Schema
      * @return boolean success flag
      */
 
-    public function ensureTable($tableName, $columns)
+    public function oldensureTable($tableName, $columns)
     {
         // XXX: DB engine portability -> toilet
 
index b5e452a6e828ec69cda38547f26dce9492ec6259..c9a0fb43476bcdc161980a740f4e358f2c1f7d8e 100644 (file)
@@ -448,6 +448,9 @@ class Schema
     {
         $ok = true;
         foreach ($statements as $sql) {
+            if (defined('DEBUG_INSTALLER')) {
+                echo "<tt>" . htmlspecialchars($sql) . "</tt><br/>\n";
+            }
             $res = $this->conn->query($sql);
 
             if (PEAR::isError($res)) {
@@ -478,13 +481,8 @@ class Schema
     {
         try {
             $old = $this->getTableDef($tableName);
-        } catch (Exception $e) {
-            // @fixme this is a terrible check :D
-            if (preg_match('/no such table/', $e->getMessage())) {
-                return $this->buildCreateTable($tableName, $def);
-            } else {
-                throw $e;
-            }
+        } catch (SchemaTableMissingException $e) {
+            return $this->buildCreateTable($tableName, $def);
         }
 
         $old = $this->filterDef($old);