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


Reply via email to