diff options
author | Nils Adermann <naderman@naderman.de> | 2010-10-22 20:34:52 +0200 |
---|---|---|
committer | Nils Adermann <naderman@naderman.de> | 2010-10-25 19:40:11 +0200 |
commit | 832035f744f8fc42f1ac491d6847dca06b9c837b (patch) | |
tree | 21c87073e05c02e32495cec3766ef1b16028f460 /tests/test_framework/phpbb_database_test_case.php | |
parent | a397f81a2bc03019910c088376cf563d05dadf93 (diff) | |
download | forums-832035f744f8fc42f1ac491d6847dca06b9c837b.tar forums-832035f744f8fc42f1ac491d6847dca06b9c837b.tar.gz forums-832035f744f8fc42f1ac491d6847dca06b9c837b.tar.bz2 forums-832035f744f8fc42f1ac491d6847dca06b9c837b.tar.xz forums-832035f744f8fc42f1ac491d6847dca06b9c837b.zip |
[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
Diffstat (limited to 'tests/test_framework/phpbb_database_test_case.php')
-rw-r--r-- | tests/test_framework/phpbb_database_test_case.php | 135 |
1 files changed, 84 insertions, 51 deletions
diff --git a/tests/test_framework/phpbb_database_test_case.php b/tests/test_framework/phpbb_database_test_case.php index 8b96298b6a..49121b8f8d 100644 --- a/tests/test_framework/phpbb_database_test_case.php +++ b/tests/test_framework/phpbb_database_test_case.php @@ -83,8 +83,6 @@ abstract class phpbb_database_test_case extends PHPUnit_Extensions_Database_Test public function get_database_config() { - static $show_error = true; - if (isset($_SERVER['PHPBB_TEST_DBMS'])) { return array( @@ -157,76 +155,111 @@ abstract class phpbb_database_test_case extends PHPUnit_Extensions_Database_Test 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 ($database_config['dbms'] == 'sqlite') - { - $pdo = new PDO($dbms_data['PDO'] . ':' . $database_config['dbhost']); - } - else - { - $pdo = new PDO($dbms_data['PDO'] . ':host=' . $database_config['dbhost'] . ';dbname=' . $database_config['dbname'], $database_config['dbuser'], $database_config['dbpasswd']); - } + if ($use_db) + { + $dsn .= ';dbname=' . $config['dbname']; + } + break; } - else + + $pdo = new PDO($dsn, $config['dbuser'], $config['dbpasswd']);; + + // good for debug + // $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); + + return $pdo; + } + + private function recreate_db($config, $dbms) + { + switch ($config['dbms']) { - if ($database_config['dbms'] == 'sqlite') - { - // delete existing database - if (file_exists($database_config['dbhost'])) + case 'sqlite': + if (file_exists($config['dbhost'])) { - unlink($database_config['dbhost']); + unlink($config['dbhost']); } + break; - $pdo = new PDO($dbms_data['PDO'] . ':' . $database_config['dbhost']); - } - else - { - $pdo = new PDO($dbms_data['PDO'] . ':host=' . $database_config['dbhost'] . ';', $database_config['dbuser'], $database_config['dbpasswd']);try + default: + $pdo = $this->new_pdo($config, $dbms, false); + + try { - $pdo->exec('DROP DATABASE ' . $database_config['dbname']); + $pdo->exec('DROP DATABASE ' . $config['dbname']); } catch (PDOException $e){} // ignore non existent db - $pdo->exec('CREATE DATABASE ' . $database_config['dbname']); + $pdo->exec('CREATE DATABASE ' . $config['dbname']); + break; + } + } - $pdo = new PDO($dbms_data['PDO'] . ':host=' . $database_config['dbhost'] . ';dbname=' . $database_config['dbname'], $database_config['dbuser'], $database_config['dbpasswd']); + private function load_schema($pdo, $config, $dbms) + { + if ($config['dbms'] == 'mysql') + { + $sth = $pdo->query('SELECT VERSION() AS version'); + $row = $sth->fetch(PDO::FETCH_ASSOC); + + if (version_compare($row['version'], '4.1.3', '>=')) + { + $dbms['SCHEMA'] .= '_41'; } + else + { + $dbms['SCHEMA'] .= '_40'; + } + } - // good for debug - // $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); + $sql = $this->split_sql_file(file_get_contents("../phpBB/install/schemas/{$dbms['SCHEMA']}_schema.sql"), $config['dbms']); - if ($database_config['dbms'] == 'mysql') - { - $sth = $pdo->query('SELECT VERSION() AS version'); - $row = $sth->fetch(PDO::FETCH_ASSOC); + foreach ($sql as $query) + { + $pdo->exec($query); + } + } - if (version_compare($row['version'], '4.1.3', '>=')) - { - $dbms_data['SCHEMA'] .= '_41'; - } - else - { - $dbms_data['SCHEMA'] .= '_40'; - } + public function getConnection() + { + static $already_connected; - unset($row, $sth); - } + $config = $this->get_database_config(); + $dbms = $this->get_dbms_data($config['dbms']); - $sql_query = $this->split_sql_file(file_get_contents("../phpBB/install/schemas/{$dbms_data['SCHEMA']}_schema.sql"), $database_config['dbms']); + if (!$already_connected) + { + $this->recreate_db($config, $dbms); + } - foreach ($sql_query as $sql) - { - $pdo->exec($sql); - } + $pdo = $this->new_pdo($config, $dbms, true); + + if (!$already_connected) + { + $this->load_schema($pdo, $config, $dbms); $already_connected = true; } |