Author: cbegin
Date: Wed Jun 10 05:32:39 2009
New Revision: 783206

URL: http://svn.apache.org/viewvc?rev=783206&view=rev
Log:
Added script generation command, for generating manual scripts for production 
and QA environments

Added:
    
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/migration/commands/ScriptCommand.java
Modified:
    
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/test/java/org/apache/ibatis/migration/MigratorTest.java
    ibatis/trunk/java/ibatis-3/version.properties

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=783206&r1=783205&r2=783206&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 05:32:39 2009
@@ -21,11 +21,12 @@
   private static final String UP = "up";
   private static final String DOWN = "down";
   private static final String PENDING = "pending";
+  private static final String SCRIPT = "script";
   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, PENDING, 
STATUS, BOOTSTRAP)));
+      new HashSet<String>(Arrays.asList(INIT, NEW, UP, VERSION, DOWN, PENDING, 
STATUS, BOOTSTRAP, SCRIPT)));
 
   private File repository;
   private String environment;
@@ -82,6 +83,8 @@
       new PendingCommand(repository, environment, force).execute(params);
     } else if (DOWN.equals(command)) {
       new DownCommand(repository, environment, force).execute(params);
+    } else if (SCRIPT.equals(command)) {
+      new ScriptCommand(repository, environment, force).execute(params);
     } else {
       throw new MigrationException("Attempt to execute unkown command.");
     }
