mirror of
https://github.com/phpbb/phpbb.git
synced 2025-06-06 14:35:56 +02:00
Merge pull request #4871 from javiexin/ticket/15274
[ticket/15274] Allow "custom" migrations to use parameters * github.com:phpbb/phpbb: [ticket/15274] Allow "custom" migrations to use parameters [ticket/15274] Allow "custom" migrations to use parameters
This commit is contained in:
commit
6cdf94197f
@ -781,7 +781,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;
|
||||||
|
@ -23,11 +23,11 @@ class phpbb_dbal_migration_if extends \phpbb\db\migration\migration
|
|||||||
return array(
|
return array(
|
||||||
array('if', array(
|
array('if', array(
|
||||||
true,
|
true,
|
||||||
array('custom', array(array(&$this, 'test_true'))),
|
array('custom', array(array($this, 'test_true'))),
|
||||||
)),
|
)),
|
||||||
array('if', array(
|
array('if', array(
|
||||||
false,
|
false,
|
||||||
array('custom', array(array(&$this, 'test_false'))),
|
array('custom', array(array($this, 'test_false'))),
|
||||||
)),
|
)),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
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};
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -21,7 +21,7 @@ class phpbb_dbal_migration_recall extends \phpbb\db\migration\migration
|
|||||||
function update_data()
|
function update_data()
|
||||||
{
|
{
|
||||||
return array(
|
return array(
|
||||||
array('custom', array(array(&$this, 'test_call'))),
|
array('custom', array(array($this, 'test_call'))),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
@ -15,6 +15,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';
|
||||||
@ -185,6 +187,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…
x
Reference in New Issue
Block a user