]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - lib/schema.php
Merge commit 'refs/merge-requests/165' of git://gitorious.org/statusnet/mainline...
[quix0rs-gnu-social.git] / lib / schema.php
index 2e27955881c235450bbc383ad3e75791cfe11031..92555499baffd3f64215cc63933800dfaf476a12 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;
+                }
             }
         }
 
@@ -560,12 +562,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 +587,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 +606,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 +630,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 +734,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;