@@ -144,6 +147,7 @@
     out.println("--env=<environment>  Environment to configure. Default 
environment is 'development'.");
     out.println("--force              Forces script to continue even if SQL 
errors are encountered.");
     out.println("--help               Displays this usage message.");
+    out.println("--trace              Shows additional error details (if 
any).");
     out.println();
     out.println("Commands:");
     out.println("  init               Creates (if necessary) and initializes a 
migration path.");
@@ -154,6 +158,7 @@
     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("  script <v1> <v2>   Generates a delta migration script from 
version v1 to v2 (undo if v1 > v2).");
     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=783206&r1=783205&r2=783206&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 05:32:39 2009
@@ -248,7 +248,7 @@
 
   protected void insertChangelog(Change change) {
     SqlRunner runner = getSqlRunner();
-    change.setAppliedTimestamp(getAppliedTimestampAsString());
+    change.setAppliedTimestamp(generateAppliedTimeStampAsString());
     try {
       runner.insert("insert into " + changelogTable() + " (ID, APPLIED_AT, 
DESCRIPTION) values (?,?,?)", change.getId(), change.getAppliedTimestamp(), 
change.getDescription());
     } catch (SQLException e) {
@@ -258,7 +258,7 @@
     }
   }
 
-  protected String getAppliedTimestampAsString() {
+  protected String generateAppliedTimeStampAsString() {
     return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new 
java.sql.Date(System.currentTimeMillis()));
   }
 

Added: 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/migration/commands/ScriptCommand.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/migration/commands/ScriptCommand.java?rev=783206&view=auto
==============================================================================
--- 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/migration/commands/ScriptCommand.java
 (added)
+++ 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/migration/commands/ScriptCommand.java
 Wed Jun 10 05:32:39 2009
@@ -0,0 +1,72 @@
+package org.apache.ibatis.migration.commands;
+
+import org.apache.ibatis.migration.*;
+
+import java.io.*;
+import java.math.BigDecimal;
+import java.util.*;
+
+public class ScriptCommand extends BaseCommand {
+
+  public ScriptCommand(File repository, String environment, boolean force) {
+    super(repository, environment, force);
+  }
+
+  public void execute(String... sparams) {
+    try {
+      StringTokenizer parser = new StringTokenizer(sparams[0]);
+      if (parser.countTokens() != 2) {
+        throw new MigrationException("The script command requires a range of 
versions from v1 - v2.");
+      }
+      BigDecimal v1 = new BigDecimal(parser.nextToken());
+      BigDecimal v2 = new BigDecimal(parser.nextToken());
+      boolean undo = v1.compareTo(v2) > 0;
+      Properties variables = environmentProperties();
+      List<Change> migrations = getMigrations();
+      Collections.sort(migrations);
+      if (undo) {
+        Collections.reverse(migrations);
+      }
+      for (Change change : migrations) {
+        if (shouldRun(change, v1, v2)) {
+          out.println("--// " + change.getFilename());
+          File file = scriptFile(change.getFilename());
+          FileReader fileReader = new FileReader(file);
+          MigrationReader migrationReader = new MigrationReader(fileReader, 
undo, variables);
+          char[] cbuf = new char[1024];
+          int l;
+          while ((l = migrationReader.read(cbuf)) == cbuf.length) {
+            out.print(new String(cbuf, 0, l));
+          }
+          out.print(new String(cbuf, 0, l - 1));
+          out.println();
+          out.println();
+          
out.println(undo?generateVersionDelete(change):generateVersionInsert(change));
+          out.println();
+        }
+      }
+    } catch (IOException e) {
+      throw new MigrationException("Error generating script. Cause: " + e, e);
+    }
+
+  }
+
+  private String generateVersionInsert(Change change) {
+    return "INSERT INTO " + changelogTable() + " (ID, APPLIED_AT, DESCRIPTION) 
" +
+        "VALUES (" + change.getId() + ", '" + 
generateAppliedTimeStampAsString() + "', '" + 
change.getDescription().replace('\'', ' ') + "');";
+  }
+
+  private String generateVersionDelete(Change change) {
+    return "DELETE FROM " + changelogTable() + " WHERE ID = " + change.getId() 
+ ";";
+  }
+
+  private boolean shouldRun(Change change, BigDecimal v1, BigDecimal v2) {
+    BigDecimal id = change.getId();
+    if (v1.compareTo(v2) > 0) {
+      return (id.compareTo(v2) >= 0 && id.compareTo(v1) <= 0);
+    } else {
+      return (id.compareTo(v1) >= 0 && id.compareTo(v2) <= 0);
+    }
+  }
+
+}

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=783206&r1=783205&r2=783206&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 05:32:39 2009
@@ -94,6 +94,26 @@
     Migrator.main(args("--path=" + f.getAbsolutePath(), "--help"));
     assertTrue(buffer.toString().contains("--help"));
     buffer.clear();
+
+    Migrator.main(args("--path=" + f.getAbsolutePath(), 
"script","20080827200212","20080827200214"));
+    assertFalse(buffer.toString().contains("20080827200210"));
+    assertFalse(buffer.toString().contains("20080827200211"));
+    assertTrue(buffer.toString().contains("20080827200212"));
+    assertTrue(buffer.toString().contains("20080827200213"));
+    assertTrue(buffer.toString().contains("20080827200214"));
+    assertFalse(buffer.toString().contains("20080827200215"));
+    assertFalse(buffer.toString().contains("--//@UNDO"));
+    buffer.clear();
+
+    Migrator.main(args("--path=" + f.getAbsolutePath(), 
"script","20080827200215", "20080827200213"));
+    assertFalse(buffer.toString().contains("20080827200210"));
+    assertFalse(buffer.toString().contains("20080827200211"));
+    assertFalse(buffer.toString().contains("20080827200212"));
+    assertTrue(buffer.toString().contains("20080827200213"));
+    assertTrue(buffer.toString().contains("20080827200214"));
+    assertTrue(buffer.toString().contains("20080827200215"));
+    assertTrue(buffer.toString().contains("--//@UNDO"));
+    buffer.clear();
   }
 
 

Modified: ibatis/trunk/java/ibatis-3/version.properties
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/version.properties?rev=783206&r1=783205&r2=783206&view=diff
==============================================================================
--- ibatis/trunk/java/ibatis-3/version.properties (original)
+++ ibatis/trunk/java/ibatis-3/version.properties Wed Jun 10 05:32:39 2009
@@ -1,5 +1,5 @@
 #Build version info
-#Tue Jun 09 21:40:35 MDT 2009
+#Tue Jun 09 22:15:20 MDT 2009
 version=3.0.0
-buildDate=2009/06/09 21\:40
-buildNum=169
+buildDate=2009/06/09 22\:15
+buildNum=171


Reply via email to