aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNathan Guse <nathaniel.guse@gmail.com>2014-02-05 09:57:36 -0600
committerNathan Guse <nathaniel.guse@gmail.com>2014-02-05 09:57:36 -0600
commit38eb6b0e135293d51cc100937a6072b32e214c34 (patch)
tree0fe9bc23ee9d72c64647ae2debd145f7443d5767
parent2c878ead311b8b71cabb4070ce848d5b84470ce8 (diff)
downloadforums-38eb6b0e135293d51cc100937a6072b32e214c34.tar
forums-38eb6b0e135293d51cc100937a6072b32e214c34.tar.gz
forums-38eb6b0e135293d51cc100937a6072b32e214c34.tar.bz2
forums-38eb6b0e135293d51cc100937a6072b32e214c34.tar.xz
forums-38eb6b0e135293d51cc100937a6072b32e214c34.zip
[ticket/11880] Move get_schema_steps function to a migrator helper class
PHPBB3-11880
-rw-r--r--phpBB/config/migrator.yml4
-rw-r--r--phpBB/phpbb/db/migrator.php74
-rw-r--r--tests/dbal/migrator_test.php3
-rw-r--r--tests/extension/manager_test.php3
-rw-r--r--tests/extension/metadata_manager_test.php3
-rw-r--r--tests/migrator/get_schema_steps_test.php9
-rw-r--r--tests/test_framework/phpbb_functional_test_case.php3
7 files changed, 27 insertions, 72 deletions
diff --git a/phpBB/config/migrator.yml b/phpBB/config/migrator.yml
index a94609418f..202421c09f 100644
--- a/phpBB/config/migrator.yml
+++ b/phpBB/config/migrator.yml
@@ -10,6 +10,10 @@ services:
- %core.php_ext%
- %core.table_prefix%
- @migrator.tool_collection
+ - @migrator.helper
+
+ migrator.helper:
+ class: phpbb\db\migration\helper
migrator.tool_collection:
class: phpbb\di\service_collection
diff --git a/phpBB/phpbb/db/migrator.php b/phpBB/phpbb/db/migrator.php
index 7dc113204e..4fb3f1a241 100644
--- a/phpBB/phpbb/db/migrator.php
+++ b/phpBB/phpbb/db/migrator.php
@@ -25,6 +25,9 @@ class migrator
/** @var \phpbb\db\tools */
protected $db_tools;
+ /** @var \phpbb\db\migration\helper */
+ protected $helper;
+
/** @var string */
protected $table_prefix;
@@ -65,11 +68,12 @@ class 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->db = $db;
$this->db_tools = $db_tools;
+ $this->helper = $helper;
$this->migrations_table = $migrations_table;
@@ -232,7 +236,7 @@ class migrator
if (!$state['migration_schema_done'])
{
$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']);
$state['migration_data_state'] = ($result === true) ? '' : $result;
@@ -336,7 +340,7 @@ class migrator
}
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']);
$state['migration_data_state'] = ($result === true) ? '' : $result;
@@ -750,68 +754,4 @@ class migrator
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;
- }
}
diff --git a/tests/dbal/migrator_test.php b/tests/dbal/migrator_test.php
index 9a6f33523c..c075f19825 100644
--- a/tests/dbal/migrator_test.php
+++ b/tests/dbal/migrator_test.php
@@ -50,7 +50,8 @@ class phpbb_dbal_migrator_test extends phpbb_database_test_case
dirname(__FILE__) . '/../../phpBB/',
'php',
'phpbb_',
- $tools
+ $tools,
+ new \phpbb\db\migration\helper()
);
$container = new phpbb_mock_container_builder();
diff --git a/tests/extension/manager_test.php b/tests/extension/manager_test.php
index cc32a6af4e..789dc20d14 100644
--- a/tests/extension/manager_test.php
+++ b/tests/extension/manager_test.php
@@ -106,7 +106,8 @@ class phpbb_extension_manager_test extends phpbb_database_test_case
$phpbb_root_path,
$php_ext,
$table_prefix,
- array()
+ array(),
+ new \phpbb\db\migration\helper()
);
$container = new phpbb_mock_container_builder();
$container->set('migrator', $migrator);
diff --git a/tests/extension/metadata_manager_test.php b/tests/extension/metadata_manager_test.php
index 592421f9e7..a3c4cc89e9 100644
--- a/tests/extension/metadata_manager_test.php
+++ b/tests/extension/metadata_manager_test.php
@@ -62,7 +62,8 @@ class phpbb_extension_metadata_manager_test extends phpbb_database_test_case
$this->phpbb_root_path,
'php',
$this->table_prefix,
- array()
+ array(),
+ new \phpbb\db\migration\helper()
);
$container = new phpbb_mock_container_builder();
$container->set('migrator', $migrator);
diff --git a/tests/migrator/get_schema_steps_test.php b/tests/migrator/get_schema_steps_test.php
index c37d55ea40..f354d3617f 100644
--- a/tests/migrator/get_schema_steps_test.php
+++ b/tests/migrator/get_schema_steps_test.php
@@ -9,6 +9,13 @@
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()
{
return array(
@@ -158,6 +165,6 @@ class get_schema_steps_test extends phpbb_test_case
*/
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));
}
}
diff --git a/tests/test_framework/phpbb_functional_test_case.php b/tests/test_framework/phpbb_functional_test_case.php
index 71d03746a9..55f9cdb947 100644
--- a/tests/test_framework/phpbb_functional_test_case.php
+++ b/tests/test_framework/phpbb_functional_test_case.php
@@ -194,7 +194,8 @@ class phpbb_functional_test_case extends phpbb_test_case
$phpbb_root_path,
$php_ext,
self::$config['table_prefix'],
- array()
+ array(),
+ new \phpbb\db\migration\helper()
);
$container = new phpbb_mock_container_builder();
$container->set('migrator', $migrator);