mirror of
https://github.com/phpbb/phpbb.git
synced 2025-05-05 15:16:16 +02:00
[task/mssql-db-tests] Refactored getConnection into multiple smaller parts.
This is a first step to simplify the extraction of database specific code parts into separate classes. PHPBB3-9868
This commit is contained in:
parent
a397f81a2b
commit
832035f744
@ -83,8 +83,6 @@ abstract class phpbb_database_test_case extends PHPUnit_Extensions_Database_Test
|
|||||||
|
|
||||||
public function get_database_config()
|
public function get_database_config()
|
||||||
{
|
{
|
||||||
static $show_error = true;
|
|
||||||
|
|
||||||
if (isset($_SERVER['PHPBB_TEST_DBMS']))
|
if (isset($_SERVER['PHPBB_TEST_DBMS']))
|
||||||
{
|
{
|
||||||
return array(
|
return array(
|
||||||
@ -157,76 +155,111 @@ abstract class phpbb_database_test_case extends PHPUnit_Extensions_Database_Test
|
|||||||
return $data;
|
return $data;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getConnection()
|
/**
|
||||||
|
* Returns a PDO connection for the configured database.
|
||||||
|
*
|
||||||
|
* @param array $config The database configuration
|
||||||
|
* @param array $dbms Information on the used DBMS.
|
||||||
|
* @param bool $use_db Whether the DSN should be tied to a
|
||||||
|
* particular database making it impossible
|
||||||
|
* to delete that database.
|
||||||
|
* @return PDO The PDO database connection.
|
||||||
|
*/
|
||||||
|
public function new_pdo($config, $dbms, $delete_db)
|
||||||
{
|
{
|
||||||
static $already_connected;
|
$dsn = $dbms['PDO'] . ':';
|
||||||
|
|
||||||
$database_config = $this->get_database_config();
|
switch ($config['dbms'])
|
||||||
|
{
|
||||||
|
case 'sqlite':
|
||||||
|
$dsn .= $config['dbhost'];
|
||||||
|
break;
|
||||||
|
|
||||||
$dbms_data = $this->get_dbms_data($database_config['dbms']);
|
default:
|
||||||
|
$dsn .= 'host=' . $config['dbhost'];
|
||||||
|
|
||||||
if ($already_connected)
|
if ($use_db)
|
||||||
{
|
{
|
||||||
if ($database_config['dbms'] == 'sqlite')
|
$dsn .= ';dbname=' . $config['dbname'];
|
||||||
{
|
|
||||||
$pdo = new PDO($dbms_data['PDO'] . ':' . $database_config['dbhost']);
|
|
||||||
}
|
}
|
||||||
else
|
break;
|
||||||
{
|
|
||||||
$pdo = new PDO($dbms_data['PDO'] . ':host=' . $database_config['dbhost'] . ';dbname=' . $database_config['dbname'], $database_config['dbuser'], $database_config['dbpasswd']);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if ($database_config['dbms'] == 'sqlite')
|
|
||||||
{
|
|
||||||
// delete existing database
|
|
||||||
if (file_exists($database_config['dbhost']))
|
|
||||||
{
|
|
||||||
unlink($database_config['dbhost']);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$pdo = new PDO($dbms_data['PDO'] . ':' . $database_config['dbhost']);
|
$pdo = new PDO($dsn, $config['dbuser'], $config['dbpasswd']);;
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$pdo = new PDO($dbms_data['PDO'] . ':host=' . $database_config['dbhost'] . ';', $database_config['dbuser'], $database_config['dbpasswd']);try
|
|
||||||
{
|
|
||||||
$pdo->exec('DROP DATABASE ' . $database_config['dbname']);
|
|
||||||
}
|
|
||||||
catch (PDOException $e){} // ignore non existent db
|
|
||||||
|
|
||||||
$pdo->exec('CREATE DATABASE ' . $database_config['dbname']);
|
|
||||||
|
|
||||||
$pdo = new PDO($dbms_data['PDO'] . ':host=' . $database_config['dbhost'] . ';dbname=' . $database_config['dbname'], $database_config['dbuser'], $database_config['dbpasswd']);
|
|
||||||
}
|
|
||||||
|
|
||||||
// good for debug
|
// good for debug
|
||||||
// $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
|
// $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
|
||||||
|
|
||||||
if ($database_config['dbms'] == 'mysql')
|
return $pdo;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function recreate_db($config, $dbms)
|
||||||
|
{
|
||||||
|
switch ($config['dbms'])
|
||||||
|
{
|
||||||
|
case 'sqlite':
|
||||||
|
if (file_exists($config['dbhost']))
|
||||||
|
{
|
||||||
|
unlink($config['dbhost']);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
$pdo = $this->new_pdo($config, $dbms, false);
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
$pdo->exec('DROP DATABASE ' . $config['dbname']);
|
||||||
|
}
|
||||||
|
catch (PDOException $e){} // ignore non existent db
|
||||||
|
|
||||||
|
$pdo->exec('CREATE DATABASE ' . $config['dbname']);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private function load_schema($pdo, $config, $dbms)
|
||||||
|
{
|
||||||
|
if ($config['dbms'] == 'mysql')
|
||||||
{
|
{
|
||||||
$sth = $pdo->query('SELECT VERSION() AS version');
|
$sth = $pdo->query('SELECT VERSION() AS version');
|
||||||
$row = $sth->fetch(PDO::FETCH_ASSOC);
|
$row = $sth->fetch(PDO::FETCH_ASSOC);
|
||||||
|
|
||||||
if (version_compare($row['version'], '4.1.3', '>='))
|
if (version_compare($row['version'], '4.1.3', '>='))
|
||||||
{
|
{
|
||||||
$dbms_data['SCHEMA'] .= '_41';
|
$dbms['SCHEMA'] .= '_41';
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
$dbms_data['SCHEMA'] .= '_40';
|
$dbms['SCHEMA'] .= '_40';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
unset($row, $sth);
|
$sql = $this->split_sql_file(file_get_contents("../phpBB/install/schemas/{$dbms['SCHEMA']}_schema.sql"), $config['dbms']);
|
||||||
}
|
|
||||||
|
|
||||||
$sql_query = $this->split_sql_file(file_get_contents("../phpBB/install/schemas/{$dbms_data['SCHEMA']}_schema.sql"), $database_config['dbms']);
|
foreach ($sql as $query)
|
||||||
|
|
||||||
foreach ($sql_query as $sql)
|
|
||||||
{
|
{
|
||||||
$pdo->exec($sql);
|
$pdo->exec($query);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getConnection()
|
||||||
|
{
|
||||||
|
static $already_connected;
|
||||||
|
|
||||||
|
$config = $this->get_database_config();
|
||||||
|
$dbms = $this->get_dbms_data($config['dbms']);
|
||||||
|
|
||||||
|
if (!$already_connected)
|
||||||
|
{
|
||||||
|
$this->recreate_db($config, $dbms);
|
||||||
|
}
|
||||||
|
|
||||||
|
$pdo = $this->new_pdo($config, $dbms, true);
|
||||||
|
|
||||||
|
if (!$already_connected)
|
||||||
|
{
|
||||||
|
$this->load_schema($pdo, $config, $dbms);
|
||||||
|
|
||||||
$already_connected = true;
|
$already_connected = true;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user