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