aboutsummaryrefslogtreecommitdiffstats
path: root/tests/test_framework/phpbb_database_test_case.php
diff options
context:
space:
mode:
authorNils Adermann <naderman@naderman.de>2010-10-22 20:34:52 +0200
committerNils Adermann <naderman@naderman.de>2010-10-25 19:40:11 +0200
commit832035f744f8fc42f1ac491d6847dca06b9c837b (patch)
tree21c87073e05c02e32495cec3766ef1b16028f460 /tests/test_framework/phpbb_database_test_case.php
parenta397f81a2bc03019910c088376cf563d05dadf93 (diff)
downloadforums-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.php135
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;
}