diff options
Diffstat (limited to 'phpBB/phpbb/db/migration/helper.php')
| -rw-r--r-- | phpBB/phpbb/db/migration/helper.php | 84 | 
1 files changed, 84 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..e40deeb37b --- /dev/null +++ b/phpBB/phpbb/db/migration/helper.php @@ -0,0 +1,84 @@ +<?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; +	} +}  | 
