From 4fd45adfc5717d3215aa961c83257fa19da7e570 Mon Sep 17 00:00:00 2001 From: Igor Wiedler Date: Fri, 30 Apr 2010 23:23:11 +0200 Subject: [PATCH 1/3] [ticket/9592] Test suite does not run on SQlite PHPBB3-9592 --- .../phpbb_database_test_case.php | 58 +++++++++++++++---- 1 file changed, 47 insertions(+), 11 deletions(-) diff --git a/tests/test_framework/phpbb_database_test_case.php b/tests/test_framework/phpbb_database_test_case.php index d558874c6f..a38f6719b3 100644 --- a/tests/test_framework/phpbb_database_test_case.php +++ b/tests/test_framework/phpbb_database_test_case.php @@ -65,7 +65,7 @@ abstract class phpbb_database_test_case extends PHPUnit_Extensions_Database_Test 'sqlite' => array( 'SCHEMA' => 'sqlite', '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); $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)]); } + 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; } @@ -108,21 +123,42 @@ abstract class phpbb_database_test_case extends PHPUnit_Extensions_Database_Test 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 { - $pdo = new PDO($dbms_data['PDO'] . ':host=' . $database_config['dbhost'] . ';', $database_config['dbuser'], $database_config['dbpasswd']); - - try + if ($database_config['dbms'] == 'sqlite') { - $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') { @@ -141,7 +177,7 @@ abstract class phpbb_database_test_case extends PHPUnit_Extensions_Database_Test 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) { From 566ddf8a4b743a6d2d308c8fed912c354372d916 Mon Sep 17 00:00:00 2001 From: Igor Wiedler Date: Sun, 12 Sep 2010 00:51:27 +0200 Subject: [PATCH 2/3] [ticket/9592] Remove test cases for empty IN() They failed under SQLite because SQLite accepts empty IN() syntax. PHPBB3-9592 --- tests/dbal/dbal.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tests/dbal/dbal.php b/tests/dbal/dbal.php index 1cce891ca9..663323ad61 100644 --- a/tests/dbal/dbal.php +++ b/tests/dbal/dbal.php @@ -244,8 +244,9 @@ class phpbb_dbal_test extends phpbb_database_test_case array('username_clean' => 'bertie'))), // These here would throw errors and therefor $result should be false. - array('user_id', array(), false, false, false, true), - array('user_id', array(), true, false, false, true), + // Removing for now because SQLite accepts empty IN() syntax + /*array('user_id', array(), false, false, false, true), + array('user_id', array(), true, false, false, true),*/ ); } From a4742f795e8e20abeec915059f018dbe001383d7 Mon Sep 17 00:00:00 2001 From: Igor Wiedler Date: Wed, 15 Sep 2010 08:28:46 +0200 Subject: [PATCH 3/3] [ticket/9592] Slight adjustments to simplify db test cases PHPBB3-9592 --- .../phpbb_database_test_case.php | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/tests/test_framework/phpbb_database_test_case.php b/tests/test_framework/phpbb_database_test_case.php index a38f6719b3..f6bf420ebc 100644 --- a/tests/test_framework/phpbb_database_test_case.php +++ b/tests/test_framework/phpbb_database_test_case.php @@ -19,7 +19,7 @@ abstract class phpbb_database_test_case extends PHPUnit_Extensions_Database_Test } } - function get_dbms_data($dbms) + public function get_dbms_data($dbms) { $available_dbms = array( 'firebird' => array( @@ -79,10 +79,13 @@ abstract class phpbb_database_test_case extends PHPUnit_Extensions_Database_Test } } - function split_sql_file($sql, $delimiter, $dbms) + // NOTE: This function is not the same as split_sql_file from functions_install + public function split_sql_file($sql, $dbms) { + $dbms_data = $this->get_dbms_data($dbms); + $sql = str_replace("\r" , '', $sql); - $data = preg_split('/' . preg_quote($delimiter, '/') . '$/m', $sql); + $data = preg_split('/' . preg_quote($dbms_data['DELIM'], '/') . '$/m', $sql); $data = array_map('trim', $data); @@ -99,13 +102,7 @@ abstract class phpbb_database_test_case extends PHPUnit_Extensions_Database_Test // 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); + $data[$i] = preg_replace('/^#.*$/m', "\n", $query); } } @@ -177,7 +174,7 @@ abstract class phpbb_database_test_case extends PHPUnit_Extensions_Database_Test unset($row, $sth); } - $sql_query = $this->split_sql_file(file_get_contents("../phpBB/install/schemas/{$dbms_data['SCHEMA']}_schema.sql"), $dbms_data['DELIM'], $database_config['dbms']); + $sql_query = $this->split_sql_file(file_get_contents("../phpBB/install/schemas/{$dbms_data['SCHEMA']}_schema.sql"), $database_config['dbms']); foreach ($sql_query as $sql) {