diff --git a/core/lib/Drupal/Core/Database/Driver/mysql/Connection.php b/core/lib/Drupal/Core/Database/Driver/mysql/Connection.php index 4480924..9e0e65f 100644 --- a/core/lib/Drupal/Core/Database/Driver/mysql/Connection.php +++ b/core/lib/Drupal/Core/Database/Driver/mysql/Connection.php @@ -68,11 +68,10 @@ public static function open(array &$connection_options = array()) { } // Allow PDO options to be overridden. $connection_options += array( - 'pdo' => array( - PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, - ), + 'pdo' => array(), ); $connection_options['pdo'] += array( + PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, // So we don't have to mess around with cursors and unbuffered queries by default. PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => TRUE, // Because MySQL's prepared statements skip the query cache, because it's dumb. diff --git a/core/lib/Drupal/Core/Database/Driver/pgsql/Connection.php b/core/lib/Drupal/Core/Database/Driver/pgsql/Connection.php index db72f0a..30e9e01 100644 --- a/core/lib/Drupal/Core/Database/Driver/pgsql/Connection.php +++ b/core/lib/Drupal/Core/Database/Driver/pgsql/Connection.php @@ -86,11 +86,10 @@ public static function open(array &$connection_options = array()) { // Allow PDO options to be overridden. $connection_options += array( - 'pdo' => array( - PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, - ), + 'pdo' => array(), ); $connection_options['pdo'] += array( + PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, // Prepared statements are most effective for performance when queries // are recycled (used several times). However, if they are not re-used, // prepared statements become ineffecient. Since most of Drupal's diff --git a/core/lib/Drupal/Core/Database/Driver/sqlite/Connection.php b/core/lib/Drupal/Core/Database/Driver/sqlite/Connection.php index 0647c85..7d05b1f 100644 --- a/core/lib/Drupal/Core/Database/Driver/sqlite/Connection.php +++ b/core/lib/Drupal/Core/Database/Driver/sqlite/Connection.php @@ -110,11 +110,10 @@ public function __construct(PDO $connection, array $connection_options) { public static function open(array &$connection_options = array()) { // Allow PDO options to be overridden. $connection_options += array( - 'pdo' => array( - PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, - ), + 'pdo' => array(), ); $connection_options['pdo'] += array( + PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, // Convert numeric values to strings when fetching. PDO::ATTR_STRINGIFY_FETCHES => TRUE, ); diff --git a/core/modules/system/lib/Drupal/system/Tests/Database/ConnectionUnitTest.php b/core/modules/system/lib/Drupal/system/Tests/Database/ConnectionUnitTest.php index ba940ca..4bcc54f 100644 --- a/core/modules/system/lib/Drupal/system/Tests/Database/ConnectionUnitTest.php +++ b/core/modules/system/lib/Drupal/system/Tests/Database/ConnectionUnitTest.php @@ -259,4 +259,31 @@ public function testConnectionSerialization() { } + /** + * Tests pdo options override. + */ + public function testConnectionOpen() { + $connection = Database::getConnection('default'); + $reflection = new \ReflectionObject($connection); + $connection_property = $reflection->getProperty('connection'); + $connection_property->setAccessible(TRUE); + $error_mode = $connection_property->getValue($connection) + ->getAttribute(\PDO::ATTR_ERRMODE); + $this->assertEqual($error_mode, \PDO::ERRMODE_EXCEPTION, 'Ensure the default error mode is set to exception.'); + + $connection = Database::getConnectionInfo('default'); + $connection['default']['pdo'][\PDO::ATTR_ERRMODE] = \PDO::ERRMODE_SILENT; + Database::addConnectionInfo('test', 'default', $connection['default']); + $connection = Database::getConnection('default', 'test'); + + $reflection = new \ReflectionObject($connection); + $connection_property = $reflection->getProperty('connection'); + $connection_property->setAccessible(TRUE); + $error_mode = $connection_property->getValue($connection) + ->getAttribute(\PDO::ATTR_ERRMODE); + $this->assertEqual($error_mode, \PDO::ERRMODE_SILENT, 'Ensure PDO connection options can be overridden.'); + + Database::removeConnection('test'); + } + }