From cb391a1856cb8c79694cd5a4485c173efb557522 Mon Sep 17 00:00:00 2001 From: Dries Buytaert Date: Sun, 4 Apr 2010 07:20:05 +0000 Subject: - Patch #748340 by Berdir, andypost, catch, noahb, Crell: MySQL-optimized tableExists() implementation. --- includes/database/mysql/schema.inc | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) (limited to 'includes/database/mysql') 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; + } + } + } /** -- cgit v1.2.3