Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
100.00% |
1 / 1 |
|
100.00% |
2 / 2 |
CRAP | |
100.00% |
51 / 51 |
| helper | |
100.00% |
1 / 1 |
|
100.00% |
2 / 2 |
13 | |
100.00% |
51 / 51 |
| get_schema_steps | |
100.00% |
1 / 1 |
8 | |
100.00% |
38 / 38 |
|||
| reverse_update_data | |
100.00% |
1 / 1 |
5 | |
100.00% |
13 / 13 |
|||
| <?php | |
| /** | |
| * | |
| * This file is part of the phpBB Forum Software package. | |
| * | |
| * @copyright (c) phpBB Limited <https://www.phpbb.com> | |
| * @license GNU General Public License, version 2 (GPL-2.0) | |
| * | |
| * For full copyright and license information, please see | |
| * the docs/CREDITS.txt file. | |
| * | |
| */ | |
| namespace phpbb\db\migration; | |
| /** | |
| * The migrator is responsible for applying new migrations in the correct order. | |
| */ | |
| 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; | |
| } | |
| /** | |
| * Reverse the update steps from an array of data changes | |
| * | |
| * 'If' statements and custom methods will be skipped, for all | |
| * other calls the reverse method of the tool class will be called | |
| * | |
| * @param array $steps Update changes from migration | |
| * | |
| * @return array | |
| */ | |
| public function reverse_update_data($steps) | |
| { | |
| $reversed_array = array(); | |
| foreach ($steps as $step) | |
| { | |
| $parts = explode('.', $step[0]); | |
| $parameters = $step[1]; | |
| $class = $parts[0]; | |
| $method = isset($parts[1]) ? $parts[1] : false; | |
| if ($class !== 'if' && $class !== 'custom') | |
| { | |
| array_unshift($parameters, $method); | |
| $reversed_array[] = array($class . '.reverse', $parameters); | |
| } | |
| } | |
| return array_reverse($reversed_array); | |
| } | |
| } |