[ticket/11278] Fix not running queries from db tools in database update

The db_tools class is running in return mode, which means that the queries
are not run, but just returned. Therefor the broken tables were not
removed from the database.

PHPBB3-11278
This commit is contained in:
Joas Schilling 2012-12-19 13:35:48 +01:00
parent a288c4b66b
commit f0c780a453

View file

@ -1017,7 +1017,7 @@ function database_update_info()
*****************************************************************************/
function change_database_data(&$no_updates, $version)
{
global $db, $errored, $error_ary, $config, $phpbb_root_path, $phpEx;
global $db, $db_tools, $errored, $error_ary, $config, $phpbb_root_path, $phpEx;
switch ($version)
{
@ -1332,8 +1332,6 @@ function change_database_data(&$no_updates, $version)
),
);
global $db_tools;
$statements = $db_tools->perform_schema_changes($changes);
foreach ($statements as $sql)
@ -1975,24 +1973,25 @@ function change_database_data(&$no_updates, $version)
}
$db->sql_freeresult($result);
global $db_tools, $table_prefix;
global $table_prefix;
// Recover from potentially broken Q&A CAPTCHA table on firebird
// Q&A CAPTCHA was uninstallable, so it's safe to remove these
// without data loss
if ($db_tools->sql_layer == 'firebird')
{
$tables = array(
$changes = array(
'drop_tables' => array(
$table_prefix . 'captcha_questions',
$table_prefix . 'captcha_answers',
$table_prefix . 'qa_confirm',
),
);
foreach ($tables as $table)
$statements = $db_tools->perform_schema_changes($changes);
foreach ($statements as $sql)
{
if ($db_tools->sql_table_exists($table))
{
$db_tools->sql_table_drop($table);
}
_sql($sql, $errored, $error_ary);
}
}