1
0
mirror of https://github.com/phpbb/phpbb.git synced 2025-03-24 01:20:40 +01: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:
Tristan Darricau 2017-08-06 12:04:07 +02:00
commit 6cdf94197f
No known key found for this signature in database
GPG Key ID: 817043C2E29DB881
6 changed files with 140 additions and 4 deletions

View File

@ -781,7 +781,7 @@ class migrator
{
return array(
$parameters[0],
array($last_result),
isset($parameters[1]) ? array_merge($parameters[1], array($last_result)) : array($last_result),
);
}
break;

View File

@ -23,11 +23,11 @@ class phpbb_dbal_migration_if extends \phpbb\db\migration\migration
return array(
array('if', array(
true,
array('custom', array(array(&$this, 'test_true'))),
array('custom', array(array($this, 'test_true'))),
)),
array('if', array(
false,
array('custom', array(array(&$this, 'test_false'))),
array('custom', array(array($this, 'test_false'))),
)),
);
}

View 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};
}
}

View File

@ -21,7 +21,7 @@ class phpbb_dbal_migration_recall extends \phpbb\db\migration\migration
function update_data()
{
return array(
array('custom', array(array(&$this, 'test_call'))),
array('custom', array(array($this, 'test_call'))),
);
}

View 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;
}
}

View File

@ -15,6 +15,8 @@ require_once dirname(__FILE__) . '/migration/dummy.php';
require_once dirname(__FILE__) . '/migration/unfulfillable.php';
require_once dirname(__FILE__) . '/migration/if.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_with_dependency.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);
}
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()
{
global $migrator_test_revert_counter;