mirror of
https://github.com/phpbb/phpbb.git
synced 2025-06-10 13:28:55 +00:00
[ticket/15274] Allow "custom" migrations to use parameters
Add the possibility to have custom migrations with parameters, allowing the use of a single function for several uses. PHPBB3-15274
This commit is contained in:
parent
50d2e337b0
commit
563a6680eb
4 changed files with 137 additions and 1 deletions
|
@ -694,7 +694,7 @@ class migrator
|
||||||
{
|
{
|
||||||
return array(
|
return array(
|
||||||
$parameters[0],
|
$parameters[0],
|
||||||
array($last_result),
|
isset($parameters[1]) ? array_merge($parameters[1], array($last_result)) : array($last_result),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
44
tests/dbal/migration/if_params.php
Normal file
44
tests/dbal/migration/if_params.php
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
<?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.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
class phpbb_dbal_migration_if_params extends \phpbb\db\migration\migration
|
||||||
|
{
|
||||||
|
function update_schema()
|
||||||
|
{
|
||||||
|
return array();
|
||||||
|
}
|
||||||
|
|
||||||
|
function update_data()
|
||||||
|
{
|
||||||
|
return array(
|
||||||
|
array('if', array(
|
||||||
|
true,
|
||||||
|
array('custom', array(array(&$this, 'test'), array('true'))),
|
||||||
|
)),
|
||||||
|
array('if', array(
|
||||||
|
false,
|
||||||
|
array('custom', array(array(&$this, 'test'), array('false'))),
|
||||||
|
)),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function test($param)
|
||||||
|
{
|
||||||
|
global $migrator_test_if_true_failed, $migrator_test_if_false_failed;
|
||||||
|
|
||||||
|
$var = 'migrator_test_if_' . $param . '_failed';
|
||||||
|
|
||||||
|
${$var} = !${$var};
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
42
tests/dbal/migration/recall_params.php
Normal file
42
tests/dbal/migration/recall_params.php
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
<?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.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
class phpbb_dbal_migration_recall_params extends \phpbb\db\migration\migration
|
||||||
|
{
|
||||||
|
function update_schema()
|
||||||
|
{
|
||||||
|
return array();
|
||||||
|
}
|
||||||
|
|
||||||
|
function update_data()
|
||||||
|
{
|
||||||
|
return array(
|
||||||
|
array('custom', array(array(&$this, 'test_call'), array(5))),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// This function should be called 5 times
|
||||||
|
function test_call($times, $input)
|
||||||
|
{
|
||||||
|
global $migrator_test_call_input;
|
||||||
|
|
||||||
|
$migrator_test_call_input = (int) $input;
|
||||||
|
|
||||||
|
if ($migrator_test_call_input < $times)
|
||||||
|
{
|
||||||
|
return ($migrator_test_call_input + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
|
@ -16,6 +16,8 @@ require_once dirname(__FILE__) . '/migration/dummy.php';
|
||||||
require_once dirname(__FILE__) . '/migration/unfulfillable.php';
|
require_once dirname(__FILE__) . '/migration/unfulfillable.php';
|
||||||
require_once dirname(__FILE__) . '/migration/if.php';
|
require_once dirname(__FILE__) . '/migration/if.php';
|
||||||
require_once dirname(__FILE__) . '/migration/recall.php';
|
require_once dirname(__FILE__) . '/migration/recall.php';
|
||||||
|
require_once dirname(__FILE__) . '/migration/if_params.php';
|
||||||
|
require_once dirname(__FILE__) . '/migration/recall_params.php';
|
||||||
require_once dirname(__FILE__) . '/migration/revert.php';
|
require_once dirname(__FILE__) . '/migration/revert.php';
|
||||||
require_once dirname(__FILE__) . '/migration/revert_with_dependency.php';
|
require_once dirname(__FILE__) . '/migration/revert_with_dependency.php';
|
||||||
require_once dirname(__FILE__) . '/migration/fail.php';
|
require_once dirname(__FILE__) . '/migration/fail.php';
|
||||||
|
@ -188,6 +190,54 @@ class phpbb_dbal_migrator_test extends phpbb_database_test_case
|
||||||
$this->assertSame(10, $migrator_test_call_input);
|
$this->assertSame(10, $migrator_test_call_input);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function test_if_params()
|
||||||
|
{
|
||||||
|
$this->migrator->set_migrations(array('phpbb_dbal_migration_if_params'));
|
||||||
|
|
||||||
|
// Don't like this, but I'm not sure there is any other way to do this
|
||||||
|
global $migrator_test_if_true_failed, $migrator_test_if_false_failed;
|
||||||
|
$migrator_test_if_true_failed = true;
|
||||||
|
$migrator_test_if_false_failed = false;
|
||||||
|
|
||||||
|
while (!$this->migrator->finished())
|
||||||
|
{
|
||||||
|
$this->migrator->update();
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->assertFalse($migrator_test_if_true_failed, 'True test failed');
|
||||||
|
$this->assertFalse($migrator_test_if_false_failed, 'False test failed');
|
||||||
|
|
||||||
|
while ($this->migrator->migration_state('phpbb_dbal_migration_if_params') !== false)
|
||||||
|
{
|
||||||
|
$this->migrator->revert('phpbb_dbal_migration_if_params');
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->assertFalse($migrator_test_if_true_failed, 'True test after revert failed');
|
||||||
|
$this->assertFalse($migrator_test_if_false_failed, 'False test after revert failed');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function test_recall_params()
|
||||||
|
{
|
||||||
|
$this->migrator->set_migrations(array('phpbb_dbal_migration_recall_params'));
|
||||||
|
|
||||||
|
global $migrator_test_call_input;
|
||||||
|
|
||||||
|
// Run the schema first
|
||||||
|
$this->migrator->update();
|
||||||
|
|
||||||
|
$i = 0;
|
||||||
|
while (!$this->migrator->finished())
|
||||||
|
{
|
||||||
|
$this->migrator->update();
|
||||||
|
|
||||||
|
$this->assertSame($i, $migrator_test_call_input);
|
||||||
|
|
||||||
|
$i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->assertSame(5, $migrator_test_call_input);
|
||||||
|
}
|
||||||
|
|
||||||
public function test_revert()
|
public function test_revert()
|
||||||
{
|
{
|
||||||
global $migrator_test_revert_counter;
|
global $migrator_test_revert_counter;
|
||||||
|
|
Loading…
Add table
Reference in a new issue