[ticket/9592] Test suite does not run on SQlite

PHPBB3-9592
This commit is contained in:
Igor Wiedler 2010-04-30 23:23:11 +02:00
parent 2e891c5eba
commit 4fd45adfc5

View file

@ -65,7 +65,7 @@ abstract class phpbb_database_test_case extends PHPUnit_Extensions_Database_Test
'sqlite' => array( 'sqlite' => array(
'SCHEMA' => 'sqlite', 'SCHEMA' => 'sqlite',
'DELIM' => ';', 'DELIM' => ';',
'PDO' => 'sqlite', 'PDO' => 'sqlite2',
), ),
); );
@ -79,7 +79,7 @@ abstract class phpbb_database_test_case extends PHPUnit_Extensions_Database_Test
} }
} }
function split_sql_file($sql, $delimiter) function split_sql_file($sql, $delimiter, $dbms)
{ {
$sql = str_replace("\r" , '', $sql); $sql = str_replace("\r" , '', $sql);
$data = preg_split('/' . preg_quote($delimiter, '/') . '$/m', $sql); $data = preg_split('/' . preg_quote($delimiter, '/') . '$/m', $sql);
@ -94,6 +94,21 @@ abstract class phpbb_database_test_case extends PHPUnit_Extensions_Database_Test
unset($data[key($data)]); unset($data[key($data)]);
} }
if ($dbms == 'sqlite')
{
// trim # off query to satisfy sqlite
foreach ($data as $i => $query)
{
$lines = explode("\n", $query);
foreach ($lines as $j => $line)
if (strpos($line, '#') === 0)
{
unset($lines[$j]);
}
$data[$i] = implode("\n", $lines);
}
}
return $data; return $data;
} }
@ -108,21 +123,42 @@ abstract class phpbb_database_test_case extends PHPUnit_Extensions_Database_Test
if ($already_connected) if ($already_connected)
{ {
$pdo = new PDO($dbms_data['PDO'] . ':host=' . $database_config['dbhost'] . ';dbname=' . $database_config['dbname'], $database_config['dbuser'], $database_config['dbpasswd']); 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']);
}
} }
else else
{ {
$pdo = new PDO($dbms_data['PDO'] . ':host=' . $database_config['dbhost'] . ';', $database_config['dbuser'], $database_config['dbpasswd']); if ($database_config['dbms'] == 'sqlite')
try
{ {
$pdo->exec('DROP DATABASE ' . $database_config['dbname']); // delete existing database
if (file_exists($database_config['dbhost']))
{
unlink($database_config['dbhost']);
}
$pdo = new PDO($dbms_data['PDO'] . ':' . $database_config['dbhost']);
} }
catch (PDOException $e){} // ignore non existent db 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->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']); $pdo = new PDO($dbms_data['PDO'] . ':host=' . $database_config['dbhost'] . ';dbname=' . $database_config['dbname'], $database_config['dbuser'], $database_config['dbpasswd']);
}
// good for debug
// $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
if ($database_config['dbms'] == 'mysql') if ($database_config['dbms'] == 'mysql')
{ {
@ -141,7 +177,7 @@ abstract class phpbb_database_test_case extends PHPUnit_Extensions_Database_Test
unset($row, $sth); unset($row, $sth);
} }
$sql_query = $this->split_sql_file(file_get_contents("../phpBB/install/schemas/{$dbms_data['SCHEMA']}_schema.sql"), $dbms_data['DELIM']); $sql_query = $this->split_sql_file(file_get_contents("../phpBB/install/schemas/{$dbms_data['SCHEMA']}_schema.sql"), $dbms_data['DELIM'], $database_config['dbms']);
foreach ($sql_query as $sql) foreach ($sql_query as $sql)
{ {