diff options
author | Dries Buytaert <dries@buytaert.net> | 2009-12-15 08:30:53 +0000 |
---|---|---|
committer | Dries Buytaert <dries@buytaert.net> | 2009-12-15 08:30:53 +0000 |
commit | 8b0fc579113af6be4357f881b2d12cd885af3d46 (patch) | |
tree | d71521372e49b1418e17298c24e0ecc599f4a9a4 /includes | |
parent | c3080a04019a7c15ad5bb47634be15aae97240d7 (diff) | |
download | brdo-8b0fc579113af6be4357f881b2d12cd885af3d46.tar.gz brdo-8b0fc579113af6be4357f881b2d12cd885af3d46.tar.bz2 |
- Patch #360854 by sammys, Crell: added missing db_index_exists(), required to provide proper upgrade path from Drupal 6 to Drupal 7.
Diffstat (limited to 'includes')
-rw-r--r-- | includes/database/database.inc | 12 | ||||
-rw-r--r-- | includes/database/mysql/schema.inc | 24 | ||||
-rw-r--r-- | includes/database/pgsql/schema.inc | 24 | ||||
-rw-r--r-- | includes/database/schema.inc | 12 | ||||
-rw-r--r-- | includes/database/sqlite/schema.inc | 16 |
5 files changed, 62 insertions, 26 deletions
diff --git a/includes/database/database.inc b/includes/database/database.inc index fb324eded..e972258ed 100644 --- a/includes/database/database.inc +++ b/includes/database/database.inc @@ -2373,6 +2373,18 @@ function db_field_names($fields) { } /** + * Check if an index exists. + * + * @param $name + * Index name. + * @return + * TRUE if the given index exists, otherwise FALSE. + */ +function db_index_exists($name) { + return Database::getConnection()->schema()->indexExists($name); +} + +/** * Check if a table exists. */ function db_table_exists($table) { diff --git a/includes/database/mysql/schema.inc b/includes/database/mysql/schema.inc index 4fa20abf8..b87bb16d3 100644 --- a/includes/database/mysql/schema.inc +++ b/includes/database/mysql/schema.inc @@ -269,11 +269,11 @@ class DatabaseSchema_mysql extends DatabaseSchema { } public function renameTable($table, $new_name) { - $this->connection->query('ALTER TABLE {' . $table . '} RENAME TO {' . $new_name . '}'); + $this->connection->query('ALTER TABLE {' . $table . '} RENAME TO {' . $new_name . '}'); } public function dropTable($table) { - $this->connection->query('DROP TABLE {' . $table . '}'); + $this->connection->query('DROP TABLE {' . $table . '}'); } public function addField($table, $field, $spec, $keys_new = array()) { @@ -300,7 +300,7 @@ class DatabaseSchema_mysql extends DatabaseSchema { } public function dropField($table, $field) { - $this->connection->query('ALTER TABLE {' . $table . '} DROP `' . $field . '`'); + $this->connection->query('ALTER TABLE {' . $table . '} DROP `' . $field . '`'); } public function fieldSetDefault($table, $field, $default) { @@ -315,31 +315,35 @@ class DatabaseSchema_mysql extends DatabaseSchema { } public function fieldSetNoDefault($table, $field) { - $this->connection->query('ALTER TABLE {' . $table . '} ALTER COLUMN `' . $field . '` DROP DEFAULT'); + $this->connection->query('ALTER TABLE {' . $table . '} ALTER COLUMN `' . $field . '` DROP DEFAULT'); + } + + public function indexExists($table, $name) { + return $this->connection->query('SHOW INDEX FROM {' . $table . "} WHERE key_name = '$name'")->fetchField(); } public function addPrimaryKey($table, $fields) { - $this->connection->query('ALTER TABLE {' . $table . '} ADD PRIMARY KEY (' . $this->createKeySql($fields) . ')'); + $this->connection->query('ALTER TABLE {' . $table . '} ADD PRIMARY KEY (' . $this->createKeySql($fields) . ')'); } public function dropPrimaryKey($table) { - $this->connection->query('ALTER TABLE {' . $table . '} DROP PRIMARY KEY'); + $this->connection->query('ALTER TABLE {' . $table . '} DROP PRIMARY KEY'); } public function addUniqueKey($table, $name, $fields) { - $this->connection->query('ALTER TABLE {' . $table . '} ADD UNIQUE KEY `' . $name . '` (' . $this->createKeySql($fields) . ')'); + $this->connection->query('ALTER TABLE {' . $table . '} ADD UNIQUE KEY `' . $name . '` (' . $this->createKeySql($fields) . ')'); } public function dropUniqueKey($table, $name) { - $this->connection->query('ALTER TABLE {' . $table . '} DROP KEY `' . $name . '`'); + $this->connection->query('ALTER TABLE {' . $table . '} DROP KEY `' . $name . '`'); } public function addIndex($table, $name, $fields) { - $this->connection->query('ALTER TABLE {' . $table . '} ADD INDEX `' . $name . '` (' . $this->createKeySql($fields) . ')'); + $this->connection->query('ALTER TABLE {' . $table . '} ADD INDEX `' . $name . '` (' . $this->createKeySql($fields) . ')'); } public function dropIndex($table, $name) { - $this->connection->query('ALTER TABLE {' . $table . '} DROP INDEX `' . $name . '`'); + $this->connection->query('ALTER TABLE {' . $table . '} DROP INDEX `' . $name . '`'); } public function changeField($table, $field, $field_new, $spec, $keys_new = array()) { diff --git a/includes/database/pgsql/schema.inc b/includes/database/pgsql/schema.inc index e2aefe108..578c074bb 100644 --- a/includes/database/pgsql/schema.inc +++ b/includes/database/pgsql/schema.inc @@ -275,11 +275,11 @@ class DatabaseSchema_pgsql extends DatabaseSchema { } function renameTable($table, $new_name) { - $this->connection->query('ALTER TABLE {' . $table . '} RENAME TO {' . $new_name . '}'); + $this->connection->query('ALTER TABLE {' . $table . '} RENAME TO {' . $new_name . '}'); } public function dropTable($table) { - $this->connection->query('DROP TABLE {' . $table . '}'); + $this->connection->query('DROP TABLE {' . $table . '}'); } /** @@ -320,14 +320,14 @@ class DatabaseSchema_pgsql extends DatabaseSchema { ->execute(); } if ($fixnull) { - $this->connection->query("ALTER TABLE {" . $table . "} ALTER $field SET NOT NULL"); + $this->connection->query("ALTER TABLE {" . $table . "} ALTER $field SET NOT NULL"); } if (isset($new_keys)) { $this->_createKeys($table, $new_keys); } // Add column comment. if (!empty($spec['description'])) { - $this->connection->query('COMMENT ON COLUMN {' . $table . '}.' . $field . ' IS ' . $this->prepareComment($spec['description'])); + $this->connection->query('COMMENT ON COLUMN {' . $table . '}.' . $field . ' IS ' . $this->prepareComment($spec['description'])); } } @@ -340,7 +340,7 @@ class DatabaseSchema_pgsql extends DatabaseSchema { * The field to be dropped. */ public function dropField($table, $field) { - $this->connection->query('ALTER TABLE {' . $table . '} DROP COLUMN "' . $field . '"'); + $this->connection->query('ALTER TABLE {' . $table . '} DROP COLUMN "' . $field . '"'); } /** @@ -373,7 +373,11 @@ class DatabaseSchema_pgsql extends DatabaseSchema { * The field to be altered. */ public function fieldSetNoDefault($table, $field) { - $this->connection->query('ALTER TABLE {' . $table . '} ALTER COLUMN "' . $field . '" DROP DEFAULT'); + $this->connection->query('ALTER TABLE {' . $table . '} ALTER COLUMN "' . $field . '" DROP DEFAULT'); + } + + public function indexExists($table, $name) { + return $this->connection->query("SELECT COUNT(indexname) FROM pg_indexes WHERE indexname = '$name'")->fetchField(); } /** @@ -385,7 +389,7 @@ class DatabaseSchema_pgsql extends DatabaseSchema { * Fields for the primary key. */ public function addPrimaryKey($table, $fields) { - $this->connection->query('ALTER TABLE {' . $table . '} ADD PRIMARY KEY (' . implode(',', $fields) . ')'); + $this->connection->query('ALTER TABLE {' . $table . '} ADD PRIMARY KEY (' . implode(',', $fields) . ')'); } /** @@ -395,7 +399,7 @@ class DatabaseSchema_pgsql extends DatabaseSchema { * The table to be altered. */ public function dropPrimaryKey($table) { - $this->connection->query('ALTER TABLE {' . $table . '} DROP CONSTRAINT {' . $table . '}_pkey'); + $this->connection->query('ALTER TABLE {' . $table . '} DROP CONSTRAINT {' . $table . '}_pkey'); } /** @@ -437,7 +441,7 @@ class DatabaseSchema_pgsql extends DatabaseSchema { * An array of field names. */ public function addIndex($table, $name, $fields) { - $this->connection->query($this->_createIndexSql($table, $name, $fields)); + $this->connection->query($this->_createIndexSql($table, $name, $fields)); } /** @@ -534,7 +538,7 @@ class DatabaseSchema_pgsql extends DatabaseSchema { $this->connection->query("UPDATE {" . $table . "} SET $field_new = CAST(" . $field . "_old as " . $typecast . ")"); if ($not_null) { - $this->connection->query("ALTER TABLE {" . $table . "} ALTER $field_new SET NOT NULL"); + $this->connection->query("ALTER TABLE {" . $table . "} ALTER $field_new SET NOT NULL"); } $this->dropField($table, $field . '_old'); diff --git a/includes/database/schema.inc b/includes/database/schema.inc index 61f698685..af7ed4dbe 100644 --- a/includes/database/schema.inc +++ b/includes/database/schema.inc @@ -338,6 +338,18 @@ abstract class DatabaseSchema implements QueryPlaceholderInterface { abstract public function fieldSetNoDefault($table, $field); /** + * Checks if an index exists. + * + * @param $table + * Name of the table. + * @param $name + * Name of the index. + * @return + * Index name if the table exists. Otherwise FALSE. + */ + abstract public function indexExists($table, $name); + + /** * Add a primary key. * * @param $table diff --git a/includes/database/sqlite/schema.inc b/includes/database/sqlite/schema.inc index 893f54be7..ff3f35c68 100644 --- a/includes/database/sqlite/schema.inc +++ b/includes/database/sqlite/schema.inc @@ -220,7 +220,7 @@ class DatabaseSchema_sqlite extends DatabaseSchema { * The new name for the table. */ public function renameTable($table, $new_name) { - $this->connection->query('ALTER TABLE {' . $table . '} RENAME TO {' . $new_name . '}'); + $this->connection->query('ALTER TABLE {' . $table . '} RENAME TO {' . $new_name . '}'); } /** @@ -230,7 +230,7 @@ class DatabaseSchema_sqlite extends DatabaseSchema { * The table to be dropped. */ public function dropTable($table) { - $this->connection->query('DROP TABLE {' . $table . '}'); + $this->connection->query('DROP TABLE {' . $table . '}'); } /** @@ -429,10 +429,14 @@ class DatabaseSchema_sqlite extends DatabaseSchema { $schema['indexes'][$name] = $fields; $statements = $this->createIndexSql($table, $schema); foreach ($statements as $statement) { - $this->connection->query($statement); + $this->connection->query($statement); } } + public function indexExists($table, $name) { + return ($this->connection->query("PRAGMA index_info($name)")->fetchField() != ''); + } + /** * Drop an index. * @@ -442,7 +446,7 @@ class DatabaseSchema_sqlite extends DatabaseSchema { * The name of the index. */ public function dropIndex($table, $name) { - $this->connection->query('DROP INDEX ' . '{' . $table . '}_' . $name); + $this->connection->query('DROP INDEX ' . '{' . $table . '}_' . $name); } /** @@ -459,7 +463,7 @@ class DatabaseSchema_sqlite extends DatabaseSchema { $schema['unique keys'][$name] = $fields; $statements = $this->createIndexSql($table, $schema); foreach ($statements as $statement) { - $this->connection->query($statement); + $this->connection->query($statement); } } @@ -472,7 +476,7 @@ class DatabaseSchema_sqlite extends DatabaseSchema { * The name of the key. */ public function dropUniqueKey($table, $name) { - $this->connection->query('DROP INDEX ' . '{' . $table . '}_' . $name); + $this->connection->query('DROP INDEX ' . '{' . $table . '}_' . $name); } /** |