mirror of
https://github.com/phpbb/phpbb.git
synced 2025-06-27 21:58:52 +00:00
[ticket/11880] Move get_schema_steps function to a migrator helper class
PHPBB3-11880
This commit is contained in:
parent
2c878ead31
commit
38eb6b0e13
7 changed files with 27 additions and 72 deletions
|
@ -10,6 +10,10 @@ services:
|
||||||
- %core.php_ext%
|
- %core.php_ext%
|
||||||
- %core.table_prefix%
|
- %core.table_prefix%
|
||||||
- @migrator.tool_collection
|
- @migrator.tool_collection
|
||||||
|
- @migrator.helper
|
||||||
|
|
||||||
|
migrator.helper:
|
||||||
|
class: phpbb\db\migration\helper
|
||||||
|
|
||||||
migrator.tool_collection:
|
migrator.tool_collection:
|
||||||
class: phpbb\di\service_collection
|
class: phpbb\di\service_collection
|
||||||
|
|
|
@ -25,6 +25,9 @@ class migrator
|
||||||
/** @var \phpbb\db\tools */
|
/** @var \phpbb\db\tools */
|
||||||
protected $db_tools;
|
protected $db_tools;
|
||||||
|
|
||||||
|
/** @var \phpbb\db\migration\helper */
|
||||||
|
protected $helper;
|
||||||
|
|
||||||
/** @var string */
|
/** @var string */
|
||||||
protected $table_prefix;
|
protected $table_prefix;
|
||||||
|
|
||||||
|
@ -65,11 +68,12 @@ class migrator
|
||||||
/**
|
/**
|
||||||
* Constructor of the database migrator
|
* Constructor of the database migrator
|
||||||
*/
|
*/
|
||||||
public function __construct(\phpbb\config\config $config, \phpbb\db\driver\driver $db, \phpbb\db\tools $db_tools, $migrations_table, $phpbb_root_path, $php_ext, $table_prefix, $tools)
|
public function __construct(\phpbb\config\config $config, \phpbb\db\driver\driver $db, \phpbb\db\tools $db_tools, $migrations_table, $phpbb_root_path, $php_ext, $table_prefix, $tools, \phpbb\db\migration\helper $helper)
|
||||||
{
|
{
|
||||||
$this->config = $config;
|
$this->config = $config;
|
||||||
$this->db = $db;
|
$this->db = $db;
|
||||||
$this->db_tools = $db_tools;
|
$this->db_tools = $db_tools;
|
||||||
|
$this->helper = $helper;
|
||||||
|
|
||||||
$this->migrations_table = $migrations_table;
|
$this->migrations_table = $migrations_table;
|
||||||
|
|
||||||
|
@ -232,7 +236,7 @@ class migrator
|
||||||
if (!$state['migration_schema_done'])
|
if (!$state['migration_schema_done'])
|
||||||
{
|
{
|
||||||
$this->last_run_migration['task'] = 'process_schema_step';
|
$this->last_run_migration['task'] = 'process_schema_step';
|
||||||
$steps = self::get_schema_steps($migration->update_schema());
|
$steps = $this->helper->get_schema_steps($migration->update_schema());
|
||||||
$result = $this->process_data_step($steps, $state['migration_data_state']);
|
$result = $this->process_data_step($steps, $state['migration_data_state']);
|
||||||
|
|
||||||
$state['migration_data_state'] = ($result === true) ? '' : $result;
|
$state['migration_data_state'] = ($result === true) ? '' : $result;
|
||||||
|
@ -336,7 +340,7 @@ class migrator
|
||||||
}
|
}
|
||||||
else if ($state['migration_schema_done'])
|
else if ($state['migration_schema_done'])
|
||||||
{
|
{
|
||||||
$steps = self::get_schema_steps($migration->revert_schema());
|
$steps = $this->helper->get_schema_steps($migration->revert_schema());
|
||||||
$result = $this->process_data_step($steps, $state['migration_data_state']);
|
$result = $this->process_data_step($steps, $state['migration_data_state']);
|
||||||
|
|
||||||
$state['migration_data_state'] = ($result === true) ? '' : $result;
|
$state['migration_data_state'] = ($result === true) ? '' : $result;
|
||||||
|
@ -750,68 +754,4 @@ class migrator
|
||||||
|
|
||||||
return $this->migrations;
|
return $this->migrations;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 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
|
|
||||||
*/
|
|
||||||
static 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(
|
|
||||||
$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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -50,7 +50,8 @@ class phpbb_dbal_migrator_test extends phpbb_database_test_case
|
||||||
dirname(__FILE__) . '/../../phpBB/',
|
dirname(__FILE__) . '/../../phpBB/',
|
||||||
'php',
|
'php',
|
||||||
'phpbb_',
|
'phpbb_',
|
||||||
$tools
|
$tools,
|
||||||
|
new \phpbb\db\migration\helper()
|
||||||
);
|
);
|
||||||
|
|
||||||
$container = new phpbb_mock_container_builder();
|
$container = new phpbb_mock_container_builder();
|
||||||
|
|
|
@ -106,7 +106,8 @@ class phpbb_extension_manager_test extends phpbb_database_test_case
|
||||||
$phpbb_root_path,
|
$phpbb_root_path,
|
||||||
$php_ext,
|
$php_ext,
|
||||||
$table_prefix,
|
$table_prefix,
|
||||||
array()
|
array(),
|
||||||
|
new \phpbb\db\migration\helper()
|
||||||
);
|
);
|
||||||
$container = new phpbb_mock_container_builder();
|
$container = new phpbb_mock_container_builder();
|
||||||
$container->set('migrator', $migrator);
|
$container->set('migrator', $migrator);
|
||||||
|
|
|
@ -62,7 +62,8 @@ class phpbb_extension_metadata_manager_test extends phpbb_database_test_case
|
||||||
$this->phpbb_root_path,
|
$this->phpbb_root_path,
|
||||||
'php',
|
'php',
|
||||||
$this->table_prefix,
|
$this->table_prefix,
|
||||||
array()
|
array(),
|
||||||
|
new \phpbb\db\migration\helper()
|
||||||
);
|
);
|
||||||
$container = new phpbb_mock_container_builder();
|
$container = new phpbb_mock_container_builder();
|
||||||
$container->set('migrator', $migrator);
|
$container->set('migrator', $migrator);
|
||||||
|
|
|
@ -9,6 +9,13 @@
|
||||||
|
|
||||||
class get_schema_steps_test extends phpbb_test_case
|
class get_schema_steps_test extends phpbb_test_case
|
||||||
{
|
{
|
||||||
|
public function setUp()
|
||||||
|
{
|
||||||
|
parent::setUp();
|
||||||
|
|
||||||
|
$this->helper = new \phpbb\db\migration\helper();
|
||||||
|
}
|
||||||
|
|
||||||
public function schema_provider()
|
public function schema_provider()
|
||||||
{
|
{
|
||||||
return array(
|
return array(
|
||||||
|
@ -158,6 +165,6 @@ class get_schema_steps_test extends phpbb_test_case
|
||||||
*/
|
*/
|
||||||
public function test_get_schema_steps($schema_changes, $expected)
|
public function test_get_schema_steps($schema_changes, $expected)
|
||||||
{
|
{
|
||||||
$this->assertEquals($expected, \phpbb\db\migrator::get_schema_steps($schema_changes));
|
$this->assertEquals($expected, $this->helper->get_schema_steps($schema_changes));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -194,7 +194,8 @@ class phpbb_functional_test_case extends phpbb_test_case
|
||||||
$phpbb_root_path,
|
$phpbb_root_path,
|
||||||
$php_ext,
|
$php_ext,
|
||||||
self::$config['table_prefix'],
|
self::$config['table_prefix'],
|
||||||
array()
|
array(),
|
||||||
|
new \phpbb\db\migration\helper()
|
||||||
);
|
);
|
||||||
$container = new phpbb_mock_container_builder();
|
$container = new phpbb_mock_container_builder();
|
||||||
$container->set('migrator', $migrator);
|
$container->set('migrator', $migrator);
|
||||||
|
|
Loading…
Add table
Reference in a new issue