]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - lib/schema.php
Merge commit 'refs/merge-requests/41' of https://gitorious.org/social/mainline into...
[quix0rs-gnu-social.git] / lib / schema.php
index 2e27955881c235450bbc383ad3e75791cfe11031..94cde28f9d4692610a5b00cafd11c693ca61f1b5 100644 (file)
@@ -107,9 +107,11 @@ class Schema
     {
         $td = $this->getTableDef($table);
 
-        foreach ($td->columns as $cd) {
-            if ($cd->name == $column) {
-                return $cd;
+        if (!empty($td) && !empty($td->columns)) {
+            foreach ($td->columns as $cd) {
+                if ($cd->name == $column) {
+                    return $cd;
+                }
             }
         }
 
@@ -343,9 +345,11 @@ class Schema
 
     public function dropTable($name)
     {
+        global $_PEAR;
+
         $res = $this->conn->query("DROP TABLE $name");
 
-        if (PEAR::isError($res)) {
+        if ($_PEAR->isError($res)) {
             throw new Exception($res->getMessage());
         }
 
@@ -370,6 +374,8 @@ class Schema
 
     public function createIndex($table, $columnNames, $name=null)
     {
+        global $_PEAR;
+
         if (!is_array($columnNames)) {
             $columnNames = array($columnNames);
         }
@@ -382,7 +388,7 @@ class Schema
                                    "ADD INDEX $name (".
                                    implode(",", $columnNames).")");
 
-        if (PEAR::isError($res)) {
+        if ($_PEAR->isError($res)) {
             throw new Exception($res->getMessage());
         }
 
@@ -400,9 +406,11 @@ class Schema
 
     public function dropIndex($table, $name)
     {
+        global $_PEAR;
+
         $res = $this->conn->query("ALTER TABLE $table DROP INDEX $name");
 
-        if (PEAR::isError($res)) {
+        if ($_PEAR->isError($res)) {
             throw new Exception($res->getMessage());
         }
 
@@ -421,11 +429,13 @@ class Schema
 
     public function addColumn($table, $columndef)
     {
+        global $_PEAR;
+
         $sql = "ALTER TABLE $table ADD COLUMN " . $this->_columnSql($columndef);
 
         $res = $this->conn->query($sql);
 
-        if (PEAR::isError($res)) {
+        if ($_PEAR->isError($res)) {
             throw new Exception($res->getMessage());
         }
 
@@ -445,12 +455,14 @@ class Schema
 
     public function modifyColumn($table, $columndef)
     {
+        global $_PEAR;
+
         $sql = "ALTER TABLE $table MODIFY COLUMN " .
           $this->_columnSql($columndef);
 
         $res = $this->conn->query($sql);
 
-        if (PEAR::isError($res)) {
+        if ($_PEAR->isError($res)) {
             throw new Exception($res->getMessage());
         }
 
@@ -470,11 +482,13 @@ class Schema
 
     public function dropColumn($table, $columnName)
     {
+        global $_PEAR;
+
         $sql = "ALTER TABLE $table DROP COLUMN $columnName";
 
         $res = $this->conn->query($sql);
 
-        if (PEAR::isError($res)) {
+        if ($_PEAR->isError($res)) {
             throw new Exception($res->getMessage());
         }
 
@@ -511,6 +525,8 @@ class Schema
      */
     function runSqlSet(array $statements)
     {
+        global $_PEAR;
+
         $ok = true;
         foreach ($statements as $sql) {
             if (defined('DEBUG_INSTALLER')) {
@@ -518,7 +534,7 @@ class Schema
             }
             $res = $this->conn->query($sql);
 
-            if (PEAR::isError($res)) {
+            if ($_PEAR->isError($res)) {
                 throw new Exception($res->getMessage());
             }
         }
@@ -560,12 +576,18 @@ class Schema
         $uniques = $this->diffArrays($old, $def, 'unique keys');
         $indexes = $this->diffArrays($old, $def, 'indexes');
         $foreign = $this->diffArrays($old, $def, 'foreign keys');
+        $fulltext = $this->diffArrays($old, $def, 'fulltext indexes');
 
         // Drop any obsolete or modified indexes ahead...
         foreach ($indexes['del'] + $indexes['mod'] as $indexName) {
             $this->appendDropIndex($statements, $tableName, $indexName);
         }
 
+        // Drop any obsolete or modified fulltext indexes ahead...
+        foreach ($fulltext['del'] + $fulltext['mod'] as $indexName) {
+            $this->appendDropIndex($statements, $tableName, $indexName);
+        }
+
         // For efficiency, we want this all in one
         // query, instead of using our methods.
 
@@ -579,6 +601,10 @@ class Schema
             $this->appendAlterDropUnique($phrase, $keyName);
         }
 
+        if (isset($old['primary key']) && (!isset($def['primary key']) || $def['primary key'] != $old['primary key'])) {
+            $this->appendAlterDropPrimary($phrase);
+        }
+
         foreach ($fields['add'] as $columnName) {
             $this->appendAlterAddColumn($phrase, $columnName,
                     $def['fields'][$columnName]);
@@ -594,6 +620,10 @@ class Schema
             $this->appendAlterDropColumn($phrase, $columnName);
         }
 
+        if (isset($def['primary key']) && (!isset($old['primary key']) || $old['primary key'] != $def['primary key'])) {
+            $this->appendAlterAddPrimary($phrase, $def['primary key']);
+        }
+
         foreach ($uniques['mod'] + $uniques['add'] as $keyName) {
             $this->appendAlterAddUnique($phrase, $keyName, $def['unique keys'][$keyName]);
         }
@@ -614,6 +644,11 @@ class Schema
             $this->appendCreateIndex($statements, $tableName, $indexName, $def['indexes'][$indexName]);
         }
 
+        foreach ($fulltext['mod'] + $fulltext['add'] as $indexName) {
+            $colDef = $def['fulltext indexes'][$indexName];
+            $this->appendCreateFulltextIndex($statements, $tableName, $indexName, $colDef);
+        }
+
         return $statements;
     }
 
@@ -713,6 +748,19 @@ class Schema
         $phrase[] = implode(' ', $sql);
     }
 
+    function appendAlterAddPrimary(array &$phrase, array $def)
+    {
+        $sql = array();
+        $sql[] = 'ADD';
+        $this->appendPrimaryKeyDef($sql, $def);
+        $phrase[] = implode(' ', $sql);
+    }
+
+    function appendAlterDropPrimary(array &$phrase)
+    {
+        $phrase[] = 'DROP CONSTRAINT PRIMARY KEY';
+    }
+
     function appendAlterDropUnique(array &$phrase, $keyName)
     {
         $phrase[] = 'DROP CONSTRAINT ' . $keyName;
@@ -993,8 +1041,10 @@ class Schema
      */
     protected function fetchQueryData($sql)
     {
+        global $_PEAR;
+
         $res = $this->conn->query($sql);
-        if (PEAR::isError($res)) {
+        if ($_PEAR->isError($res)) {
             throw new Exception($res->getMessage());
         }