]> git.aero2k.de Git - tmp/jakarta-migration.git/commitdiff
CSPACE-2496,CSPACE-2497: Added PostgreSQL variants of SQL statements to add indices...
authorAron Roberts <aron@socrates.berkeley.edu>
Sun, 29 May 2011 17:33:43 +0000 (17:33 +0000)
committerAron Roberts <aron@socrates.berkeley.edu>
Sun, 29 May 2011 17:33:43 +0000 (17:33 +0000)
services/common/src/main/java/org/collectionspace/services/common/init/AddIndices.java
services/common/src/main/java/org/collectionspace/services/common/init/IInitHandler.java
services/common/src/main/java/org/collectionspace/services/common/init/InitHandler.java
services/common/src/main/java/org/collectionspace/services/common/init/ModifyFieldDatatypes.java

index 85416b162479137fa1b310e16ff6f12ebc922495..92ad73a3464de78457e5e0ab490ba5e58614e652 100755 (executable)
@@ -72,8 +72,8 @@ import org.slf4j.LoggerFactory;
                 &lt;/s:params>\r
             &lt;/s:initHandler>\r
  *\r
- * $LastChangedRevision$\r
- * $LastChangedDate$\r
+ * $LastChangedRevision$\r
+ * $LastChangedDate$\r
  */\r
 public class AddIndices extends InitHandler implements IInitHandler {\r
 \r
@@ -143,6 +143,20 @@ public class AddIndices extends InitHandler implements IInitHandler {
 \r
     private boolean indexExists(DatabaseProductType databaseProductType,\r
             String tableName, String indexName) {\r
+        \r
+        // FIXME: May need to qualify table name by database/catalog,\r
+        // as table names likely will not be globally unique across same\r
+        // (although index names *may* be unique within scope).\r
+        // - Pass in database name as parameter, retrieved via\r
+        //   getDatabaseName(field) in onRepositoryInitialized, above.\r
+        // - Add 'IN databaseName' after tableName in MySQL variant, below.\r
+        //   (PostgreSQL variant, below, uses a view that doesn't include\r
+        //   a foreign key for associating a database/catalog to the index.)\r
+        \r
+        // FIXME: Consider instead substituting a database-agnostic\r
+        // JDBC mechanism for retrieving indexes; e.g.\r
+        // java.sql.DatabaseMetaData.getIndexInfo()\r
+        \r
         boolean indexExists = false;\r
         int rows = 0;\r
         String sql = "";\r
@@ -153,7 +167,9 @@ public class AddIndices extends InitHandler implements IInitHandler {
         if (databaseProductType == DatabaseProductType.MYSQL) {\r
             sql = "SHOW INDEX FROM " + tableName + " WHERE key_name='" + indexName + "'";\r
         } else if (databaseProductType == DatabaseProductType.POSTGRESQL) {\r
-            // FIXME: Add comparable SQL statement for PostgreSQL.\r
+            sql = "SELECT indexname FROM pg_catalog.pg_indexes "\r
+                    + "WHERE indexname = '" + indexName + "'"\r
+                    + " AND tablename = '" + tableName + "'";\r
         }\r
 \r
         try {\r
index 7a7483e25833aec010d0a2f354e5718400c9a430..d9da3391bd7cd2fcb28de4c7e3b85e1d24a072fd 100755 (executable)
@@ -8,8 +8,8 @@ import java.util.List;
 \r
 /**\r
  * User: laramie\r
- * $LastChangedRevision:  $\r
- * $LastChangedDate:  $\r
+ * $LastChangedRevision$\r
+ * $LastChangedDate$\r
  */\r
 \r
 public interface IInitHandler {\r
index fb68017323f2f88dec6b59c53517ddf9fa1e586b..647062effe2402ab4d15541464d00a4fb8aed19f 100755 (executable)
@@ -33,8 +33,8 @@ import java.util.List;
  *  some action on the event onRepositoryInitialized(), such as sending JDBC\r
  *  calls to the repository to add indices, etc.\r
  * @author Laramie\r
- * $LastChangedRevision:  $\r
- * $LastChangedDate:  $\r
+ * $LastChangedRevision$\r
+ * $LastChangedDate$\r
  */\r
 public class InitHandler implements IInitHandler {\r
 \r
index 024b13c85ea163c52eabcd3d7fe6fc345bce9f0b..9f9788a1659571ca2c6e09a8e98fa4277554e812 100644 (file)
@@ -41,8 +41,8 @@ import org.slf4j.LoggerFactory;
  * ModifyFieldDatatypes, post-init action to configure the database
  * datatypes of individual fields.
  *
- * $LastChangedRevision$
- * $LastChangedDate$
+ * $LastChangedRevision$
+ * $LastChangedDate$
  */
 public class ModifyFieldDatatypes extends InitHandler implements IInitHandler {
 
@@ -112,6 +112,10 @@ public class ModifyFieldDatatypes extends InitHandler implements IInitHandler {
 
     private boolean fieldHasDesiredDatatype(DatabaseProductType databaseProductType,
             Field field, String datatype) {
+        
+        // FIXME: Consider instead using the database-agnostic
+        // JDBC DatabaseMetaData class to extract metadata, as per
+        // http://www.java2s.com/Code/Java/Database-SQL-JDBC/GetColumnType.htm
 
         boolean fieldHasDesiredDatatype = false;
         int rows = 0;
@@ -127,7 +131,10 @@ public class ModifyFieldDatatypes extends InitHandler implements IInitHandler {
                     + " AND TABLE_NAME = '" + getTableName(field) + "'"
                     + " AND COLUMN_NAME = '" + field.getCol() + "'";
         } else if (databaseProductType == DatabaseProductType.POSTGRESQL) {
-            // FIXME: Add comparable SQL statement for PostgreSQL.
+            sql = "SELECT data_type FROM information_schema.columns "
+                    + "WHERE table_catalog = '" + getDatabaseName(field) + "'"
+                    + " AND table_name = '" + getTableName(field) + "'"
+                    + " AND column_name = '" + field.getCol() + "'";
         }
 
         try {