mirror of
https://github.com/phpbb/phpbb.git
synced 2025-04-30 04:38:21 +02:00
[feature/migrations] Function effectively_installed() in migrations
Allows you to check if the migration is effectively installed (entirely optionall) This function is intended to help moving to migrations from a previous database updater, where some migrations may have been installed already even though they are not yet listed in the migrations table. PHPBB3-9737
This commit is contained in:
parent
93f9ebbb25
commit
26c16559c3
phpBB/includes/db
tests/dbal
@ -83,6 +83,21 @@ abstract class phpbb_db_migration
|
||||
return array();
|
||||
}
|
||||
|
||||
/**
|
||||
* Allows you to check if the migration is effectively installed (entirely optionall)
|
||||
*
|
||||
* This is checked when a migration is installed. If true is returned, the migration will be set as
|
||||
* installed without performing the database changes.
|
||||
* This function is intended to help moving to migrations from a previous database updater, where some
|
||||
* migrations may have been installed already even though they are not yet listed in the migrations table.
|
||||
*
|
||||
* @return bool True if this migration is installed, False if this migration is not installed (checked on install)
|
||||
*/
|
||||
public function effectively_installed()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates the database schema by providing a set of change instructions
|
||||
*
|
||||
|
@ -271,10 +271,24 @@ class phpbb_db_migrator
|
||||
'class' => $migration,
|
||||
);
|
||||
|
||||
if (!isset($this->migration_state[$name]))
|
||||
if ($migration->effectively_installed())
|
||||
{
|
||||
$state['migration_start_time'] = time();
|
||||
$this->insert_migration($name, $state);
|
||||
$state = array(
|
||||
'migration_depends_on' => $migration->depends_on(),
|
||||
'migration_schema_done' => true,
|
||||
'migration_data_done' => true,
|
||||
'migration_data_state' => '',
|
||||
'migration_start_time' => 0,
|
||||
'migration_end_time' => 0,
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!isset($this->migration_state[$name]))
|
||||
{
|
||||
$state['migration_start_time'] = time();
|
||||
$this->insert_migration($name, $state);
|
||||
}
|
||||
}
|
||||
|
||||
if (!$state['migration_schema_done'])
|
||||
|
30
tests/dbal/migration/installed.php
Normal file
30
tests/dbal/migration/installed.php
Normal file
@ -0,0 +1,30 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* @package testing
|
||||
* @copyright (c) 2011 phpBB Group
|
||||
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
|
||||
*
|
||||
*/
|
||||
|
||||
class phpbb_dbal_migration_installed extends phpbb_db_migration
|
||||
{
|
||||
function effectively_installed()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
function update_data()
|
||||
{
|
||||
return array(
|
||||
array('custom', array(array(&$this, 'test'))),
|
||||
);
|
||||
}
|
||||
|
||||
function test()
|
||||
{
|
||||
global $migrator_test_installed_failed;
|
||||
|
||||
$migrator_test_installed_failed = true;
|
||||
}
|
||||
}
|
@ -19,6 +19,7 @@ require_once dirname(__FILE__) . '/migration/recall.php';
|
||||
require_once dirname(__FILE__) . '/migration/revert.php';
|
||||
require_once dirname(__FILE__) . '/migration/revert_with_dependency.php';
|
||||
require_once dirname(__FILE__) . '/migration/fail.php';
|
||||
require_once dirname(__FILE__) . '/migration/installed.php';
|
||||
|
||||
class phpbb_dbal_migrator_test extends phpbb_database_test_case
|
||||
{
|
||||
@ -233,4 +234,24 @@ class phpbb_dbal_migrator_test extends phpbb_database_test_case
|
||||
$this->fail('Revert did not remove test_column.');
|
||||
}
|
||||
}
|
||||
|
||||
public function test_installed()
|
||||
{
|
||||
$this->migrator->set_migrations(array('phpbb_dbal_migration_installed'));
|
||||
|
||||
global $migrator_test_installed_failed;
|
||||
$migrator_test_installed_failed = false;
|
||||
|
||||
while (!$this->migrator->finished())
|
||||
{
|
||||
$this->migrator->update();
|
||||
}
|
||||
|
||||
$this->assertTrue($this->migrator->migration_state('phpbb_dbal_migration_installed') !== false);
|
||||
|
||||
if ($migrator_test_installed_failed)
|
||||
{
|
||||
$this->fail('Installed test failed');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user