public function execute($args) { echo "Started: " . date('Y-m-d g:ia T') . "\n\n"; echo "[db:status]: \n"; $util = new Ruckusing_MigratorUtil($this->get_adapter()); $migrations = $util->get_executed_migrations(); $files = $util->get_migration_files($this->get_framework()->migrations_directory(), 'up'); $applied = array(); $not_applied = array(); foreach ($files as $file) { if (in_array($file['version'], $migrations)) { $applied[] = $file['class'] . ' [ ' . $file['version'] . ' ]'; } else { $not_applied[] = $file['class'] . ' [ ' . $file['version'] . ' ]'; } } echo "\n\n===================== APPLIED ======================= \n"; foreach ($applied as $a) { echo "\t" . $a . "\n"; } echo "\n\n===================== NOT APPLIED ======================= \n"; foreach ($not_applied as $na) { echo "\t" . $na . "\n"; } echo "\n\nFinished: " . date('Y-m-d g:ia T') . "\n\n"; }
public function test_get_relevant_migration_files_down() { $down_files = Ruckusing_MigratorUtil::get_migration_files('down', RUCKUSING_MIGRATION_DIR, true); $actual_down_files = Ruckusing_MigratorUtil::get_relevant_files('down', $down_files, 3, 0); $expect_down_files = array(array('version' => 3, 'class' => 'AddIndexToBlogs', 'file' => '003_AddIndexToBlogs.php'), array('version' => 1, 'class' => 'CreateUsers', 'file' => '001_CreateUsers.php')); $this->assertEquals($expect_down_files, $actual_down_files); $actual_down_files = Ruckusing_MigratorUtil::get_relevant_files('down', $down_files, 2, 0); $expect_down_files = array(array('version' => 1, 'class' => 'CreateUsers', 'file' => '001_CreateUsers.php')); $this->assertEquals($expect_down_files, $actual_down_files); $actual_down_files = Ruckusing_MigratorUtil::get_relevant_files('down', $down_files, 3, 2); $expect_down_files = array(array('version' => 3, 'class' => 'AddIndexToBlogs', 'file' => '003_AddIndexToBlogs.php')); $this->assertEquals($expect_down_files, $actual_down_files); }
public function update_schema_for_timestamps() { //only create the table if it doesnt already exist $this->adapter->create_schema_version_table(); //insert all existing records into our new table $migrator_util = new Ruckusing_MigratorUtil($this->adapter); $files = $migrator_util->get_migration_files(RUCKUSING_MIGRATION_DIR, 'up'); foreach ($files as $file) { if ((int) $file['version'] >= PHP_INT_MAX) { //its new style like '20081010170207' so its not a candidate continue; } //query old table, if it less than or equal to our max version, then its a candidate for insertion $query_sql = sprintf("SELECT version FROM %s WHERE version >= %d", RUCKUSING_SCHEMA_TBL_NAME, $file['version']); $existing_version_old_style = $this->adapter->select_one($query_sql); if (count($existing_version_old_style) > 0) { //make sure it doesnt exist in our new table, who knows how it got inserted? $new_vers_sql = sprintf("SELECT version FROM %s WHERE version = %d", RUCKUSING_TS_SCHEMA_TBL_NAME, $file['version']); $existing_version_new_style = $this->adapter->select_one($new_vers_sql); if (empty($existing_version_new_style)) { // use printf & %d to force it to be stripped of any leading zeros, we *know* this represents an old version style // so we dont have to worry about PHP and integer overflow $insert_sql = sprintf("INSERT INTO %s (version) VALUES (%d)", RUCKUSING_TS_SCHEMA_TBL_NAME, $file['version']); $this->adapter->query($insert_sql); } } } //foreach }