Add support for rename table
Change-Id: I8a7a73c1fb60f1f3caefe2d930257ae3b2fc03ee
diff --git a/src/main/java/com/google/gwtorm/jdbc/JdbcSchema.java b/src/main/java/com/google/gwtorm/jdbc/JdbcSchema.java
index 334e610..8ba2d64 100644
--- a/src/main/java/com/google/gwtorm/jdbc/JdbcSchema.java
+++ b/src/main/java/com/google/gwtorm/jdbc/JdbcSchema.java
@@ -14,6 +14,7 @@
package com.google.gwtorm.jdbc;
+import com.google.common.base.Preconditions;
import com.google.gwtorm.schema.ColumnModel;
import com.google.gwtorm.schema.RelationModel;
import com.google.gwtorm.schema.SchemaModel;
@@ -98,6 +99,14 @@
}
}
+ public void renameTable(final StatementExecutor e, String from, String to)
+ throws OrmException {
+ Preconditions.checkNotNull(e);
+ Preconditions.checkNotNull(from);
+ Preconditions.checkNotNull(to);
+ getDialect().renameTable(e, from, to);
+ }
+
public void renameField(final StatementExecutor e, String table, String from,
String to) throws OrmException {
final RelationModel rel = findRelationModel(table);
diff --git a/src/main/java/com/google/gwtorm/schema/sql/DialectMySQL.java b/src/main/java/com/google/gwtorm/schema/sql/DialectMySQL.java
index 3830926..e07740d 100644
--- a/src/main/java/com/google/gwtorm/schema/sql/DialectMySQL.java
+++ b/src/main/java/com/google/gwtorm/schema/sql/DialectMySQL.java
@@ -189,6 +189,18 @@
}
@Override
+ public void renameTable(StatementExecutor e, String from,
+ String to) throws OrmException {
+ final StringBuilder r = new StringBuilder();
+ r.append("RENAME TABLE ");
+ r.append(from);
+ r.append(" TO ");
+ r.append(to);
+ r.append(" ");
+ e.execute(r.toString());
+ }
+
+ @Override
public void renameColumn(StatementExecutor stmt, String tableName,
String fromColumn, ColumnModel col) throws OrmException {
StringBuffer r = new StringBuffer();
diff --git a/src/main/java/com/google/gwtorm/schema/sql/SqlDialect.java b/src/main/java/com/google/gwtorm/schema/sql/SqlDialect.java
index d75d233..ced8ad1 100644
--- a/src/main/java/com/google/gwtorm/schema/sql/SqlDialect.java
+++ b/src/main/java/com/google/gwtorm/schema/sql/SqlDialect.java
@@ -234,6 +234,25 @@
}
/**
+ * Rename an existing table.
+ *
+ * @param e statement to use to execute the SQL command(s).
+ * @param from source table name
+ * @param to destination table name
+ * @throws OrmException the table could not be renamed.
+ */
+ public void renameTable(StatementExecutor e, String from,
+ String to) throws OrmException {
+ final StringBuilder r = new StringBuilder();
+ r.append("ALTER TABLE ");
+ r.append(from);
+ r.append(" RENAME TO ");
+ r.append(to);
+ r.append(" ");
+ e.execute(r.toString());
+ }
+
+ /**
* List all sequences in the current database schema.
*
* @param db connection to the schema.
diff --git a/src/test/java/com/google/gwtorm/schema/sql/DialectH2Test.java b/src/test/java/com/google/gwtorm/schema/sql/DialectH2Test.java
index bb3d21b..8e332b4 100644
--- a/src/test/java/com/google/gwtorm/schema/sql/DialectH2Test.java
+++ b/src/test/java/com/google/gwtorm/schema/sql/DialectH2Test.java
@@ -18,10 +18,10 @@
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
-import com.google.gwtorm.data.PhoneBookDb;
-import com.google.gwtorm.data.PhoneBookDb2;
import com.google.gwtorm.data.Address;
import com.google.gwtorm.data.Person;
+import com.google.gwtorm.data.PhoneBookDb;
+import com.google.gwtorm.data.PhoneBookDb2;
import com.google.gwtorm.jdbc.Database;
import com.google.gwtorm.jdbc.JdbcExecutor;
import com.google.gwtorm.jdbc.JdbcSchema;
@@ -159,4 +159,22 @@
p2.close();
}
}
+
+ @Test
+ public void testRenameTable() throws SQLException, OrmException {
+ assertTrue(dialect.listTables(db).isEmpty());
+ execute("CREATE TABLE foo (cnt INT)");
+ Set<String> s = dialect.listTables(db);
+ assertEquals(1, s.size());
+ assertTrue(s.contains("foo"));
+ final PhoneBookDb p = phoneBook.open();
+ try {
+ ((JdbcSchema) p).renameTable(executor, "foo", "bar");
+ } finally {
+ p.close();
+ }
+ s = dialect.listTables(db);
+ assertTrue(s.contains("bar"));
+ assertFalse(s.contains("for"));
+ }
}
diff --git a/src/test/java/com/google/gwtorm/schema/sql/DialectMySQLTest.java b/src/test/java/com/google/gwtorm/schema/sql/DialectMySQLTest.java
index d3917f3..48aa8fc 100644
--- a/src/test/java/com/google/gwtorm/schema/sql/DialectMySQLTest.java
+++ b/src/test/java/com/google/gwtorm/schema/sql/DialectMySQLTest.java
@@ -182,4 +182,22 @@
p2.close();
}
}
+
+ @Test
+ public void testRenameTable() throws SQLException, OrmException {
+ assertTrue(dialect.listTables(db).isEmpty());
+ execute("CREATE TABLE foo (cnt INT)");
+ Set<String> s = dialect.listTables(db);
+ assertEquals(1, s.size());
+ assertTrue(s.contains("foo"));
+ final PhoneBookDb p = phoneBook.open();
+ try {
+ ((JdbcSchema) p).renameTable(executor, "foo", "bar");
+ } finally {
+ p.close();
+ }
+ s = dialect.listTables(db);
+ assertTrue(s.contains("bar"));
+ assertFalse(s.contains("for"));
+ }
}
diff --git a/src/test/java/com/google/gwtorm/schema/sql/DialectPostgreSQLTest.java b/src/test/java/com/google/gwtorm/schema/sql/DialectPostgreSQLTest.java
index 3d12e77..07bb465 100644
--- a/src/test/java/com/google/gwtorm/schema/sql/DialectPostgreSQLTest.java
+++ b/src/test/java/com/google/gwtorm/schema/sql/DialectPostgreSQLTest.java
@@ -181,4 +181,22 @@
p2.close();
}
}
+
+ @Test
+ public void testRenameTable() throws SQLException, OrmException {
+ assertTrue(dialect.listTables(db).isEmpty());
+ execute("CREATE TABLE foo (cnt INT)");
+ Set<String> s = dialect.listTables(db);
+ assertEquals(1, s.size());
+ assertTrue(s.contains("foo"));
+ final PhoneBookDb p = phoneBook.open();
+ try {
+ ((JdbcSchema) p).renameTable(executor, "foo", "bar");
+ } finally {
+ p.close();
+ }
+ s = dialect.listTables(db);
+ assertTrue(s.contains("bar"));
+ assertFalse(s.contains("for"));
+ }
}