Example #1
0
function main($args)
{
    //input sanity check
    if (!is_array($args) || is_array($args) && !array_key_exists('name', $args)) {
        print_help(true);
    }
    $migration_name = $args['name'];
    //clear any filesystem stats cache
    clearstatcache();
    //check to make sure our migration directory exists
    if (!is_dir(RUCKUSING_MIGRATION_DIR)) {
        die_with_error("ERROR: migration directory '" . RUCKUSING_MIGRATION_DIR . "' does not exist. Specify MIGRATION_DIR in config/config.inc.php and try again.");
    }
    //generate a complete complete
    $highest_version = Ruckusing_VersionUtil::get_highest_migration(RUCKUSING_MIGRATION_DIR);
    $next_version = Ruckusing_VersionUtil::to_migration_number($highest_version + 1);
    $klass = Ruckusing_NamingUtil::camelcase($migration_name);
    $file_name = $next_version . '_' . $klass . '.php';
    $full_path = realpath(RUCKUSING_MIGRATION_DIR) . '/' . $file_name;
    $template_str = get_template($klass);
    //check to make sure our destination directory is writable
    if (!is_writable(RUCKUSING_MIGRATION_DIR . '/')) {
        die_with_error("ERROR: migration directory '" . RUCKUSING_MIGRATION_DIR . "' is not writable by the current user. Check permissions and try again.");
    }
    //write it out!
    $file_result = file_put_contents($full_path, $template_str);
    if ($file_result === FALSE) {
        die_with_error("Error writing to migrations directory/file. Do you have sufficient privileges?");
    } else {
        echo "\nCreated migration: {$file_name}\n\n";
    }
}
 public function test_index_name()
 {
     $column = "first_name";
     $this->assertEquals("idx_users_first_name", Ruckusing_NamingUtil::index_name("users", $column));
     $column = "age";
     $this->assertEquals("idx_users_age", Ruckusing_NamingUtil::index_name("users", $column));
     $column = array('listing_id', 'review_id');
     $this->assertEquals("idx_users_listing_id_and_review_id", Ruckusing_NamingUtil::index_name("users", $column));
 }
 private function load_all_tasks($task_dir)
 {
     if (!is_dir($task_dir)) {
         throw new Exception(sprintf("Task dir: %s does not exist", $task_dir));
         return false;
     }
     $files = scandir($task_dir);
     $regex = '/^class\\.(\\w+)\\.php$/';
     foreach ($files as $f) {
         //skip over invalid files
         if ($f == '.' || $f == ".." || !preg_match($regex, $f, $matches)) {
             continue;
         }
         require_once $task_dir . '/' . $f;
         $task_name = Ruckusing_NamingUtil::task_from_class_name($matches[1]);
         $klass = Ruckusing_NamingUtil::class_from_file_name($f);
         $this->register_task($task_name, new $klass($this->get_adapter()));
     }
 }
 public function has_index($table_name, $column_name, $options = array())
 {
     if (empty($table_name)) {
         throw new Ruckusing_ArgumentException("Missing table name parameter");
     }
     if (empty($column_name)) {
         throw new Ruckusing_ArgumentException("Missing column name parameter");
     }
     //did the user specify an index name?
     if (is_array($options) && array_key_exists('name', $options)) {
         $index_name = $options['name'];
     } else {
         $index_name = Ruckusing_NamingUtil::index_name($table_name, $column_name);
     }
     $indexes = $this->indexes($table_name);
     foreach ($indexes as $idx) {
         if ($idx['name'] == $index_name) {
             return true;
         }
     }
     return false;
 }
 private function run_migrations($migrations, $target_method, $destination)
 {
     $last_version = -1;
     foreach ($migrations as $file) {
         $full_path = RUCKUSING_MIGRATION_DIR . '/' . $file['file'];
         if (is_file($full_path) && is_readable($full_path)) {
             require_once $full_path;
             $klass = Ruckusing_NamingUtil::class_from_migration_file($file['file']);
             $obj = new $klass();
             $refl = new ReflectionObject($obj);
             if ($refl->hasMethod($target_method)) {
                 $obj->set_adapter($this->adapter);
                 $start = $this->start_timer();
                 try {
                     //start transaction
                     $this->adapter->start_transaction();
                     $result = $obj->{$target_method}();
                     //successfully ran migration, update our version and commit
                     $this->migrator_util->resolve_current_version($file['version'], $target_method);
                     $this->adapter->commit_transaction();
                 } catch (Exception $e) {
                     $this->adapter->rollback_transaction();
                     //wrap the caught exception in our own
                     $ex = new Exception(sprintf("%s - %s", $file['class'], $e->getMessage()));
                     throw $ex;
                 }
                 $end = $this->end_timer();
                 $diff = $this->diff_timer($start, $end);
                 printf("========= %s ======== (%.2f)\n", $file['class'], $diff);
                 $last_version = $file['version'];
                 $exec = true;
             } else {
                 trigger_error("ERROR: {$klass} does not have a '{$target_method}' method defined!");
             }
         }
         //is_file
     }
     //foreach
     //update the schema info
     $result = array('last_version' => $last_version);
     return $result;
 }
require RUCKUSING_BASE . '/lib/classes/util/class.Ruckusing_Logger.php';
require RUCKUSING_BASE . '/lib/classes/util/class.Ruckusing_NamingUtil.php';
require RUCKUSING_BASE . '/lib/classes/util/class.Ruckusing_MigratorUtil.php';
require RUCKUSING_BASE . '/lib/classes/class.Ruckusing_FrameworkRunner.php';
$args = parse_args($argv);
$framework = new Ruckusing_FrameworkRunner($ruckusing_db_config, null);
//input sanity check
if (!is_array($args) || is_array($args) && !array_key_exists('name', $args)) {
    print_help(true);
}
$migration_name = $args['name'];
//clear any filesystem stats cache
clearstatcache();
//generate a complete migration file
$next_version = Ruckusing_MigratorUtil::generate_timestamp();
$klass = Ruckusing_NamingUtil::camelcase($migration_name);
$file_name = $next_version . '_' . $klass . '.php';
$migrations_dir = $framework->migrations_directory();
$template_str = get_template($klass);
if (!is_dir($migrations_dir)) {
    printf("\n\tMigrations directory (%s doesn't exist, attempting to create.", $migrations_dir);
    if (mkdir($migrations_dir) === FALSE) {
        printf("\n\tUnable to create migrations directory at %s, check permissions?", $migrations_dir);
    } else {
        printf("\n\tCreated OK");
    }
}
//check to make sure our destination directory is writable
if (!is_writable($migrations_dir)) {
    die_with_error("ERROR: migration directory '" . $migrations_dir . "' is not writable by the current user. Check permissions and try again.");
}