summaryrefslogtreecommitdiff
path: root/includes
diff options
context:
space:
mode:
authorDries Buytaert <dries@buytaert.net>2010-04-04 07:20:05 +0000
committerDries Buytaert <dries@buytaert.net>2010-04-04 07:20:05 +0000
commitcb391a1856cb8c79694cd5a4485c173efb557522 (patch)
tree0d44f6be5113501316108f9d803fe03391e9d99c /includes
parent1c4ff2fc67160f0f8dbcfcd40d88866411c47295 (diff)
downloadbrdo-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.inc34
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;
+ }
+ }
+
}
/**