Index: includes/database/schema.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/database/schema.inc,v
retrieving revision 1.5
diff -u -p -r1.5 schema.inc
--- includes/database/schema.inc	3 Dec 2008 16:32:21 -0000	1.5
+++ includes/database/schema.inc	7 Dec 2008 23:02:23 -0000
@@ -415,14 +415,47 @@ abstract class DatabaseSchema {
    *   Array, both the keys and the values are the matching tables.
    */
   public function findTables($table_expression) {
-    global $db_prefix;
-    $info = Database::getConnectionInfo();
     $result = db_query("SELECT table_name FROM information_schema.tables WHERE table_schema = :database AND table_name LIKE :table_name", array(
-      ':database' => $info['default']['database'],
-      ':table_name' => $table_expression,
+      ':database'   => $this->explodeTable($table_expression)->database,
+      ':table_name' => this->explodeTable($table_expression)->table,
     ));
     return $result->fetchAllKeyed(0, 0);
   }
+
+  /**
+   * breaks information about a table up into better peices
+   *
+   * @param table name to get specific infomation about
+   *
+   * @return 
+   *    object (
+   *       schema   => //schema within database
+   *       database => //database table exists in
+   *       table    => //table name including prefix
+   *    )
+   */
+  protected function explodeTable($table) {
+    global $db_prefix;
+    
+    //initializing
+    $info   = Database::getConnection();
+    $prefix = $db_prefix;
+    $schema = "pubic";
+
+    if (is_array($db_prefix)) 
+    {
+      $prefix = isset($db_prefix[$table]) ? $db_prefix[$table] : $db_prefix['default'];
+    } 
+    if (strpos('.', $prefix))
+    {
+      list($schema, $prefix) = explode('.', $prefix);
+    }
+    return (object) array(
+                        "schema"   => $schema,
+                        "database" => $info['default']['database'],
+                        "table"    => $prefix . $table,
+                    );
+  }
 }
 
 /**
Index: includes/database/mysql/schema.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/database/mysql/schema.inc,v
retrieving revision 1.7
diff -u -p -r1.7 schema.inc
--- includes/database/mysql/schema.inc	2 Dec 2008 19:45:01 -0000	1.7
+++ includes/database/mysql/schema.inc	7 Dec 2008 23:02:23 -0000
@@ -15,14 +15,20 @@
 class DatabaseSchema_mysql extends DatabaseSchema {
 
   public function tableExists($table) {
-    return (bool) $this->connection->query("SHOW TABLES LIKE '{" . $table . "}'", array(), array())->fetchField();
-  }
-
+    return (bool) db_result(db_query("SELECT COUNT(table_name) FROM information_schema.tables WHERE table_schema = :database AND table_name = :table", array(
+      ':database'   => $this->explodeTable($table)->database,
+      ':table'      => $this->explodeTable($table)->table,
+    )));
+  }   
+      
   public function columnExists($table, $column) {
-    return (bool) $this->connection->query("SHOW COLUMNS FROM {" . $this->connection->escapeTable($table) . "} LIKE '" . $this->connection->escapeTable($column) . "'", array(), array())->fetchField();
+    return (bool) db_result(db_query("SELECT COUNT(column_name) FROM information_schema.columns WHERE table_schema = :database AND table_name = :table AND column_name = :column", array(
+      ':database' => $this->explodeTable($table)->database,
+      ':table'    => $this->explodeTable($table)->table,
+      ':column'   => $column,
+    )));
   }
 
-
   /**
    * Generate SQL to create a new table from a Drupal schema definition.
    *
Index: includes/database/pgsql/schema.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/database/pgsql/schema.inc,v
retrieving revision 1.3
diff -u -p -r1.3 schema.inc
--- includes/database/pgsql/schema.inc	26 Nov 2008 13:42:25 -0000	1.3
+++ includes/database/pgsql/schema.inc	7 Dec 2008 23:02:23 -0000
@@ -14,11 +14,20 @@
 class DatabaseSchema_pgsql extends DatabaseSchema {
 
   public function tableExists($table) {
-    return (bool) db_result(db_query("SELECT COUNT(*) FROM pg_class WHERE relname = '{" . db_escape_table($table) . "}'"));
+    return (bool) db_result(db_query("SELECT COUNT(table_name) FROM information_schema.tables WHERE table_schema = :schema AND table_catalog = :database AND table_name = :table", array(
+      ':schema'   => $this->explodeTable($table)->schema,// will return 'public' in most cases
+      ':database' => $this->explodeTable($table)->database,
+      ':table'    => $this->explodeTable($table)->table,
+    )));
   }
 
   public function columnExists($table, $column) {
-    return (bool) db_result(db_query("SELECT COUNT(pg_attribute.attname) FROM pg_class, pg_attribute WHERE pg_attribute.attrelid = pg_class.oid AND pg_class.relname = '{" . db_escape_table($table) . "}' AND attname = '" . db_escape_table($column) . "'"));
+    return (bool) db_result(db_query("SELECT COUNT(column_name) FROM information_schema.columns WHERE table_schema = :schema AND table_catalog = :database AND table_name = :table AND column_name = :column", array(
+      ':schema'   => $this->explodeTable($table)->schema,// will return 'public' in most cases
+      ':database' => $this->explodeTable($table)->database,
+      ':table'    => $this->explodeTable($table)->table,
+      ':column'   => $column,
+    )));
   }
 
   /**
@@ -506,4 +515,23 @@ class DatabaseSchema_pgsql extends Datab
       }
     }
   }
+
+  /**
+   * Find all tables that are like the specified base table name.
+   *
+   * @param $table_expression
+   *   An SQL expression, for example "simpletest%" (without the quotes).
+   *   BEWARE: this is not prefixed, the caller should take care of that.
+   * @return
+   *   Array, both the keys and the values are the matching tables.
+   */
+  public function findTables($table_expression) {
+    $result = db_query("SELECT table_name FROM information_schema.tables WHERE table_schema = :schema AND table_catalog = :database AND table_name LIKE :table_name", array(
+      ':schema'   => $this->explodeTable($table_expression)->schema,
+      ':database' => $this->explodeTable($table_expression)->database,
+      ':table_name' => $this->explodeTable($table_expression)->table,
+    ));
+    return $result->fetchAllKeyed(0, 0);
+  }
+
 }
