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."); }