From 1cfde5913d09de7ffaa52f98ef3c303cb363e524 Mon Sep 17 00:00:00 2001 From: Dries Buytaert Date: Mon, 1 Mar 2010 06:27:58 +0000 Subject: [PATCH] - Patch #582948 by David_Rothstein: more improvements to the erro handling of the database layer. --- includes/database/mysql/schema.inc | 16 ++++++++-------- includes/database/pgsql/schema.inc | 16 ++++++++-------- includes/database/schema.inc | 14 +++++++++++--- includes/database/sqlite/schema.inc | 16 ++++++++-------- 4 files changed, 35 insertions(+), 27 deletions(-) diff --git a/includes/database/mysql/schema.inc b/includes/database/mysql/schema.inc index b6b80af1465..69500d3fa1b 100644 --- a/includes/database/mysql/schema.inc +++ b/includes/database/mysql/schema.inc @@ -287,7 +287,7 @@ class DatabaseSchema_mysql extends DatabaseSchema { public function addField($table, $field, $spec, $keys_new = array()) { if (!$this->tableExists($table)) { - throw new DatabaseSchemaObjectDoesNotExistException(t("Cannot add field %table.%field: table doesn't exists.", array('%field' => $field, '%table' => $table))); + throw new DatabaseSchemaObjectDoesNotExistException(t("Cannot add field %table.%field: table doesn't exist.", array('%field' => $field, '%table' => $table))); } if ($this->columnExists($table, $field)) { throw new DatabaseSchemaObjectExistsException(t("Cannot add field %table.%field: field already exists.", array('%field' => $field, '%table' => $table))); @@ -326,7 +326,7 @@ class DatabaseSchema_mysql extends DatabaseSchema { public function fieldSetDefault($table, $field, $default) { if (!$this->columnExists($table, $field)) { - throw new DatabaseSchemaObjectDoesNotExistException(t("Cannot set default value of field %table.%field: field doesn't exists.", array('%table' => $table, '%field' => $field))); + throw new DatabaseSchemaObjectDoesNotExistException(t("Cannot set default value of field %table.%field: field doesn't exist.", array('%table' => $table, '%field' => $field))); } if (is_null($default)) { @@ -341,7 +341,7 @@ class DatabaseSchema_mysql extends DatabaseSchema { public function fieldSetNoDefault($table, $field) { if (!$this->columnExists($table, $field)) { - throw new DatabaseSchemaObjectDoesNotExistException(t("Cannot remove default value of field %table.%field: field doesn't exists.", array('%table' => $table, '%field' => $field))); + throw new DatabaseSchemaObjectDoesNotExistException(t("Cannot remove default value of field %table.%field: field doesn't exist.", array('%table' => $table, '%field' => $field))); } $this->connection->query('ALTER TABLE {' . $table . '} ALTER COLUMN `' . $field . '` DROP DEFAULT'); @@ -353,7 +353,7 @@ class DatabaseSchema_mysql extends DatabaseSchema { public function addPrimaryKey($table, $fields) { if (!$this->tableExists($table)) { - throw new DatabaseSchemaObjectDoesNotExistException(t("Cannot add primary key to table %table: table doesn't exists.", array('%table' => $table))); + throw new DatabaseSchemaObjectDoesNotExistException(t("Cannot add primary key to table %table: table doesn't exist.", array('%table' => $table))); } if ($this->indexExists($table, 'PRIMARY')) { throw new DatabaseSchemaObjectExistsException(t("Cannot add primary key to table %table: primary key already exists.", array('%table' => $table))); @@ -373,7 +373,7 @@ class DatabaseSchema_mysql extends DatabaseSchema { public function addUniqueKey($table, $name, $fields) { if (!$this->tableExists($table)) { - throw new DatabaseSchemaObjectDoesNotExistException(t("Cannot add unique key %name to table %table: table doesn't exists.", array('%table' => $table, '%name' => $name))); + throw new DatabaseSchemaObjectDoesNotExistException(t("Cannot add unique key %name to table %table: table doesn't exist.", array('%table' => $table, '%name' => $name))); } if ($this->indexExists($table, $name)) { throw new DatabaseSchemaObjectExistsException(t("Cannot add unique key %name to table %table: unique key already exists.", array('%table' => $table, '%name' => $name))); @@ -393,7 +393,7 @@ class DatabaseSchema_mysql extends DatabaseSchema { public function addIndex($table, $name, $fields) { if (!$this->tableExists($table)) { - throw new DatabaseSchemaObjectDoesNotExistException(t("Cannot add index %name to table %table: table doesn't exists.", array('%table' => $table, '%name' => $name))); + throw new DatabaseSchemaObjectDoesNotExistException(t("Cannot add index %name to table %table: table doesn't exist.", array('%table' => $table, '%name' => $name))); } if ($this->indexExists($table, $name)) { throw new DatabaseSchemaObjectExistsException(t("Cannot add index %name to table %table: index already exists.", array('%table' => $table, '%name' => $name))); @@ -413,10 +413,10 @@ class DatabaseSchema_mysql extends DatabaseSchema { public function changeField($table, $field, $field_new, $spec, $keys_new = array()) { if (!$this->columnExists($table, $field)) { - throw new DatabaseSchemaObjectDoesNotExistException(t("Cannot change the definition of field %table.%name: field doesn't exists.", array('%table' => $table, '%name' => $field))); + throw new DatabaseSchemaObjectDoesNotExistException(t("Cannot change the definition of field %table.%name: field doesn't exist.", array('%table' => $table, '%name' => $field))); } if (($field != $field_new) && $this->columnExists($table, $field_new)) { - throw new DatabaseSchemaObjectExistsException(t("Cannot rename field %table.%name to %name_new: target field already exists.", array('%table' => $table, '%name' => $name, '%name_new' => $field_new))); + throw new DatabaseSchemaObjectExistsException(t("Cannot rename field %table.%name to %name_new: target field already exists.", array('%table' => $table, '%name' => $field, '%name_new' => $field_new))); } $sql = 'ALTER TABLE {' . $table . '} CHANGE `' . $field . '` ' . $this->createFieldSql($field_new, $this->processField($spec)); diff --git a/includes/database/pgsql/schema.inc b/includes/database/pgsql/schema.inc index 58eb3fcc1fd..b7ab95f755d 100644 --- a/includes/database/pgsql/schema.inc +++ b/includes/database/pgsql/schema.inc @@ -311,7 +311,7 @@ class DatabaseSchema_pgsql extends DatabaseSchema { public function addField($table, $field, $spec, $new_keys = array()) { if (!$this->tableExists($table)) { - throw new DatabaseSchemaObjectDoesNotExistException(t("Cannot add field %table.%field: table doesn't exists.", array('%field' => $field, '%table' => $table))); + throw new DatabaseSchemaObjectDoesNotExistException(t("Cannot add field %table.%field: table doesn't exist.", array('%field' => $field, '%table' => $table))); } if ($this->columnExists($table, $field)) { throw new DatabaseSchemaObjectExistsException(t("Cannot add field %table.%field: field already exists.", array('%field' => $field, '%table' => $table))); @@ -353,7 +353,7 @@ class DatabaseSchema_pgsql extends DatabaseSchema { public function fieldSetDefault($table, $field, $default) { if (!$this->columnExists($table, $field)) { - throw new DatabaseSchemaObjectDoesNotExistException(t("Cannot set default value of field %table.%field: field doesn't exists.", array('%table' => $table, '%field' => $field))); + throw new DatabaseSchemaObjectDoesNotExistException(t("Cannot set default value of field %table.%field: field doesn't exist.", array('%table' => $table, '%field' => $field))); } if (is_null($default)) { @@ -368,7 +368,7 @@ class DatabaseSchema_pgsql extends DatabaseSchema { public function fieldSetNoDefault($table, $field) { if (!$this->columnExists($table, $field)) { - throw new DatabaseSchemaObjectDoesNotExistException(t("Cannot remove default value of field %table.%field: field doesn't exists.", array('%table' => $table, '%field' => $field))); + throw new DatabaseSchemaObjectDoesNotExistException(t("Cannot remove default value of field %table.%field: field doesn't exist.", array('%table' => $table, '%field' => $field))); } $this->connection->query('ALTER TABLE {' . $table . '} ALTER COLUMN "' . $field . '" DROP DEFAULT'); @@ -394,7 +394,7 @@ class DatabaseSchema_pgsql extends DatabaseSchema { public function addPrimaryKey($table, $fields) { if (!$this->tableExists($table)) { - throw new DatabaseSchemaObjectDoesNotExistException(t("Cannot add primary key to table %table: table doesn't exists.", array('%table' => $table))); + throw new DatabaseSchemaObjectDoesNotExistException(t("Cannot add primary key to table %table: table doesn't exist.", array('%table' => $table))); } if ($this->constraintExists($table, 'pkey')) { throw new DatabaseSchemaObjectExistsException(t("Cannot add primary key to table %table: primary key already exists.", array('%table' => $table))); @@ -414,7 +414,7 @@ class DatabaseSchema_pgsql extends DatabaseSchema { function addUniqueKey($table, $name, $fields) { if (!$this->tableExists($table)) { - throw new DatabaseSchemaObjectDoesNotExistException(t("Cannot add unique key %name to table %table: table doesn't exists.", array('%table' => $table, '%name' => $name))); + throw new DatabaseSchemaObjectDoesNotExistException(t("Cannot add unique key %name to table %table: table doesn't exist.", array('%table' => $table, '%name' => $name))); } if ($this->constraintExists($table, $name . '_key')) { throw new DatabaseSchemaObjectExistsException(t("Cannot add unique key %name to table %table: unique key already exists.", array('%table' => $table, '%name' => $name))); @@ -436,7 +436,7 @@ class DatabaseSchema_pgsql extends DatabaseSchema { public function addIndex($table, $name, $fields) { if (!$this->tableExists($table)) { - throw new DatabaseSchemaObjectDoesNotExistException(t("Cannot add index %name to table %table: table doesn't exists.", array('%table' => $table, '%name' => $name))); + throw new DatabaseSchemaObjectDoesNotExistException(t("Cannot add index %name to table %table: table doesn't exist.", array('%table' => $table, '%name' => $name))); } if ($this->indexExists($table, $name)) { throw new DatabaseSchemaObjectExistsException(t("Cannot add index %name to table %table: index already exists.", array('%table' => $table, '%name' => $name))); @@ -457,10 +457,10 @@ class DatabaseSchema_pgsql extends DatabaseSchema { public function changeField($table, $field, $field_new, $spec, $new_keys = array()) { if (!$this->columnExists($table, $field)) { - throw new DatabaseSchemaObjectDoesNotExistException(t("Cannot change the definition of field %table.%name: field doesn't exists.", array('%table' => $table, '%name' => $field))); + throw new DatabaseSchemaObjectDoesNotExistException(t("Cannot change the definition of field %table.%name: field doesn't exist.", array('%table' => $table, '%name' => $field))); } if (($field != $field_new) && $this->columnExists($table, $field_new)) { - throw new DatabaseSchemaObjectExistsException(t("Cannot rename field %table.%name to %name_new: target field already exists.", array('%table' => $table, '%name' => $name, '%name_new' => $field_new))); + throw new DatabaseSchemaObjectExistsException(t("Cannot rename field %table.%name to %name_new: target field already exists.", array('%table' => $table, '%name' => $field, '%name_new' => $field_new))); } if (!array_key_exists('size', $spec)) { diff --git a/includes/database/schema.inc b/includes/database/schema.inc index d575114eb68..75e7aab6b41 100644 --- a/includes/database/schema.inc +++ b/includes/database/schema.inc @@ -274,7 +274,7 @@ abstract class DatabaseSchema implements QueryPlaceholderInterface { * @throws DatabaseSchemaObjectDoesNotExistException * If the specified table doesn't exist. * @throws DatabaseSchemaObjectExistsException - * If the specified table target table already exist. + * If a table with the specified new name already exists. */ abstract public function renameTable($table, $new_name); @@ -576,12 +576,20 @@ abstract class DatabaseSchema implements QueryPlaceholderInterface { } /** - * Exception thrown if an object already exists on an operation creating a table, field or index. + * Exception thrown if an object being created already exists. + * + * For example, this exception should be thrown whenever there is an attempt to + * create a new database table, field, or index that already exists in the + * database schema. */ class DatabaseSchemaObjectExistsException extends Exception {} /** - * Exception thrown if an object doesn't exists on a modify operation. + * Exception thrown if an object being modified doesn't exist yet. + * + * For example, this exception should be thrown whenever there is an attempt to + * modify a database table, field, or index that does not currently exist in + * the database schema. */ class DatabaseSchemaObjectDoesNotExistException extends Exception {} diff --git a/includes/database/sqlite/schema.inc b/includes/database/sqlite/schema.inc index 8710d917c10..aa0e203f188 100644 --- a/includes/database/sqlite/schema.inc +++ b/includes/database/sqlite/schema.inc @@ -260,7 +260,7 @@ class DatabaseSchema_sqlite extends DatabaseSchema { public function addField($table, $field, $spec, $keys_new = array()) { if (!$this->tableExists($table)) { - throw new DatabaseSchemaObjectDoesNotExistException(t("Cannot add field %table.%field: table doesn't exists.", array('%field' => $field, '%table' => $table))); + throw new DatabaseSchemaObjectDoesNotExistException(t("Cannot add field %table.%field: table doesn't exist.", array('%field' => $field, '%table' => $table))); } if ($this->columnExists($table, $field)) { throw new DatabaseSchemaObjectExistsException(t("Cannot add field %table.%field: field already exists.", array('%field' => $field, '%table' => $table))); @@ -400,10 +400,10 @@ class DatabaseSchema_sqlite extends DatabaseSchema { public function changeField($table, $field, $field_new, $spec, $keys_new = array()) { if (!$this->columnExists($table, $field)) { - throw new DatabaseSchemaObjectDoesNotExistException(t("Cannot change the definition of field %table.%name: field doesn't exists.", array('%table' => $table, '%name' => $field))); + throw new DatabaseSchemaObjectDoesNotExistException(t("Cannot change the definition of field %table.%name: field doesn't exist.", array('%table' => $table, '%name' => $field))); } if (($field != $field_new) && $this->columnExists($table, $field_new)) { - throw new DatabaseSchemaObjectExistsException(t("Cannot rename field %table.%name to %name_new: target field already exists.", array('%table' => $table, '%name' => $name, '%name_new' => $field_new))); + throw new DatabaseSchemaObjectExistsException(t("Cannot rename field %table.%name to %name_new: target field already exists.", array('%table' => $table, '%name' => $field, '%name_new' => $field_new))); } $new_schema = $this->introspectSchema($table); @@ -423,7 +423,7 @@ class DatabaseSchema_sqlite extends DatabaseSchema { public function addIndex($table, $name, $fields) { if (!$this->tableExists($table)) { - throw new DatabaseSchemaObjectDoesNotExistException(t("Cannot add index %name to table %table: table doesn't exists.", array('%table' => $table, '%name' => $name))); + throw new DatabaseSchemaObjectDoesNotExistException(t("Cannot add index %name to table %table: table doesn't exist.", array('%table' => $table, '%name' => $name))); } if ($this->indexExists($table, $name)) { throw new DatabaseSchemaObjectExistsException(t("Cannot add index %name to table %table: index already exists.", array('%table' => $table, '%name' => $name))); @@ -451,7 +451,7 @@ class DatabaseSchema_sqlite extends DatabaseSchema { public function addUniqueKey($table, $name, $fields) { if (!$this->tableExists($table)) { - throw new DatabaseSchemaObjectDoesNotExistException(t("Cannot add unique key %name to table %table: table doesn't exists.", array('%table' => $table, '%name' => $name))); + throw new DatabaseSchemaObjectDoesNotExistException(t("Cannot add unique key %name to table %table: table doesn't exist.", array('%table' => $table, '%name' => $name))); } if ($this->indexExists($table, $name)) { throw new DatabaseSchemaObjectExistsException(t("Cannot add unique key %name to table %table: unique key already exists.", array('%table' => $table, '%name' => $name))); @@ -475,7 +475,7 @@ class DatabaseSchema_sqlite extends DatabaseSchema { public function addPrimaryKey($table, $fields) { if (!$this->tableExists($table)) { - throw new DatabaseSchemaObjectDoesNotExistException(t("Cannot add primary key to table %table: table doesn't exists.", array('%table' => $table))); + throw new DatabaseSchemaObjectDoesNotExistException(t("Cannot add primary key to table %table: table doesn't exist.", array('%table' => $table))); } $new_schema = $this->introspectSchema($table); @@ -500,7 +500,7 @@ class DatabaseSchema_sqlite extends DatabaseSchema { public function fieldSetDefault($table, $field, $default) { if (!$this->columnExists($table, $field)) { - throw new DatabaseSchemaObjectDoesNotExistException(t("Cannot set default value of field %table.%field: field doesn't exists.", array('%table' => $table, '%field' => $field))); + throw new DatabaseSchemaObjectDoesNotExistException(t("Cannot set default value of field %table.%field: field doesn't exist.", array('%table' => $table, '%field' => $field))); } $new_schema = $this->introspectSchema($table); @@ -510,7 +510,7 @@ class DatabaseSchema_sqlite extends DatabaseSchema { public function fieldSetNoDefault($table, $field) { if (!$this->columnExists($table, $field)) { - throw new DatabaseSchemaObjectDoesNotExistException(t("Cannot set default value of field %table.%field: field doesn't exists.", array('%table' => $table, '%field' => $field))); + throw new DatabaseSchemaObjectDoesNotExistException(t("Cannot remove default value of field %table.%field: field doesn't exist.", array('%table' => $table, '%field' => $field))); } $new_schema = $this->introspectSchema($table);