diff options
author | Dries Buytaert <dries@buytaert.net> | 2010-04-04 07:20:05 +0000 |
---|---|---|
committer | Dries Buytaert <dries@buytaert.net> | 2010-04-04 07:20:05 +0000 |
commit | cb391a1856cb8c79694cd5a4485c173efb557522 (patch) | |
tree | 0d44f6be5113501316108f9d803fe03391e9d99c /includes | |
parent | 1c4ff2fc67160f0f8dbcfcd40d88866411c47295 (diff) | |
download | brdo-cb391a1856cb8c79694cd5a4485c173efb557522.tar.gz brdo-cb391a1856cb8c79694cd5a4485c173efb557522.tar.bz2 |
- Patch #748340 by Berdir, andypost, catch, noahb, Crell: MySQL-optimized tableExists() implementation.
Diffstat (limited to 'includes')
-rw-r--r-- | includes/database/mysql/schema.inc | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/includes/database/mysql/schema.inc b/includes/database/mysql/schema.inc index 9af75fd50..93c547eea 100644 --- a/includes/database/mysql/schema.inc +++ b/includes/database/mysql/schema.inc @@ -460,6 +460,40 @@ class DatabaseSchema_mysql extends DatabaseSchema { return preg_replace('/; InnoDB free:.*$/', '', $comment); } + public function tableExists($table) { + // The information_schema table is very slow to query under MySQL 5.0. + // Instead, we try to select from the table in question. If it fails, + // the most likely reason is that it does not exist. That is dramatically + // faster than using information_schema. + // @link http://bugs.mysql.com/bug.php?id=19588 + // @todo: This override should be removed once we require a version of MySQL + // that has that bug fixed. + try { + $this->connection->queryRange("SELECT 1 FROM {" . $table . "}", 0, 1); + return TRUE; + } + catch (Exception $e) { + return FALSE; + } + } + + public function fieldExists($table, $column) { + // The information_schema table is very slow to query under MySQL 5.0. + // Instead, we try to select from the table and field in question. If it + // fails, the most likely reason is that it does not exist. That is + // dramatically faster than using information_schema. + // @link http://bugs.mysql.com/bug.php?id=19588 + // @todo: This override should be removed once we require a version of MySQL + // that has that bug fixed. + try { + $this->connection->queryRange("SELECT $column FROM {" . $table . "}", 0, 1); + return TRUE; + } + catch (Exception $e) { + return FALSE; + } + } + } /** |