Browse Source

Require native prepares for most drivers.

I could not enable native prepares for MySQL as it caused a number of
tests to fail. From looking at other projects this is due to MySQL's
native prepare methods having a few gotchas.
Mark Story 10 years ago
parent
commit
2044d6db29

+ 1 - 1
src/Database/Driver/Mysql.php

@@ -70,7 +70,7 @@ class Mysql extends Driver
         $config['flags'] += [
             PDO::ATTR_PERSISTENT => $config['persistent'],
             PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true,
-            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
+            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
         ];
 
         if (!empty($config['ssl_key']) && !empty($config['ssl_cert'])) {

+ 1 - 0
src/Database/Driver/Postgres.php

@@ -56,6 +56,7 @@ class Postgres extends Driver
         $config = $this->_config;
         $config['flags'] += [
             PDO::ATTR_PERSISTENT => $config['persistent'],
+            PDO::ATTR_EMULATE_PREPARES => false,
             PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
         ];
         if (empty($config['unix_socket'])) {

+ 1 - 0
src/Database/Driver/Sqlite.php

@@ -55,6 +55,7 @@ class Sqlite extends Driver
         $config = $this->_config;
         $config['flags'] += [
             PDO::ATTR_PERSISTENT => $config['persistent'],
+            PDO::ATTR_EMULATE_PREPARES => false,
             PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
         ];
 

+ 1 - 0
src/Database/Driver/Sqlserver.php

@@ -60,6 +60,7 @@ class Sqlserver extends Driver
         $config = $this->_config;
         $config['flags'] += [
             PDO::ATTR_PERSISTENT => $config['persistent'],
+            PDO::ATTR_EMULATE_PREPARES => false,
             PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
         ];
 

+ 2 - 0
tests/TestCase/Database/Driver/PostgresTest.php

@@ -53,6 +53,7 @@ class PostgresTest extends TestCase
 
         $expected['flags'] += [
             PDO::ATTR_PERSISTENT => true,
+            PDO::ATTR_EMULATE_PREPARES => false,
             PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
         ];
 
@@ -107,6 +108,7 @@ class PostgresTest extends TestCase
         $expected = $config;
         $expected['flags'] += [
             PDO::ATTR_PERSISTENT => false,
+            PDO::ATTR_EMULATE_PREPARES => false,
             PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
         ];
 

+ 2 - 0
tests/TestCase/Database/Driver/SqliteTest.php

@@ -47,6 +47,7 @@ class SqliteTest extends TestCase
 
         $expected['flags'] += [
             PDO::ATTR_PERSISTENT => false,
+            PDO::ATTR_EMULATE_PREPARES => false,
             PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
         ];
         $driver->expects($this->once())->method('_connect')
@@ -80,6 +81,7 @@ class SqliteTest extends TestCase
         $expected += ['username' => null, 'password' => null];
         $expected['flags'] += [
             PDO::ATTR_PERSISTENT => true,
+            PDO::ATTR_EMULATE_PREPARES => false,
             PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
         ];
 

+ 1 - 0
tests/TestCase/Database/Driver/SqlserverTest.php

@@ -67,6 +67,7 @@ class SqlserverTest extends TestCase
         $expected = $config;
         $expected['flags'] += [
             PDO::ATTR_PERSISTENT => false,
+            PDO::ATTR_EMULATE_PREPARES => false,
             PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
             PDO::SQLSRV_ATTR_ENCODING => 'a-language'
         ];