aboutsummaryrefslogtreecommitdiffstats
path: root/phpBB/phpbb/db/migrator.php
diff options
context:
space:
mode:
authorAndreas Fischer <bantu@phpbb.com>2013-10-10 23:39:09 +0200
committerAndreas Fischer <bantu@phpbb.com>2013-10-10 23:39:09 +0200
commit353ac33d5cea1752047779eb8c70c7ce3a64b6c8 (patch)
tree76e08c4e16c68256700506b7111c3cbb547dc877 /phpBB/phpbb/db/migrator.php
parent0228424983e35badc779923a1f0398fc3ab7c8b2 (diff)
parentb59131f558a6d0fe4c836e2658152c8698f0cd22 (diff)
downloadforums-353ac33d5cea1752047779eb8c70c7ce3a64b6c8.tar
forums-353ac33d5cea1752047779eb8c70c7ce3a64b6c8.tar.gz
forums-353ac33d5cea1752047779eb8c70c7ce3a64b6c8.tar.bz2
forums-353ac33d5cea1752047779eb8c70c7ce3a64b6c8.tar.xz
forums-353ac33d5cea1752047779eb8c70c7ce3a64b6c8.zip
Merge remote-tracking branch 'phpbb/develop' into ticket/11621
* phpbb/develop: (542 commits) [ticket/11901] Pass empty string as relative_url for non-local magic URL. [ticket/11898] Correct adm_relative_path created by installer [ticket/11898] Correct admin S_LOGIN_ACTION [ticket/11892] Fix undefined variables: to_forum_id & to_topic_id [ticket/11890] Fix untranslated string when deleting posts through MCP. [ticket/11895] Fix undefined $forum_id [ticket/10383] Update the results without the overlay popup. [ticket/10383] Make the content transitions smoother. [ticket/10383] AJAXify poll voting [ticket/11888] Update default search backend in namespaces migration [ticket/11739] Rename “Remember Me” login keys module [ticket/11893] Remove unnecessary <fieldset> causing a large font size [ticket/11894] Fix typo in "Delete post" option [ticket/11888] Use \phpbb\search\fulltext_native as search backend config [ticket/11608] Mark failed test as incomplete for mysql search backend [ticket/11608] Update search backend class names to namespaces [ticket/11608] Move markIncomplete to search backends test [ticket/11608] Rename base search test class file [ticket/11608] Remove suffix test from base class [ticket/11608] Mark postgres search not found test as incomplete ...
Diffstat (limited to 'phpBB/phpbb/db/migrator.php')
-rw-r--r--phpBB/phpbb/db/migrator.php52
1 files changed, 33 insertions, 19 deletions
diff --git a/phpBB/phpbb/db/migrator.php b/phpBB/phpbb/db/migrator.php
index ca3ffc8043..47e1406043 100644
--- a/phpBB/phpbb/db/migrator.php
+++ b/phpBB/phpbb/db/migrator.php
@@ -7,6 +7,8 @@
*
*/
+namespace phpbb\db;
+
/**
* @ignore
*/
@@ -20,15 +22,15 @@ if (!defined('IN_PHPBB'))
*
* @package db
*/
-class phpbb_db_migrator
+class migrator
{
- /** @var phpbb_config */
+ /** @var \phpbb\config\config */
protected $config;
- /** @var phpbb_db_driver */
+ /** @var \phpbb\db\driver\driver */
protected $db;
- /** @var phpbb_db_tools */
+ /** @var \phpbb\db\tools */
protected $db_tools;
/** @var string */
@@ -71,7 +73,7 @@ class phpbb_db_migrator
/**
* Constructor of the database migrator
*/
- public function __construct(phpbb_config $config, phpbb_db_driver $db, phpbb_db_tools $db_tools, $migrations_table, $phpbb_root_path, $php_ext, $table_prefix, $tools)
+ public function __construct(\phpbb\config\config $config, \phpbb\db\driver\driver $db, \phpbb\db\tools $db_tools, $migrations_table, $phpbb_root_path, $php_ext, $table_prefix, $tools)
{
$this->config = $config;
$this->db = $db;
@@ -190,6 +192,11 @@ class phpbb_db_migrator
foreach ($state['migration_depends_on'] as $depend)
{
+ if ($this->unfulfillable($depend) !== false)
+ {
+ throw new \phpbb\db\migration\exception('MIGRATION_NOT_FULFILLABLE', $name, $depend);
+ }
+
if (!isset($this->migration_state[$depend]) ||
!$this->migration_state[$depend]['migration_schema_done'] ||
!$this->migration_state[$depend]['migration_data_done'])
@@ -202,11 +209,12 @@ class phpbb_db_migrator
'name' => $name,
'class' => $migration,
'state' => $state,
+ 'task' => '',
);
if (!isset($this->migration_state[$name]))
{
- if ($migration->effectively_installed())
+ if ($state['migration_start_time'] == 0 && $migration->effectively_installed())
{
$state = array(
'migration_depends_on' => $migration->depends_on(),
@@ -225,8 +233,11 @@ class phpbb_db_migrator
}
}
+ $this->set_migration_state($name, $state);
+
if (!$state['migration_schema_done'])
{
+ $this->last_run_migration['task'] = 'apply_schema_changes';
$this->apply_schema_changes($migration->update_schema());
$state['migration_schema_done'] = true;
}
@@ -234,13 +245,14 @@ class phpbb_db_migrator
{
try
{
+ $this->last_run_migration['task'] = 'process_data_step';
$result = $this->process_data_step($migration->update_data(), $state['migration_data_state']);
$state['migration_data_state'] = ($result === true) ? '' : $result;
$state['migration_data_done'] = ($result === true);
$state['migration_end_time'] = ($result === true) ? time() : 0;
}
- catch (phpbb_db_migration_exception $e)
+ catch (\phpbb\db\migration\exception $e)
{
// Revert the schema changes
$this->revert($name);
@@ -304,6 +316,7 @@ class phpbb_db_migrator
$this->last_run_migration = array(
'name' => $name,
'class' => $migration,
+ 'task' => '',
);
if ($state['migration_data_done'])
@@ -398,7 +411,7 @@ class phpbb_db_migrator
));
}
}
- catch (phpbb_db_migration_exception $e)
+ catch (\phpbb\db\migration\exception $e)
{
// We should try rolling back here
foreach ($steps as $reverse_step_identifier => $reverse_step)
@@ -474,12 +487,12 @@ class phpbb_db_migrator
case 'if':
if (!isset($parameters[0]))
{
- throw new phpbb_db_migration_exception('MIGRATION_INVALID_DATA_MISSING_CONDITION', $step);
+ throw new \phpbb\db\migration\exception('MIGRATION_INVALID_DATA_MISSING_CONDITION', $step);
}
if (!isset($parameters[1]))
{
- throw new phpbb_db_migration_exception('MIGRATION_INVALID_DATA_MISSING_STEP', $step);
+ throw new \phpbb\db\migration\exception('MIGRATION_INVALID_DATA_MISSING_STEP', $step);
}
$condition = $parameters[0];
@@ -496,7 +509,7 @@ class phpbb_db_migrator
case 'custom':
if (!is_callable($parameters[0]))
{
- throw new phpbb_db_migration_exception('MIGRATION_INVALID_DATA_CUSTOM_NOT_CALLABLE', $step);
+ throw new \phpbb\db\migration\exception('MIGRATION_INVALID_DATA_CUSTOM_NOT_CALLABLE', $step);
}
return array(
@@ -508,17 +521,17 @@ class phpbb_db_migrator
default:
if (!$method)
{
- throw new phpbb_db_migration_exception('MIGRATION_INVALID_DATA_UNKNOWN_TYPE', $step);
+ throw new \phpbb\db\migration\exception('MIGRATION_INVALID_DATA_UNKNOWN_TYPE', $step);
}
if (!isset($this->tools[$class]))
{
- throw new phpbb_db_migration_exception('MIGRATION_INVALID_DATA_UNDEFINED_TOOL', $step);
+ throw new \phpbb\db\migration\exception('MIGRATION_INVALID_DATA_UNDEFINED_TOOL', $step);
}
if (!method_exists(get_class($this->tools[$class]), $method))
{
- throw new phpbb_db_migration_exception('MIGRATION_INVALID_DATA_UNDEFINED_METHOD', $step);
+ throw new \phpbb\db\migration\exception('MIGRATION_INVALID_DATA_UNDEFINED_METHOD', $step);
}
// Attempt to reverse operations
@@ -622,6 +635,7 @@ class phpbb_db_migrator
{
continue;
}
+
return false;
}
@@ -656,7 +670,7 @@ class phpbb_db_migrator
* Helper to get a migration
*
* @param string $name Name of the migration
- * @return phpbb_db_migration
+ * @return \phpbb\db\migration\migration
*/
protected function get_migration($name)
{
@@ -694,7 +708,7 @@ class phpbb_db_migrator
/**
* Load migration data files from a directory
*
- * @param phpbb_extension_finder $finder
+ * @param \phpbb\extension\finder $finder
* @param string $path Path to migration data files
* @param bool $check_fulfillable If TRUE (default), we will check
* if all of the migrations are fulfillable after loading them.
@@ -703,11 +717,11 @@ class phpbb_db_migrator
* with the last call to prevent throwing errors unnecessarily).
* @return array Array of migration names
*/
- public function load_migrations(phpbb_extension_finder $finder, $path, $check_fulfillable = true)
+ public function load_migrations(\phpbb\extension\finder $finder, $path, $check_fulfillable = true)
{
if (!is_dir($path))
{
- throw new phpbb_db_migration_exception('DIRECTORY INVALID', $path);
+ throw new \phpbb\db\migration\exception('DIRECTORY INVALID', $path);
}
$migrations = array();
@@ -736,7 +750,7 @@ class phpbb_db_migrator
$unfulfillable = $this->unfulfillable($name);
if ($unfulfillable !== false)
{
- throw new phpbb_db_migration_exception('MIGRATION_NOT_FULFILLABLE', $name, $unfulfillable);
+ throw new \phpbb\db\migration\exception('MIGRATION_NOT_FULFILLABLE', $name, $unfulfillable);
}
}
}