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