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
 }