You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ibatis.apache.org by cb...@apache.org on 2008/08/23 08:49:44 UTC
svn commit: r688266 - in
/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/migration/commands:
BaseCommand.java NewCommand.java RunCommand.java UndoCommand.java
VersionCommand.java
Author: cbegin
Date: Fri Aug 22 23:49:43 2008
New Revision: 688266
URL: http://svn.apache.org/viewvc?rev=688266&view=rev
Log:
Implemented version command
Modified:
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/migration/commands/BaseCommand.java
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/migration/commands/NewCommand.java
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/migration/commands/RunCommand.java
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/migration/commands/UndoCommand.java
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/migration/commands/VersionCommand.java
Modified: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/migration/commands/BaseCommand.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/migration/commands/BaseCommand.java?rev=688266&r1=688265&r2=688266&view=diff
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/migration/commands/BaseCommand.java (original)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/migration/commands/BaseCommand.java Fri Aug 22 23:49:43 2008
@@ -34,6 +34,18 @@
this.force = force;
}
+ protected void reverse(Comparable[] comparable) {
+ Arrays.sort(comparable, new Comparator() {
+ public int compare(Object o1, Object o2) {
+ return ((Comparable) o2).compareTo(o1);
+ }
+ });
+ }
+
+ protected boolean paramsEmpty(String... params) {
+ return params == null || params.length < 1 || params[0] == null || params[0].length() < 1;
+ }
+
protected Change parseChangeFromFilename(String filename) {
try {
Change change = new Change();
@@ -67,7 +79,7 @@
}
}
- protected Change getLastChange() {
+ protected Change getLastAppliedChange() {
List<Change> changelog = getChangelog();
return changelog.get(changelog.size() - 1);
}
Modified: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/migration/commands/NewCommand.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/migration/commands/NewCommand.java?rev=688266&r1=688265&r2=688266&view=diff
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/migration/commands/NewCommand.java (original)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/migration/commands/NewCommand.java Fri Aug 22 23:49:43 2008
@@ -25,9 +25,4 @@
out.println("Done!");
}
- protected boolean paramsEmpty(String... params) {
- return params == null || params.length < 1 || params[0] == null || params[0].length() < 1;
- }
-
-
}
Modified: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/migration/commands/RunCommand.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/migration/commands/RunCommand.java?rev=688266&r1=688265&r2=688266&view=diff
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/migration/commands/RunCommand.java (original)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/migration/commands/RunCommand.java Fri Aug 22 23:49:43 2008
@@ -13,8 +13,15 @@
public class RunCommand extends BaseCommand {
+ private boolean runOneStepOnly = false;
+
public RunCommand(File repository, String environment, boolean force) {
+ super(repository,environment,force);
+ }
+
+ public RunCommand(File repository, String environment, boolean force, boolean runOneStepOnly) {
super(repository, environment, force);
+ this.runOneStepOnly = runOneStepOnly;
}
public void execute(String... params) {
@@ -23,7 +30,7 @@
Arrays.sort(filenames);
Change lastChange = null;
if (changelogExists()) {
- lastChange = getLastChange();
+ lastChange = getLastAppliedChange();
}
for (String filename : filenames) {
if (filename.endsWith(".sql")) {
@@ -33,6 +40,9 @@
ScriptRunner runner = getScriptRunner();
runner.runScript(new MigrationReader(new FileReader(scriptFile(filename)), false));
insertChangelog(change);
+ if (runOneStepOnly) {
+ break;
+ }
}
}
}
Modified: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/migration/commands/UndoCommand.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/migration/commands/UndoCommand.java?rev=688266&r1=688265&r2=688266&view=diff
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/migration/commands/UndoCommand.java (original)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/migration/commands/UndoCommand.java Fri Aug 22 23:49:43 2008
@@ -22,7 +22,7 @@
try {
String[] filenames = scriptPath.list();
reverse(filenames);
- Change lastChange = getLastChange();
+ Change lastChange = getLastAppliedChange();
for (String filename : filenames) {
if (filename.endsWith(".sql")) {
Change change = parseChangeFromFilename(filename);
Modified: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/migration/commands/VersionCommand.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/migration/commands/VersionCommand.java?rev=688266&r1=688265&r2=688266&view=diff
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/migration/commands/VersionCommand.java (original)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/migration/commands/VersionCommand.java Fri Aug 22 23:49:43 2008
@@ -1,13 +1,9 @@
package org.apache.ibatis.migration.commands;
-import org.apache.ibatis.migration.Change;
-import org.apache.ibatis.migration.ScriptRunner;
-import org.apache.ibatis.migration.MigrationReader;
+import org.apache.ibatis.migration.*;
-import java.math.BigInteger;
-import java.io.FileReader;
import java.io.File;
-import java.util.List;
+import java.math.BigDecimal;
public class VersionCommand extends BaseCommand {
@@ -16,7 +12,61 @@
}
public void execute(String... params) {
- out.println("not implemented");
+ ensureParamsPassed(params);
+ ensureNumericParam(params);
+ ensureVersionExists(params);
+
+ BigDecimal version = new BigDecimal(params[0]);
+
+ Change change = getLastAppliedChange();
+ if (version.compareTo(change.getId()) > 0) {
+ out.println("Upgrading to: " + version);
+ Command run = new RunCommand(basePath,environment,force,true);
+ while (!version.equals(change.getId())) {
+ run.execute();
+ change = getLastAppliedChange();
+ }
+ } else if (version.compareTo(change.getId()) < 0) {
+ out.println("Downgrading to: " + version);
+ Command undo = new UndoCommand(basePath,environment,force);
+ while (!version.equals(change.getId())) {
+ undo.execute();
+ change = getLastAppliedChange();
+ }
+ } else {
+ out.println("Already at version: " + version);
+ }
+ }
+
+ private void ensureParamsPassed(String... params) {
+ if (paramsEmpty(params)) {
+ throw new MigrationException("No target version specified for migration.");
+ }
+ }
+
+ private void ensureNumericParam(String... params) {
+ BigDecimal id;
+ try {
+ id = new BigDecimal(params[0]);
+ } catch (Exception e) {
+ throw new MigrationException("The version number must be a numeric integer. " + e, e);
+ }
+ }
+
+ private void ensureVersionExists(String... params) {
+ String[] filenames = scriptPath.list();
+ reverse(filenames);
+ boolean found = false;
+ String prefix = params[0] + "_";
+ for (String filename : filenames) {
+ if (filename.startsWith(prefix)) {
+ found = true;
+ break;
+ }
+ }
+ if (!found) {
+ throw new MigrationException("A migration for the specified version number does not exist.");
+ }
}
}