diff options
| -rw-r--r-- | phpBB/phpbb/db/migration/schema_generator.php | 20 | ||||
| -rw-r--r-- | tests/dbal/migration/dummy_order.php | 26 | ||||
| -rw-r--r-- | tests/dbal/migration/dummy_order_0.php | 22 | ||||
| -rw-r--r-- | tests/dbal/migration/dummy_order_1.php | 22 | ||||
| -rw-r--r-- | tests/dbal/migration/dummy_order_2.php | 22 | ||||
| -rw-r--r-- | tests/dbal/migration/dummy_order_3.php | 22 | ||||
| -rw-r--r-- | tests/dbal/migration/dummy_order_4.php | 22 | ||||
| -rw-r--r-- | tests/dbal/migration/dummy_order_5.php | 23 | ||||
| -rw-r--r-- | tests/migrator/schema_generator_test.php | 87 | 
9 files changed, 264 insertions, 2 deletions
| diff --git a/phpBB/phpbb/db/migration/schema_generator.php b/phpBB/phpbb/db/migration/schema_generator.php index 871fd97aca..818e27a362 100644 --- a/phpBB/phpbb/db/migration/schema_generator.php +++ b/phpBB/phpbb/db/migration/schema_generator.php @@ -109,7 +109,25 @@ class schema_generator  							{  								foreach ($add_columns as $column => $column_data)  								{ -									$this->tables[$table]['COLUMNS'][$column] = $column_data; +									if (isset($column_data['after'])) +									{ +										$columns = $this->tables[$table]['COLUMNS']; +										$offset = array_search($column_data['after'], array_keys($columns)); +										unset($column_data['after']); + +										if ($offset === false) +										{ +											$this->tables[$table]['COLUMNS'][$column] = array_values($column_data); +										} +										else +										{ +											$this->tables[$table]['COLUMNS'] = array_merge(array_slice($columns, 0, $offset + 1, true), array($column => array_values($column_data)), array_slice($columns, $offset)); +										} +									} +									else +									{ +										$this->tables[$table]['COLUMNS'][$column] = $column_data; +									}  								}  							}  						} diff --git a/tests/dbal/migration/dummy_order.php b/tests/dbal/migration/dummy_order.php new file mode 100644 index 0000000000..b8590f5074 --- /dev/null +++ b/tests/dbal/migration/dummy_order.php @@ -0,0 +1,26 @@ +<?php +/** +* +* @package testing +* @copyright (c) 2014 phpBB Group +* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 +* +*/ + +class phpbb_dbal_migration_dummy_order extends \phpbb\db\migration\migration +{ +	function update_schema() +	{ +		return array( +			'add_tables'	=> array( +				$this->table_prefix . 'column_order_test1'	=> array( +					'COLUMNS'			=> array( +						'foobar1'			=> array('BOOL', 0), +						'foobar3'			=> array('BOOL', 0), +					), +					'PRIMARY_KEY'		=> array('foobar1'), +				), +			), +		); +	} +} diff --git a/tests/dbal/migration/dummy_order_0.php b/tests/dbal/migration/dummy_order_0.php new file mode 100644 index 0000000000..e45bb0ad44 --- /dev/null +++ b/tests/dbal/migration/dummy_order_0.php @@ -0,0 +1,22 @@ +<?php +/** +* +* @package testing +* @copyright (c) 2014 phpBB Group +* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 +* +*/ + +class phpbb_dbal_migration_dummy_order_0 extends \phpbb\db\migration\migration +{ +	function update_schema() +	{ +		return array( +			'add_columns'	=> array( +				$this->table_prefix . 'column_order_test1'	=> array( +					'foobar2'	=> array('BOOL', 0, 'after' => 'foobar1'), +				), +			), +		); +	} +} diff --git a/tests/dbal/migration/dummy_order_1.php b/tests/dbal/migration/dummy_order_1.php new file mode 100644 index 0000000000..73f043af5d --- /dev/null +++ b/tests/dbal/migration/dummy_order_1.php @@ -0,0 +1,22 @@ +<?php +/** +* +* @package testing +* @copyright (c) 2014 phpBB Group +* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 +* +*/ + +class phpbb_dbal_migration_dummy_order_1 extends \phpbb\db\migration\migration +{ +	function update_schema() +	{ +		return array( +			'add_columns'	=> array( +				$this->table_prefix . 'column_order_test1'	=> array( +					'foobar4'	=> array('BOOL', 0, 'after' => 'foobar3'), +				), +			), +		); +	} +} diff --git a/tests/dbal/migration/dummy_order_2.php b/tests/dbal/migration/dummy_order_2.php new file mode 100644 index 0000000000..1483b98050 --- /dev/null +++ b/tests/dbal/migration/dummy_order_2.php @@ -0,0 +1,22 @@ +<?php +/** +* +* @package testing +* @copyright (c) 2014 phpBB Group +* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 +* +*/ + +class phpbb_dbal_migration_dummy_order_2 extends \phpbb\db\migration\migration +{ +	function update_schema() +	{ +		return array( +			'add_columns'	=> array( +				$this->table_prefix . 'column_order_test1'	=> array( +					'foobar5'	=> array('BOOL', 0, 'after' => 'non-existing'), +				), +			), +		); +	} +} diff --git a/tests/dbal/migration/dummy_order_3.php b/tests/dbal/migration/dummy_order_3.php new file mode 100644 index 0000000000..79c542e088 --- /dev/null +++ b/tests/dbal/migration/dummy_order_3.php @@ -0,0 +1,22 @@ +<?php +/** +* +* @package testing +* @copyright (c) 2014 phpBB Group +* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 +* +*/ + +class phpbb_dbal_migration_dummy_order_3 extends \phpbb\db\migration\migration +{ +	function update_schema() +	{ +		return array( +			'add_columns'	=> array( +				$this->table_prefix . 'column_order_test1'	=> array( +					'foobar6'	=> array('BOOL', 0, 'after' => ''), +				), +			), +		); +	} +} diff --git a/tests/dbal/migration/dummy_order_4.php b/tests/dbal/migration/dummy_order_4.php new file mode 100644 index 0000000000..229a120ecf --- /dev/null +++ b/tests/dbal/migration/dummy_order_4.php @@ -0,0 +1,22 @@ +<?php +/** +* +* @package testing +* @copyright (c) 2014 phpBB Group +* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 +* +*/ + +class phpbb_dbal_migration_dummy_order_4 extends \phpbb\db\migration\migration +{ +	function update_schema() +	{ +		return array( +			'add_columns'	=> array( +				$this->table_prefix . 'column_order_test1'	=> array( +					'foobar7'	=> array('BOOL', 0), +				), +			), +		); +	} +} diff --git a/tests/dbal/migration/dummy_order_5.php b/tests/dbal/migration/dummy_order_5.php new file mode 100644 index 0000000000..04d755009d --- /dev/null +++ b/tests/dbal/migration/dummy_order_5.php @@ -0,0 +1,23 @@ +<?php +/** +* +* @package testing +* @copyright (c) 2014 phpBB Group +* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 +* +*/ + +class phpbb_dbal_migration_dummy_order_5 extends \phpbb\db\migration\migration +{ +	function update_schema() +	{ +		return array( +			'add_columns'	=> array( +				$this->table_prefix . 'column_order_test1'	=> array( +					'foobar8'	=> array('BOOL', 0, 'after' => 'foobar3'), +					'foobar9'	=> array('BOOL', 0, 'after' => 'foobar3'), +				), +			), +		); +	} +} diff --git a/tests/migrator/schema_generator_test.php b/tests/migrator/schema_generator_test.php index 976265272a..9adf518a5d 100644 --- a/tests/migrator/schema_generator_test.php +++ b/tests/migrator/schema_generator_test.php @@ -11,8 +11,19 @@  *  */ -class schmema_generator_test extends phpbb_test_case +require_once __DIR__ . '/../dbal/migration/dummy_order.php'; +require_once __DIR__ . '/../dbal/migration/dummy_order_0.php'; +require_once __DIR__ . '/../dbal/migration/dummy_order_1.php'; +require_once __DIR__ . '/../dbal/migration/dummy_order_2.php'; +require_once __DIR__ . '/../dbal/migration/dummy_order_3.php'; +require_once __DIR__ . '/../dbal/migration/dummy_order_4.php'; +require_once __DIR__ . '/../dbal/migration/dummy_order_5.php'; + +class schema_generator_test extends phpbb_test_case  { +	/** @var \phpbb\db\migration\schema_generator */ +	protected $generator; +  	public function setUp()  	{  		parent::setUp(); @@ -50,4 +61,78 @@ class schmema_generator_test extends phpbb_test_case  		$this->assertArrayHasKey('phpbb_users', $this->generator->get_schema());  	} + +	public function column_add_after_data() +	{ +		return array( +			array( +				'phpbb_dbal_migration_dummy_order_0', +				array( +					'foobar1', +					'foobar2', +					'foobar3', +				), +			), +			array( +				'phpbb_dbal_migration_dummy_order_1', +				array( +					'foobar1', +					'foobar3', +					'foobar4', +				), +			), +			array( +				'phpbb_dbal_migration_dummy_order_2', +				array( +					'foobar1', +					'foobar3', +					'foobar5', +				), +			), +			array( +				'phpbb_dbal_migration_dummy_order_3', +				array( +					'foobar1', +					'foobar3', +					'foobar6', +				), +			), +			array( +				'phpbb_dbal_migration_dummy_order_4', +				array( +					'foobar1', +					'foobar3', +					'foobar7', +				), +			), +			array( +				'phpbb_dbal_migration_dummy_order_5', +				array( +					'foobar1', +					'foobar3', +					'foobar9', +					'foobar8', +				), +			), +		); +	} + +	/** +	* @dataProvider column_add_after_data +	*/ +	public function test_column_add_after($migration, $expected) +	{ +		$this->get_schema_generator(array( +			'phpbb_dbal_migration_dummy_order', +			$migration, +		)); + +		$tables = $this->generator->get_schema(); + +		$this->assertEquals( +			$expected, +			array_keys($tables[$this->table_prefix . 'column_order_test1']['COLUMNS']), +			'The schema generator could not position the column correctly, using the "after" option in the migration script.' +		); +	}  } | 
