Author: cbegin
Date: Wed Jun 10 04:11:57 2009
New Revision: 783199
URL: http://svn.apache.org/viewvc?rev=783199&view=rev
Log:
Added pending comand for executing pending changes out of order.
Added:
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/migration/commands/PendingCommand.java
Modified:
ibatis/trunk/java/ibatis-3/build.xml
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/migration/CommandLine.java
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/BootstrapCommand.java
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/migration/commands/DownCommand.java
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/migration/commands/InitializeCommand.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/StatusCommand.java
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/migration/commands/UpCommand.java
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/migration/commands/VersionCommand.java
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/jdbc/ScriptRunnerTest.java
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/migration/MigratorTest.java
ibatis/trunk/java/ibatis-3/version.properties
Modified: ibatis/trunk/java/ibatis-3/build.xml
URL:
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/build.xml?rev=783199&r1=783198&r2=783199&view=diff
==============================================================================
--- ibatis/trunk/java/ibatis-3/build.xml (original)
+++ ibatis/trunk/java/ibatis-3/build.xml Wed Jun 10 04:11:57 2009
@@ -29,6 +29,7 @@
<antcall target="_external_run">
<param name="target" value="all"/>
</antcall>
+ <antcall target="build.migrations"/>
</target>
<target name="clean">
Modified:
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/migration/CommandLine.java
URL:
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/migration/CommandLine.java?rev=783199&r1=783198&r2=783199&view=diff
==============================================================================
---
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/migration/CommandLine.java
(original)
+++
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/migration/CommandLine.java
Wed Jun 10 04:11:57 2009
@@ -20,11 +20,12 @@
private static final String NEW = "new";
private static final String UP = "up";
private static final String DOWN = "down";
+ private static final String PENDING = "pending";
private static final String VERSION = "version";
private static final String STATUS = "status";
private static final Set<String> KNOWN_COMMANDS =
Collections.unmodifiableSet(
- new HashSet<String>(Arrays.asList(INIT, NEW, UP, VERSION, DOWN, STATUS,
BOOTSTRAP)));
+ new HashSet<String>(Arrays.asList(INIT, NEW, UP, VERSION, DOWN, PENDING,
STATUS, BOOTSTRAP)));
private File repository;
private String environment;
@@ -77,6 +78,8 @@
new UpCommand(repository, environment, force).execute(params);
} else if (VERSION.equals(command)) {
new VersionCommand(repository, environment, force).execute(params);
+ } else if (PENDING.equals(command)) {
+ new PendingCommand(repository, environment, force).execute(params);
} else if (DOWN.equals(command)) {
new DownCommand(repository, environment, force).execute(params);
} else {
@@ -149,6 +152,7 @@
out.println(" up Run all unapplied migrations.");
out.println(" down Undoes the last migration applied to the
database.");
out.println(" version <version> Migrates the database up or down to the
specified version.");
+ out.println(" pending Force executes pending migrations out of
order (not recommended).");
out.println(" status Prints the changelog from the database
if the changelog table exists.");
out.println();
out.flush();
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=783199&r1=783198&r2=783199&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
Wed Jun 10 04:11:57 2009
@@ -246,6 +246,22 @@
}
}
+ protected void insertChangelog(Change change) {
+ SqlRunner runner = getSqlRunner();
+ change.setAppliedTimestamp(getAppliedTimestampAsString());
+ try {
+ runner.insert("insert into " + changelogTable() + " (ID, APPLIED_AT,
DESCRIPTION) values (?,?,?)", change.getId(), change.getAppliedTimestamp(),
change.getDescription());
+ } catch (SQLException e) {
+ throw new MigrationException("Error querying last applied migration.
Cause: " + e, e);
+ } finally {
+ runner.closeConnection();
+ }
+ }
+
+ protected String getAppliedTimestampAsString() {
+ return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new
java.sql.Date(System.currentTimeMillis()));
+ }
+
private File subdirectory(File base, String sub) {
return new File(base.getAbsoluteFile() + File.separator + sub);
}
Modified:
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/migration/commands/BootstrapCommand.java
URL:
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/migration/commands/BootstrapCommand.java?rev=783199&r1=783198&r2=783199&view=diff
==============================================================================
---
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/migration/commands/BootstrapCommand.java
(original)
+++
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/migration/commands/BootstrapCommand.java
Wed Jun 10 04:11:57 2009
@@ -25,6 +25,7 @@
} finally {
runner.closeConnection();
}
+ out.println();
} else {
out.println("Error, could not run bootstrap.sql. The file does not
exist.");
}
Modified:
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/migration/commands/DownCommand.java
URL:
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/migration/commands/DownCommand.java?rev=783199&r1=783198&r2=783199&view=diff
==============================================================================
---
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/migration/commands/DownCommand.java
(original)
+++
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/migration/commands/DownCommand.java
Wed Jun 10 04:11:57 2009
@@ -32,6 +32,7 @@
} else {
out.println("Changelog doesn't exist. No further migrations will
be undone (normal for the last migration).");
}
+ out.println();
break;
}
}
Modified:
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/migration/commands/InitializeCommand.java
URL:
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/migration/commands/InitializeCommand.java?rev=783199&r1=783198&r2=783199&view=diff
==============================================================================
---
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/migration/commands/InitializeCommand.java
(original)
+++
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/migration/commands/InitializeCommand.java
Wed Jun 10 04:11:57 2009
@@ -32,6 +32,7 @@
}
});
out.println("Done!");
+ out.println();
}
protected void ensureDirectoryIsEmpty(File path) {
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=783199&r1=783198&r2=783199&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
Wed Jun 10 04:11:57 2009
@@ -22,6 +22,7 @@
String filename = getNextIDAsString() + "_" + description.replace(' ',
'_') + ".sql";
copyResourceTo("org/apache/ibatis/migration/template_migration.sql",
scriptFile(filename), variables);
out.println("Done!");
+ out.println();
}
}
Added:
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/migration/commands/PendingCommand.java
URL:
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/migration/commands/PendingCommand.java?rev=783199&view=auto
==============================================================================
---
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/migration/commands/PendingCommand.java
(added)
+++
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/migration/commands/PendingCommand.java
Wed Jun 10 04:11:57 2009
@@ -0,0 +1,52 @@
+package org.apache.ibatis.migration.commands;
+
+import org.apache.ibatis.migration.*;
+import org.apache.ibatis.jdbc.*;
+
+import java.io.*;
+import java.util.*;
+
+public class PendingCommand extends BaseCommand {
+
+ public PendingCommand(File repository, String environment, boolean force) {
+ super(repository, environment, force);
+ }
+
+ public void execute(String... params) {
+ try {
+ if (!changelogExists()) {
+ throw new MigrationException("Change log doesn't exist, no
migrations applied. Try running 'up' instead.");
+ }
+ List<Change> pending = getPendingChanges();
+ out.println("WARNING: Running pending migrations out of order can
create unexpected results.");
+ for (Change change : pending) {
+ out.println(horizontalLine("Applying: " + change.getFilename(), 80));
+ ScriptRunner runner = getScriptRunner();
+ try {
+ runner.runScript(new MigrationReader(new
FileReader(scriptFile(change.getFilename())), false, environmentProperties()));
+ } finally {
+ runner.closeConnection();
+ }
+ insertChangelog(change);
+ out.println();
+ }
+ } catch (Exception e) {
+ throw new MigrationException("Error executing command. Cause: " + e,
e);
+ }
+ }
+
+ private List<Change> getPendingChanges() {
+ List<Change> pending = new ArrayList<Change>();
+ List<Change> migrations = getMigrations();
+ List<Change> changelog = getChangelog();
+ for (Change change : migrations) {
+ int index = changelog.indexOf(change);
+ if (index < 0) {
+ pending.add(change);
+ }
+ }
+ Collections.sort(pending);
+ return pending;
+ }
+
+}
Modified:
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/migration/commands/StatusCommand.java
URL:
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/migration/commands/StatusCommand.java?rev=783199&r1=783198&r2=783199&view=diff
==============================================================================
---
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/migration/commands/StatusCommand.java
(original)
+++
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/migration/commands/StatusCommand.java
Wed Jun 10 04:11:57 2009
@@ -33,6 +33,7 @@
for (Change change : merged) {
out.println(change);
}
+ out.println();
}
Modified:
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/migration/commands/UpCommand.java
URL:
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/migration/commands/UpCommand.java?rev=783199&r1=783198&r2=783199&view=diff
==============================================================================
---
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/migration/commands/UpCommand.java
(original)
+++
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/migration/commands/UpCommand.java
Wed Jun 10 04:11:57 2009
@@ -38,6 +38,7 @@
runner.closeConnection();
}
insertChangelog(change);
+ out.println();
if (runOneStepOnly) {
break;
}
@@ -48,20 +49,4 @@
}
}
- protected void insertChangelog(Change change) {
- SqlRunner runner = getSqlRunner();
- change.setAppliedTimestamp(getAppliedTimestampAsString());
- try {
- runner.insert("insert into " + changelogTable() + " (ID, APPLIED_AT,
DESCRIPTION) values (?,?,?)", change.getId(), change.getAppliedTimestamp(),
change.getDescription());
- } catch (SQLException e) {
- throw new MigrationException("Error querying last applied migration.
Cause: " + e, e);
- } finally {
- runner.closeConnection();
- }
- }
-
- protected String getAppliedTimestampAsString() {
- return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new
java.sql.Date(System.currentTimeMillis()));
- }
-
}
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=783199&r1=783198&r2=783199&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
Wed Jun 10 04:11:57 2009
@@ -37,6 +37,7 @@
} else {
out.println("Already at version: " + version);
}
+ out.println();
}
private void ensureParamsPassed(String... params) {
Modified:
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/jdbc/ScriptRunnerTest.java
URL:
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/jdbc/ScriptRunnerTest.java?rev=783199&r1=783198&r2=783199&view=diff
==============================================================================
---
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/jdbc/ScriptRunnerTest.java
(original)
+++
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/jdbc/ScriptRunnerTest.java
Wed Jun 10 04:11:57 2009
@@ -63,7 +63,6 @@
} catch (Exception e) {
assertTrue(e.getMessage().contains("end-of-line terminator"));
}
- assertProductsTableNotExists();
}
private void runJPetStoreScripts(ScriptRunner runner) throws IOException,
SQLException {
@@ -83,19 +82,4 @@
}
}
- private void assertProductsTableNotExists() throws IOException, SQLException
{
- PooledDataSource ds = createPooledDataSource(JPETSTORE_PROPERTIES);
- try {
- Connection conn = ds.getConnection();
- SqlRunner executor = new SqlRunner(conn);
- List<Map<String, Object>> products = executor.selectAll("SELECT * FROM
PRODUCT");
- assertEquals(16, products.size());
- } catch (Exception e) {
- return; // ignore, exception expected
- } finally {
- ds.forceCloseAll();
- }
- fail("Expected products table to NOT exist.");
- }
-
}
Modified:
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/migration/MigratorTest.java
URL:
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/migration/MigratorTest.java?rev=783199&r1=783198&r2=783199&view=diff
==============================================================================
---
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/migration/MigratorTest.java
(original)
+++
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/migration/MigratorTest.java
Wed Jun 10 04:11:57 2009
@@ -77,6 +77,20 @@
assertFalse(buffer.toString().contains("...pending..."));
buffer.clear();
+ Migrator.main(args("--path=" + f.getAbsolutePath(), "down"));
+ buffer.clear();
+
+ Migrator.main(args("--path=" + f.getAbsolutePath(), "status"));
+ assertTrue(buffer.toString().contains("...pending..."));
+ buffer.clear();
+
+ Migrator.main(args("--path=" + f.getAbsolutePath(), "pending"));
+ buffer.clear();
+
+ Migrator.main(args("--path=" + f.getAbsolutePath(), "status"));
+ assertFalse(buffer.toString().contains("...pending..."));
+ buffer.clear();
+
Migrator.main(args("--path=" + f.getAbsolutePath(), "--help"));
assertTrue(buffer.toString().contains("--help"));
buffer.clear();
Modified: ibatis/trunk/java/ibatis-3/version.properties
URL:
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/version.properties?rev=783199&r1=783198&r2=783199&view=diff
==============================================================================
--- ibatis/trunk/java/ibatis-3/version.properties (original)
+++ ibatis/trunk/java/ibatis-3/version.properties Wed Jun 10 04:11:57 2009
@@ -1,5 +1,5 @@
#Build version info
-#Thu Jun 04 22:14:44 MDT 2009
+#Tue Jun 09 21:40:35 MDT 2009
version=3.0.0
-buildDate=2009/06/04 22\:14
-buildNum=168
+buildDate=2009/06/09 21\:40
+buildNum=169