[limb-svn] r6525 - misc/migration
svn at limb-project.com
svn at limb-project.com
Sat Nov 17 18:38:05 MSK 2007
Author: pachanga
Date: 2007-11-17 18:38:05 +0300 (Sat, 17 Nov 2007)
New Revision: 6525
URL: http://fisheye.limb-project.com/changelog/limb/?cs=6525
Modified:
misc/migration/mysql.inc.php
misc/migration/mysql_create_migration.php
misc/migration/mysql_diff.php
misc/migration/mysql_dump.php
misc/migration/mysql_load.php
misc/migration/mysql_migrate.php
misc/migration/mysql_sync_tests.php
Log:
-- making mysql migrations more generic
Modified: misc/migration/mysql.inc.php
===================================================================
--- misc/migration/mysql.inc.php 2007-11-17 11:23:10 UTC (rev 6524)
+++ misc/migration/mysql.inc.php 2007-11-17 15:38:05 UTC (rev 6525)
@@ -174,30 +174,32 @@
echo "done\n";
}
-function get_migration_files_since($base_version)
+function get_migration_files_since($since, $migrations_dir = null)
{
$files = array();
- $migrations_dir = dirname(__FILE__) . '/../init/migrate/';
+ if(!$migrations_dir)
+ $migrations_dir = dirname(__FILE__) . '/../sql/migrate/';
foreach(glob($migrations_dir . '*') as $file)
{
list($version, ) = explode('_', basename($file));
$version = intval($version);
- if($version > $base_version)
+ if($version > $since)
$files[$version] = $file;
}
ksort($files);
return $files;
}
-function get_last_migration_file()
+function get_last_migration_file($migrations_dir = null)
{
- $migrations_dir = dirname(__FILE__) . '/../init/migrate/';
+ if(!$migrations_dir)
+ $migrations_dir = dirname(__FILE__) . '/../sql/migrate/';
$files = glob($migrations_dir . '*');
krsort($files);
return reset($files);
}
-function mysql_migrate($host, $user, $password, $database, $since = null)
+function mysql_migrate($host, $user, $password, $database, $since = null, $migrations_dir = null)
{
if(!mysql_db_exists($host, $user, $password, $database))
return;
@@ -211,7 +213,7 @@
if(is_null($since))
$since = (int)mysql_exec($host, $user, $password, $database, 'SELECT version FROM schema_info');
- foreach(get_migration_files_since($since) as $version => $file)
+ foreach(get_migration_files_since($since, $migrations_dir) as $version => $file)
{
mysql_load($host, $user, $password, $database, $file);
mysql_exec($host, $user, $password, $database, "UPDATE schema_info SET version=$version;");
@@ -226,20 +228,22 @@
return (int)mysql_exec($host, $user, $password, $database, 'SELECT version FROM schema_info');
}
-function mysql_test_migration($host, $user, $password)
+function mysql_test_migration($host, $user, $password, $sql_schema = null, $sql_data = null, $migrations_dir = null)
{
echo "Testing migration...\n";
$tmp_db = mysql_create_tmp_db($host, $user, $password);
- $sql_schema = dirname(__FILE__) . '/../init/schema.mysql';
- $sql_data = dirname(__FILE__) . '/../init/data.mysql';
+ if(!$sql_schema)
+ $sql_schema = dirname(__FILE__) . '/../sql/schema.mysql';
+ if(!$sql_data)
+ $sql_data = dirname(__FILE__) . '/../sql/data.mysql';
mysql_load($host, $user, $password, $tmp_db, $sql_schema);
mysql_load($host, $user, $password, $tmp_db, $sql_data);
try
{
- mysql_migrate($host, $user, $password, $tmp_db);
+ mysql_migrate($host, $user, $password, $tmp_db, null, $migrations_dir);
}
catch(Exception $e)
{
Modified: misc/migration/mysql_create_migration.php
===================================================================
--- misc/migration/mysql_create_migration.php 2007-11-17 11:23:10 UTC (rev 6524)
+++ misc/migration/mysql_create_migration.php 2007-11-17 15:38:05 UTC (rev 6525)
@@ -1,9 +1,18 @@
<?php
-require_once(dirname(__FILE__) . '/../setup.php');
require_once(dirname(__FILE__) . '/mysql.inc.php');
-$since = isset($argv[1]) ? $argv[1] : 0;
+$host = 'localhost';
+$user = 'user';
+$password = 'secret';
+$database = 'mydb';
+$charset = 'utf8';
+$sql_dir = dirname(__FILE__) . '/../sql/';
+$schema = "$sql_dir/schema.mysql";
+$data = "$sql_dir/data.mysql";
+$curr_dir = dirname(__FILE__);
+$diff_cmd = "php $curr_dir/mysql_diff.php";
+
if(!isset($argv[1]))
{
echo "Specify migration name\n";
@@ -11,19 +20,9 @@
}
$name = $argv[1];
-$dir = dirname(__FILE__);
-
-$dsn = lmbToolkit :: instance()->getDefaultDbDSN();
-
-$host = $dsn->getHost();
-$user = $dsn->getUser();
-$password = $dsn->getPassword();
-$database = $dsn->getDatabase();
-$diff_cmd = "php $dir/mysql_diff.php";
-
if($diff = `$diff_cmd`)
{
- $last = get_last_migration_file();
+ $last = get_last_migration_file("$sql_dir/migrate/");
if(file_get_contents($last) == $diff)
{
echo "The last migration file '$last' is identical to the new migration, skipped\n";
@@ -31,13 +30,13 @@
}
$stamp = time();
- $file = "$dir/../init/migrate/{$stamp}_{$name}.sql";
+ $file = "$sql_dir/migrate/{$stamp}_{$name}.sql";
echo "Writing new migration to file '$file'...";
file_put_contents($file, $diff);
echo "done! (" . strlen($diff). " bytes)\n";
- if(!mysql_test_migration($host, $user, $password))
+ if(!mysql_test_migration($host, $user, $password, $schema, $data))
echo "\nWARNING: migration has errors, please correct them before committing! Try dry-running it with mysql_migrate.php --dry-run\n";
echo "Updating version info...";
@@ -47,4 +46,3 @@
else
echo "There haven't been any changes according to the latest dump\n";
-?>
Modified: misc/migration/mysql_diff.php
===================================================================
--- misc/migration/mysql_diff.php 2007-11-17 11:23:10 UTC (rev 6524)
+++ misc/migration/mysql_diff.php 2007-11-17 15:38:05 UTC (rev 6525)
@@ -1,23 +1,21 @@
<?php
-require_once(dirname(__FILE__) . '/../setup.php');
+$host = 'localhost';
+$user = 'user';
+$password = 'secret';
+$database = 'mydb';
+$charset = 'utf8';
+$sql_dir = dirname(__FILE__) . '/../sql/';
+$schema = "$sql_dir/schema.mysql";
+$data = "$sql_dir/data.mysql";
-$dsn = lmbToolkit :: instance()->getDefaultDbDSN();
-
-$host = $dsn->getHost();
-$user = $dsn->getUser();
-$password = $dsn->getPassword();
-$database = $dsn->getDatabase();
-$schema = dirname(__FILE__) . '/../init/schema.mysql';
-$data = dirname(__FILE__) . '/../init/data.mysql';
-
if(preg_match('~INSERT\s+INTO\s+.*schema_info\D+(\d+)~i', file_get_contents($data), $m))
$since = $m[1];
else
$since = -1;
-//collecting all not applied migrations
+//collecting all non applied migrations
$migrations = array();
-foreach(glob(dirname(__FILE__) . '/../init/migrate/*.sql') as $migration)
+foreach(glob("$sql_dir/migrate/*.sql") as $migration)
{
list($version,) = explode('_', basename($migration));
if($since < intval($version))
@@ -984,4 +982,3 @@
$builder->setMySqlVariable("FOREIGN_KEY_CHECKS", 1)."\n";
}
}
-?>
Modified: misc/migration/mysql_dump.php
===================================================================
--- misc/migration/mysql_dump.php 2007-11-17 11:23:10 UTC (rev 6524)
+++ misc/migration/mysql_dump.php 2007-11-17 15:38:05 UTC (rev 6525)
@@ -1,18 +1,15 @@
<?php
-require_once(dirname(__FILE__) . '/../setup.php');
require_once(dirname(__FILE__) . '/mysql.inc.php');
-$dsn = lmbToolkit :: instance()->getDefaultDbDSN();
+$host = 'localhost';
+$user = 'user';
+$password = 'secret';
+$database = 'mydb';
+$charset = 'utf8';
+$sql_dir = dirname(__FILE__) . '/../sql/';
+$schema = "$sql_dir/schema.mysql";
+$data = "$sql_dir/data.mysql";
-$host = $dsn->getHost();
-$user = $dsn->getUser();
-$password = $dsn->getPassword();
-$database = $dsn->getDatabase();
-$charset = $dsn->getCharset();
+mysql_dump_schema($host, $user, $password, $database, $charset, $schema);
+mysql_dump_data($host, $user, $password, $database, $charset, $data);
-$sql_schema = dirname(__FILE__) . '/../init/schema.mysql';
-$sql_data = dirname(__FILE__) . '/../init/data.mysql';
-mysql_dump_schema($host, $user, $password, $database, $charset, $sql_schema);
-mysql_dump_data($host, $user, $password, $database, $charset, $sql_data);
-
-?>
Modified: misc/migration/mysql_load.php
===================================================================
--- misc/migration/mysql_load.php 2007-11-17 11:23:10 UTC (rev 6524)
+++ misc/migration/mysql_load.php 2007-11-17 15:38:05 UTC (rev 6525)
@@ -1,20 +1,16 @@
<?php
-require_once(dirname(__FILE__) . '/../setup.php');
require_once(dirname(__FILE__) . '/mysql.inc.php');
-$dsn = lmbToolkit :: instance()->getDefaultDbDSN();
+$host = 'localhost';
+$user = 'user';
+$password = 'secret';
+$database = 'mydb';
+$charset = 'utf8';
+$sql_dir = dirname(__FILE__) . '/../sql/';
+$schema = "$sql_dir/schema.mysql";
+$data = "$sql_dir/data.mysql";
-$host = $dsn->getHost();
-$user = $dsn->getUser();
-$password = $dsn->getPassword();
-$database = $dsn->getDatabase();
-$charset = $dsn->getCharset();
-
-$sql_schema = dirname(__FILE__) . '/../init/schema.mysql';
-$sql_data = dirname(__FILE__) . '/../init/data.mysql';
-
mysql_db_cleanup($host, $user, $password, $database);
-mysql_dump_load($host, $user, $password, $database, $charset, $sql_schema);
-mysql_dump_load($host, $user, $password, $database, $charset, $sql_data);
+mysql_dump_load($host, $user, $password, $database, $charset, $schema);
+mysql_dump_load($host, $user, $password, $database, $charset, $data);
-?>
Modified: misc/migration/mysql_migrate.php
===================================================================
--- misc/migration/mysql_migrate.php 2007-11-17 11:23:10 UTC (rev 6524)
+++ misc/migration/mysql_migrate.php 2007-11-17 15:38:05 UTC (rev 6525)
@@ -1,13 +1,15 @@
<?php
-require_once(dirname(__FILE__) . '/../setup.php');
require_once(dirname(__FILE__) . '/mysql.inc.php');
-$dsn = lmbToolkit :: instance()->getDefaultDbDSN();
+$host = 'localhost';
+$user = 'user';
+$password = 'secret';
+$database = 'mydb';
+$charset = 'utf8';
+$sql_dir = dirname(__FILE__) . '/../sql/';
+$schema = "$sql_dir/schema.mysql";
+$data = "$sql_dir/data.mysql";
-$host = $dsn->getHost();
-$user = $dsn->getUser();
-$password = $dsn->getPassword();
-$database = $dsn->getDatabase();
$since = null;//do we need this stuff?
$dry_run = false;
@@ -20,14 +22,12 @@
if($dry_run)
{
echo "===== Migrating production DB(dry-run) =====\n";
- $sql_schema = dirname(__FILE__) . '/../init/schema.mysql';
- $sql_data = dirname(__FILE__) . '/../init/data.mysql';
$tmp_db = mysql_create_tmp_db($host, $user, $password);
- mysql_load($host, $user, $password, $tmp_db, $sql_schema);
- mysql_load($host, $user, $password, $tmp_db, $sql_data);
+ mysql_load($host, $user, $password, $tmp_db, $schema);
+ mysql_load($host, $user, $password, $tmp_db, $data);
try
{
- mysql_migrate($host, $user, $password, $tmp_db, $since);
+ mysql_migrate($host, $user, $password, $tmp_db, $since, "$sql_dir/migrate/");
}
catch(Exception $e)
{
@@ -42,7 +42,6 @@
else
{
echo "===== Migrating production DB =====\n";
- mysql_migrate($host, $user, $password, $database, $since);
+ mysql_migrate($host, $user, $password, $database, $since, "$sql_dir/migrate/");
}
-?>
Modified: misc/migration/mysql_sync_tests.php
===================================================================
--- misc/migration/mysql_sync_tests.php 2007-11-17 11:23:10 UTC (rev 6524)
+++ misc/migration/mysql_sync_tests.php 2007-11-17 15:38:05 UTC (rev 6525)
@@ -1,17 +1,14 @@
<?php
-require_once(dirname(__FILE__) . '/../setup.php');
require_once(dirname(__FILE__) . '/mysql.inc.php');
-$dsn = lmbToolkit :: instance()->getDefaultDbDSN();
+$host = 'localhost';
+$user = 'user';
+$password = 'secret';
+$database = 'mydb';
+$tests_database = $database . '_tests';
-$host = $dsn->getHost();
-$user = $dsn->getUser();
-$password = $dsn->getPassword();
-$database = $dsn->getDatabase();
+mysql_db_cleanup($host, $user, $password, $tests_database);
-mysql_db_cleanup($host, $user, $password, $database . "_tests");
-
mysql_copy_schema($host, $user, $password, $database,
- $host, $user, $password, $database . "_tests");
+ $host, $user, $password, $tests_database);
-?>
More information about the limb-svn
mailing list