aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjaviexin <javiexin@gmail.com>2017-07-15 18:39:39 +0200
committerMarc Alexander <admin@m-a-styles.de>2019-05-08 22:06:34 +0200
commit5c001df3802cf906951102596f9e1d56b876d873 (patch)
tree8fe6927040829704b7af92e8c368bb2bec356768
parente36da012645a6c376b0ecb306ee6b99e5437a410 (diff)
downloadforums-5c001df3802cf906951102596f9e1d56b876d873.tar
forums-5c001df3802cf906951102596f9e1d56b876d873.tar.gz
forums-5c001df3802cf906951102596f9e1d56b876d873.tar.bz2
forums-5c001df3802cf906951102596f9e1d56b876d873.tar.xz
forums-5c001df3802cf906951102596f9e1d56b876d873.zip
[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
-rw-r--r--phpBB/phpbb/db/migrator.php2
-rw-r--r--tests/dbal/migration/if_params.php44
-rw-r--r--tests/dbal/migration/recall_params.php42
-rw-r--r--tests/dbal/migrator_test.php50
4 files changed, 137 insertions, 1 deletions
diff --git a/phpBB/phpbb/db/migrator.php b/phpBB/phpbb/db/migrator.php
index 2b0c66fc58..3a1ee758cf 100644
--- a/phpBB/phpbb/db/migrator.php
+++ b/phpBB/phpbb/db/migrator.php
@@ -784,7 +784,7 @@ class migrator
{
return array(
$parameters[0],
- array($last_result),
+ isset($parameters[1]) ? array_merge($parameters[1], array($last_result)) : array($last_result),
);
}
break;
diff --git a/tests/dbal/migration/if_params.php b/tests/dbal/migration/if_params.php
new file mode 100644
index 0000000000..78550d7168
--- /dev/null
+++ b/tests/dbal/migration/if_params.php
@@ -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};
+ }
+
+}
diff --git a/tests/dbal/migration/recall_params.php b/tests/dbal/migration/recall_params.php
new file mode 100644
index 0000000000..b7cc78d514
--- /dev/null
+++ b/tests/dbal/migration/recall_params.php
@@ -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;
+ }
+}
diff --git a/tests/dbal/migrator_test.php b/tests/dbal/migrator_test.php
index 372b2dbe1e..09283b8e24 100644
--- a/tests/dbal/migrator_test.php
+++ b/tests/dbal/migrator_test.php
@@ -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/revert_table.php';
@@ -196,6 +198,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;