=== modified file 'includes/database/database.inc'
--- includes/database/database.inc	2008-11-03 05:55:55 +0000
+++ includes/database/database.inc	2008-11-07 02:51:51 +0000
@@ -160,7 +160,10 @@ abstract class DatabaseConnection extend
     $driver_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
     // Call PDO::__construct and PDO::setAttribute.
     parent::__construct($dsn, $username, $password, $driver_options);
-    $this->setAttribute(PDO::ATTR_STATEMENT_CLASS, array('DatabaseStatement', array($this)));
+    // Allow drivers to set their own statement classes.
+    if (empty($driver_options['use_driver_specific_statement'])) {
+      $this->setAttribute(PDO::ATTR_STATEMENT_CLASS, array('BaseDatabaseStatement', array($this)));
+    }
   }
 
   /**
@@ -417,7 +420,7 @@ abstract class DatabaseConnection extend
       _db_check_install_needed();
       if ($options['throw_exception']) {
         if ($query instanceof DatabaseStatement) {
-          $query_string = $stmt->queryString;
+          $query_string = $stmt->getQueryString();
         }
         else {
           $query_string = $query;
@@ -562,7 +565,7 @@ abstract class DatabaseConnection extend
    *   The sanitized table name string.
    */
   public function escapeTable($table) {
-    return preg_replace('/[^A-Za-z0-9_]+/', '', $string);
+    return preg_replace('/[^A-Za-z0-9_]+/', '', $table);
   }
 
   /**
@@ -1159,6 +1162,16 @@ class DatabaseTransaction {
 
 }
 
+interface DatabaseStatement {
+  public function execute($args, $options);
+  public function getQueryString();
+  public function fetchCol($index = 0);
+  public function fetchAllAssoc($key, $fetch = PDO::FETCH_OBJ);
+  public function fetchAllKeyed($key_index = 0, $value_index = 1);
+  public function fetchField($index = 0);
+  public function fetchAssoc();
+}
+
 /**
  * Prepared statement class.
  *
@@ -1169,7 +1182,7 @@ class DatabaseTransaction {
  *
  * @link http://us.php.net/pdostatement
  */
-class DatabaseStatement extends PDOStatement {
+class BaseDatabaseStatement extends PDOStatement implements DatabaseStatement {
 
   /**
    * Reference to the database connection object for this statement.
@@ -1185,6 +1198,10 @@ class DatabaseStatement extends PDOState
     $this->setFetchMode(PDO::FETCH_OBJ);
   }
 
+  public function getQueryString() {
+    return $this->queryString;
+  }
+
   /**
    * Executes a prepared statement
    *

