diff options
| author | Nils Adermann <naderman@naderman.de> | 2014-02-05 17:52:17 +0100 |
|---|---|---|
| committer | Nils Adermann <naderman@naderman.de> | 2014-02-05 17:52:17 +0100 |
| commit | 32bc5d72e424881109e0c86b716e8bd77e41bffc (patch) | |
| tree | f5714414117e6024106f56e751c19a3637d6a8fe /phpBB/phpbb/db/migration | |
| parent | 0b6b7fc486055c728a21227a406a3b9a1ac32d38 (diff) | |
| parent | be28445b66c8c74f92a50b086fd6b472ecaa963b (diff) | |
| download | forums-32bc5d72e424881109e0c86b716e8bd77e41bffc.tar forums-32bc5d72e424881109e0c86b716e8bd77e41bffc.tar.gz forums-32bc5d72e424881109e0c86b716e8bd77e41bffc.tar.bz2 forums-32bc5d72e424881109e0c86b716e8bd77e41bffc.tar.xz forums-32bc5d72e424881109e0c86b716e8bd77e41bffc.zip | |
Merge pull request #1995 from EXreaction/ticket/11880
Schema changes can take too long and cause a timeout
Diffstat (limited to 'phpBB/phpbb/db/migration')
| -rw-r--r-- | phpBB/phpbb/db/migration/helper.php | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/phpBB/phpbb/db/migration/helper.php b/phpBB/phpbb/db/migration/helper.php new file mode 100644 index 0000000000..28a6a56511 --- /dev/null +++ b/phpBB/phpbb/db/migration/helper.php @@ -0,0 +1,82 @@ +<?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( + $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; + } +} |
