Commit
- Loading branch information
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -39,21 +39,30 @@ class Mysql extends \Cake\Model\Datasource\Database\Driver { | |
'port' => '3306', | ||
'flags' => [], | ||
'encoding' => 'utf8', | ||
'timezone' => 'UTC', | ||
'init' => [], | ||
'dsn' => null | ||
]; | ||
|
||
/** | ||
* Establishes a connection to the databse server | ||
* Establishes a connection to the database server | ||
* | ||
* @param array $config configuration to be used for creating connection | ||
* @return boolean true on success | ||
*/ | ||
public function connect(array $config) { | ||
$config += $this->_baseConfig; | ||
|
||
if ($config['timezone'] === 'UTC') { | ||
This comment has been minimized.
Sorry, something went wrong. |
||
$config['timezone'] = '+0:00'; | ||
} | ||
|
||
$config['init'][] = "SET time_zone = '+0:00'"; | ||
This comment has been minimized.
Sorry, something went wrong.
This comment has been minimized.
Sorry, something went wrong. |
||
$config['flags'] += [ | ||
PDO::ATTR_PERSISTENT => $config['persistent'], | ||
PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true, | ||
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, | ||
PDO::MYSQL_ATTR_INIT_COMMAND => implode(';', (array)$config['init']) | ||
This comment has been minimized.
Sorry, something went wrong.
markstory
Member
|
||
]; | ||
|
||
if (empty($config['dsn'])) { | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,95 @@ | ||
<?php | ||
/** | ||
* PHP Version 5.4 | ||
* | ||
* CakePHP(tm) : Rapid Development Framework (http://cakephp.org) | ||
* Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org) | ||
* | ||
* Licensed under The MIT License | ||
* For full copyright and license information, please see the LICENSE.txt | ||
* Redistributions of files must retain the above copyright notice. | ||
* | ||
* @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org) | ||
* @link http://cakephp.org CakePHP(tm) Project | ||
* @package Cake.Model | ||
* @since CakePHP(tm) v 3.0.0 | ||
* @license MIT License (http://www.opensource.org/licenses/mit-license.php) | ||
*/ | ||
namespace Cake\Test\TestCase\Model\Datasource\Database\Driver; | ||
|
||
use Cake\Model\Datasource\Database\Driver; | ||
use \PDO; | ||
|
||
/** | ||
* Tests Mysql driver | ||
* | ||
*/ | ||
class MysqlTests extends \Cake\TestSuite\TestCase { | ||
This comment has been minimized.
Sorry, something went wrong. |
||
|
||
/** | ||
* Test connecting to Mysql with default configuration | ||
* | ||
* @return void | ||
*/ | ||
public function testConnectionConfigDefault() { | ||
$driver = $this->getMock('Cake\Model\Datasource\Database\driver\Mysql', ['_connect']); | ||
$expected = [ | ||
'persistent' => true, | ||
'host' => 'localhost', | ||
'login' => 'root', | ||
'password' => '', | ||
'database' => 'cake', | ||
'port' => '3306', | ||
'flags' => [], | ||
'encoding' => 'utf8', | ||
'timezone' => '+0:00', | ||
'init' => ["SET time_zone = '+0:00'"], | ||
'dsn' => 'mysql:host=localhost;port=3306;dbname=cake;charset=utf8' | ||
]; | ||
|
||
$expected['flags'] += [ | ||
PDO::ATTR_PERSISTENT => true, | ||
PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true, | ||
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, | ||
PDO::MYSQL_ATTR_INIT_COMMAND => "SET time_zone = '+0:00'" | ||
]; | ||
$driver->expects($this->once())->method('_connect') | ||
->with($expected); | ||
$driver->connect([]); | ||
} | ||
|
||
/** | ||
* Test connecting to Mysql with custom configuration | ||
* | ||
* @return void | ||
*/ | ||
public function testConnectionConfigCustom() { | ||
$driver = $this->getMock('Cake\Model\Datasource\Database\driver\Mysql', ['_connect']); | ||
$config = [ | ||
'persistent' => false, | ||
'host' => 'foo', | ||
'database' => 'bar', | ||
'login' => 'user', | ||
'password' => 'pass', | ||
'port' => 3440, | ||
'flags' => [1 => true, 2 => false], | ||
'encoding' => 'a-language', | ||
'timezone' => 'Antartica', | ||
'init' => ['Execute this', 'this too'] | ||
]; | ||
|
||
$expected = $config; | ||
$expected['dsn'] = 'mysql:host=foo;port=3440;dbname=bar;charset=a-language'; | ||
$expected['init'][] = "SET time_zone = '+0:00'"; | ||
$expected['flags'] += [ | ||
PDO::ATTR_PERSISTENT => false, | ||
PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true, | ||
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, | ||
PDO::MYSQL_ATTR_INIT_COMMAND => "Execute this;this too;SET time_zone = '+0:00'" | ||
]; | ||
$driver->expects($this->once())->method('_connect') | ||
->with($expected); | ||
$driver->connect($config); | ||
} | ||
|
||
} |
As your default value is a string, what do you think in convert timezone strings to numbers? PHP can do it with
DateTimeZone
.