From 205c5b2415deb10d4afba32249e7f5f989a097b1 Mon Sep 17 00:00:00 2001 From: Dries Buytaert Date: Sat, 29 Nov 2008 09:30:36 +0000 Subject: [PATCH] - Patch #337926 by hswong3i, Dave Reid, Damien Tournoud: forced connection with PDF:CASE_LOWER. --- includes/database/database.inc | 16 ++++++++++++---- includes/database/mysql/database.inc | 10 +++------- includes/database/pgsql/database.inc | 15 ++++----------- includes/database/sqlite/database.inc | 6 +++--- 4 files changed, 22 insertions(+), 25 deletions(-) diff --git a/includes/database/database.inc b/includes/database/database.inc index fc94e55e7a9..f05a712428f 100644 --- a/includes/database/database.inc +++ b/includes/database/database.inc @@ -210,6 +210,13 @@ abstract class DatabaseConnection extends PDO { */ protected $transactionClass = NULL; + /** + * The name of the Statement class for this connection. + * + * @var string + */ + protected $statementClass = NULL; + /** * The schema object for this connection. * @@ -219,8 +226,9 @@ abstract class DatabaseConnection extends PDO { function __construct($dsn, $username, $password, $driver_options = array()) { // Fallback to DatabaseStatementBase if the driver has not specified one. - $statement_class = isset($driver_options['statement_class']) ? $driver_options['statement_class'] : 'DatabaseStatementBase'; - unset($driver_options['statement_class']); + if (empty($this->statementClass)) { + $this->statementClass = 'DatabaseStatementBase'; + } // Because the other methods don't seem to work right. $driver_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION; @@ -229,8 +237,8 @@ abstract class DatabaseConnection extends PDO { parent::__construct($dsn, $username, $password, $driver_options); // Set a specific PDOStatement class if the driver requires that. - if (!empty($statement_class)) { - $this->setAttribute(PDO::ATTR_STATEMENT_CLASS, array($statement_class, array($this))); + if ($this->statementClass != 'PDOStatement') { + $this->setAttribute(PDO::ATTR_STATEMENT_CLASS, array($this->statementClass, array($this))); } } diff --git a/includes/database/mysql/database.inc b/includes/database/mysql/database.inc index 23470abc3e2..82c96292929 100644 --- a/includes/database/mysql/database.inc +++ b/includes/database/mysql/database.inc @@ -13,15 +13,11 @@ class DatabaseConnection_mysql extends DatabaseConnection { - protected $transactionSupport; + protected $transactionSupport = FALSE; public function __construct(Array $connection_options = array()) { - - $connection_options += array( - 'transactions' => FALSE, - 'port' => 3306, - ); - $this->transactionSupport = $connection_options['transactions']; + $this->transactionSupport = isset($connection_options['transactions']) ? $connection_options['transactions'] : FALSE; + $connection_options['port'] = !empty($connection_options['port']) ? $connection_options['port'] : 3306; $dsn = 'mysql:host=' . $connection_options['host'] . ';port=' . $connection_options['port'] . ';dbname=' . $connection_options['database']; parent::__construct($dsn, $connection_options['username'], $connection_options['password'], array( diff --git a/includes/database/pgsql/database.inc b/includes/database/pgsql/database.inc index 04e40322275..6fd15b2e70b 100644 --- a/includes/database/pgsql/database.inc +++ b/includes/database/pgsql/database.inc @@ -13,20 +13,13 @@ class DatabaseConnection_pgsql extends DatabaseConnection { - protected $transactionSupport; + protected $transactionSupport = TRUE; public function __construct(Array $connection_options = array()) { + $this->transactionSupport = isset($connection_options['transactions']) ? $connection_options['transactions'] : TRUE; + $connection_options['port'] = !empty($connection_options['port']) ? $connection_options['port'] : 5432; - $connection_options += array( - 'transactions' => TRUE, - ); - $this->transactionSupport = $connection_options['transactions']; - - $dsn = 'pgsql:host=' . $connection_options['host'] . ' dbname=' . $connection_options['database']; - if (!empty($connection_options['port'])) { - $dsn .= ' port=' . $connection_options['port']; - } - + $dsn = 'pgsql:host=' . $connection_options['host'] . ' dbname=' . $connection_options['database'] . ' port=' . $connection_options['port']; parent::__construct($dsn, $connection_options['username'], $connection_options['password'], array( // Convert numeric values to strings when fetching. PDO::ATTR_STRINGIFY_FETCHES => TRUE, diff --git a/includes/database/sqlite/database.inc b/includes/database/sqlite/database.inc index 7f3d521cfa1..2a69e131faa 100644 --- a/includes/database/sqlite/database.inc +++ b/includes/database/sqlite/database.inc @@ -27,11 +27,11 @@ class DatabaseConnection_sqlite extends DatabaseConnection { public function __construct(Array $connection_options = array()) { // We don't need a specific PDOStatement class here, we simulate it below. - $connection_options['statement_class'] = FALSE; - + $this->statementClass = 'PDOStatement'; $this->transactionSupport = isset($connection_options['transactions']) ? $connection_options['transactions'] : TRUE; - parent::__construct('sqlite:'. $connection_options['database'], '', '', array( + $dns = 'sqlite:'. $connection_options['database']; + parent::__construct($dns, '', '', array( // Force column names to lower case. PDO::ATTR_CASE => PDO::CASE_LOWER, ));