1
0
mirror of https://github.com/phpbb/phpbb.git synced 2025-02-25 12:33:29 +01:00
Marc Alexander e8f8dcf0ea [ticket/12170] Assign schema keys in migration helper with data_depth 1
The migration helper currently drops any keys with schema changes that have
the data_depth 1. This change will correctly assign the keys to the steps
array without dropping the keys that might contain important info like the
actual table that should be created.

PHPBB3-12170
2014-02-07 21:13:50 +01:00

83 lines
1.7 KiB
PHP

<?php
/**
*
* @package db
* @copyright (c) 2014 phpBB Group
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
*
*/
namespace phpbb\db\migration;
/**
* The migrator is responsible for applying new migrations in the correct order.
*
* @package db
*/
class helper
{
/**
* Get the schema steps from an array of schema changes
*
* This splits up $schema_changes into individual changes so that the
* changes can be chunked
*
* @param array $schema_changes from migration
* @return array
*/
public function get_schema_steps($schema_changes)
{
$steps = array();
// Nested level of data (only supports 1/2 currently)
$nested_level = array(
'drop_tables' => 1,
'add_tables' => 1,
'change_columns' => 2,
'add_columns' => 2,
'drop_keys' => 2,
'drop_columns' => 2,
'add_primary_keys' => 2, // perform_schema_changes only uses one level, but second is in the function
'add_unique_index' => 2,
'add_index' => 2,
);
foreach ($nested_level as $change_type => $data_depth)
{
if (!empty($schema_changes[$change_type]))
{
foreach ($schema_changes[$change_type] as $key => $value)
{
if ($data_depth === 1)
{
$steps[] = array(
'dbtools.perform_schema_changes', array(array(
$change_type => array(
(!is_int($key)) ? $key : 0 => $value,
),
)),
);
}
else if ($data_depth === 2)
{
foreach ($value as $key2 => $value2)
{
$steps[] = array(
'dbtools.perform_schema_changes', array(array(
$change_type => array(
$key => array(
$key2 => $value2,
),
),
)),
);
}
}
}
}
}
return $steps;
}
}