X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=lib%2Fschema.php;h=f536f01645366a911ec95e78e24a16e37e60a88f;hb=959f971a6510a45f832f910999a24f063b41c953;hp=2e27955881c235450bbc383ad3e75791cfe11031;hpb=325cb4833db7e3fd396720f12a27b880b63f4173;p=quix0rs-gnu-social.git diff --git a/lib/schema.php b/lib/schema.php index 2e27955881..f536f01645 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,10 +345,12 @@ class Schema public function dropTable($name) { + global $_PEAR; + $res = $this->conn->query("DROP TABLE $name"); - if (PEAR::isError($res)) { - throw new Exception($res->getMessage()); + if ($_PEAR->isError($res)) { + PEAR_ErrorToPEAR_Exception($res); } return true; @@ -370,6 +374,8 @@ class Schema public function createIndex($table, $columnNames, $name=null) { + global $_PEAR; + if (!is_array($columnNames)) { $columnNames = array($columnNames); } @@ -382,8 +388,8 @@ class Schema "ADD INDEX $name (". implode(",", $columnNames).")"); - if (PEAR::isError($res)) { - throw new Exception($res->getMessage()); + if ($_PEAR->isError($res)) { + PEAR_ErrorToPEAR_Exception($res); } return true; @@ -400,10 +406,12 @@ class Schema public function dropIndex($table, $name) { + global $_PEAR; + $res = $this->conn->query("ALTER TABLE $table DROP INDEX $name"); - if (PEAR::isError($res)) { - throw new Exception($res->getMessage()); + if ($_PEAR->isError($res)) { + PEAR_ErrorToPEAR_Exception($res); } return true; @@ -421,12 +429,14 @@ 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)) { - throw new Exception($res->getMessage()); + if ($_PEAR->isError($res)) { + PEAR_ErrorToPEAR_Exception($res); } return true; @@ -445,13 +455,15 @@ 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)) { - throw new Exception($res->getMessage()); + if ($_PEAR->isError($res)) { + PEAR_ErrorToPEAR_Exception($res); } return true; @@ -470,12 +482,14 @@ 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)) { - throw new Exception($res->getMessage()); + if ($_PEAR->isError($res)) { + PEAR_ErrorToPEAR_Exception($res); } return true; @@ -511,6 +525,8 @@ class Schema */ function runSqlSet(array $statements) { + global $_PEAR; + $ok = true; foreach ($statements as $sql) { if (defined('DEBUG_INSTALLER')) { @@ -518,8 +534,9 @@ class Schema } $res = $this->conn->query($sql); - if (PEAR::isError($res)) { - throw new Exception($res->getMessage()); + if ($_PEAR->isError($res)) { + common_debug('PEAR exception on query: '.$sql); + PEAR_ErrorToPEAR_Exception($res); } } return $ok; @@ -560,12 +577,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 +602,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 +621,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 +645,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 +749,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,9 +1042,11 @@ class Schema */ protected function fetchQueryData($sql) { + global $_PEAR; + $res = $this->conn->query($sql); - if (PEAR::isError($res)) { - throw new Exception($res->getMessage()); + if ($_PEAR->isError($res)) { + PEAR_ErrorToPEAR_Exception($res); } $out = array();