1
0
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:
Nathan Guse 2013-01-13 12:39:08 -06:00
parent 93f9ebbb25
commit 26c16559c3
4 changed files with 83 additions and 3 deletions
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'])

@ -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');
}
}
}