Add SqlDialect method to drop an index
Only MySQL has a custom implementation of this.
At this point it is easiest to only add a drop method, not an add
method. There are multiple ways add could be implemented, e.g.
automatically creating indexes when scanning over @Query fields.
However, this change is primarily to help Gerrit Code Review migrate
away from gwtorm, for which dropping indexes is more germane.
Change-Id: I2eacad107d8f6e78c77f43f30ca22a62d3a65f02
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 c4cb7e1..521a88f 100644
--- a/src/main/java/com/google/gwtorm/schema/sql/DialectMySQL.java
+++ b/src/main/java/com/google/gwtorm/schema/sql/DialectMySQL.java
@@ -96,6 +96,11 @@
}
@Override
+ protected String getDropIndexSql(String tableName, String name) {
+ return "DROP INDEX " + name + " ON " + tableName;
+ }
+
+ @Override
protected String getNextSequenceValueSql(final String seqname) {
return seqname;
}
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 164edda..de48b7c 100644
--- a/src/main/java/com/google/gwtorm/schema/sql/SqlDialect.java
+++ b/src/main/java/com/google/gwtorm/schema/sql/SqlDialect.java
@@ -382,6 +382,23 @@
public abstract void renameColumn(StatementExecutor e, String tableName,
String fromColumn, ColumnModel col) throws OrmException;
+ /**
+ * Drop one index from a table.
+ *
+ * @param e statement to use to execute the SQL command(s).
+ * @param tableName table to rename the index in.
+ * @param name index name.
+ * @throws OrmException the index could not be renamed.
+ */
+ public void dropIndex(StatementExecutor e, String tableName, String name)
+ throws OrmException {
+ e.execute(getDropIndexSql(tableName, name));
+ }
+
+ protected String getDropIndexSql(String tableName, String name) {
+ return "DROP INDEX " + name;
+ }
+
protected abstract String getNextSequenceValueSql(String seqname);
/**
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 8e86e1f..a94f641 100644
--- a/src/test/java/com/google/gwtorm/schema/sql/DialectH2Test.java
+++ b/src/test/java/com/google/gwtorm/schema/sql/DialectH2Test.java
@@ -132,6 +132,10 @@
assertEquals(2, s.size());
assertTrue(s.contains("foo_primary_ind"));
assertTrue(s.contains("foo_second_ind"));
+
+ dialect.dropIndex(executor, "foo", "foo_primary_ind");
+ dialect.dropIndex(executor, "foo", "foo_second_ind");
+ assertEquals(Collections.emptySet(), dialect.listIndexes(db, "foo"));
}
@Test
diff --git a/src/test/java/com/google/gwtorm/schema/sql/DialectMaxDBTest.java b/src/test/java/com/google/gwtorm/schema/sql/DialectMaxDBTest.java
index 7b21d10..97937b2 100644
--- a/src/test/java/com/google/gwtorm/schema/sql/DialectMaxDBTest.java
+++ b/src/test/java/com/google/gwtorm/schema/sql/DialectMaxDBTest.java
@@ -39,6 +39,7 @@
import java.sql.DriverManager;
import java.sql.SQLException;
+import java.util.Collections;
import java.util.Properties;
import java.util.Set;
@@ -156,6 +157,10 @@
assertEquals(2, s.size());
assertTrue(s.contains("foo_primary_ind"));
assertTrue(s.contains("foo_second_ind"));
+
+ dialect.dropIndex(executor, "foo", "foo_primary_ind");
+ dialect.dropIndex(executor, "foo", "foo_second_ind");
+ assertEquals(Collections.emptySet(), dialect.listIndexes(db, "foo"));
}
@Test
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 46f1ec4..032bb33 100644
--- a/src/test/java/com/google/gwtorm/schema/sql/DialectMySQLTest.java
+++ b/src/test/java/com/google/gwtorm/schema/sql/DialectMySQLTest.java
@@ -149,6 +149,10 @@
assertEquals(2, s.size());
assertTrue(s.contains("foo_primary_ind"));
assertTrue(s.contains("foo_second_ind"));
+
+ dialect.dropIndex(executor, "foo", "foo_primary_ind");
+ dialect.dropIndex(executor, "foo", "foo_second_ind");
+ assertEquals(Collections.emptySet(), dialect.listIndexes(db, "foo"));
}
@Test
diff --git a/src/test/java/com/google/gwtorm/schema/sql/DialectOracleSQLTest.java b/src/test/java/com/google/gwtorm/schema/sql/DialectOracleSQLTest.java
index 431503d..8bb00ce 100644
--- a/src/test/java/com/google/gwtorm/schema/sql/DialectOracleSQLTest.java
+++ b/src/test/java/com/google/gwtorm/schema/sql/DialectOracleSQLTest.java
@@ -151,6 +151,10 @@
assertEquals(2, s.size());
assertTrue(s.contains("foo_primary_ind"));
assertTrue(s.contains("foo_second_ind"));
+
+ dialect.dropIndex(executor, "foo", "foo_primary_ind");
+ dialect.dropIndex(executor, "foo", "foo_second_ind");
+ assertEquals(Collections.emptySet(), dialect.listIndexes(db, "foo"));
}
@Test
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 fc6b0a9..cbdc050 100644
--- a/src/test/java/com/google/gwtorm/schema/sql/DialectPostgreSQLTest.java
+++ b/src/test/java/com/google/gwtorm/schema/sql/DialectPostgreSQLTest.java
@@ -148,6 +148,10 @@
assertEquals(2, s.size());
assertTrue(s.contains("foo_primary_ind"));
assertTrue(s.contains("foo_second_ind"));
+
+ dialect.dropIndex(executor, "foo", "foo_primary_ind");
+ dialect.dropIndex(executor, "foo", "foo_second_ind");
+ assertEquals(Collections.emptySet(), dialect.listIndexes(db, "foo"));
}
@Test