X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=lib%2Fschema.php;h=94cde28f9d4692610a5b00cafd11c693ca61f1b5;hb=13c331fa8152f11a811d2ff66210b3298bc21ada;hp=2e27955881c235450bbc383ad3e75791cfe11031;hpb=c97048d01bea468e0cf8865b60c3c250b4515c39;p=quix0rs-gnu-social.git diff --git a/lib/schema.php b/lib/schema.php index 2e27955881..94cde28f9d 100644 --- a/lib/schema.php +++ b/lib/schema.php @@ -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()); }