]> git.aero2k.de Git - tmp/jakarta-migration.git/commitdiff
CSPACE-4127 Indexes were not correctly being added to the DB. Also fixed bug with...
authorPatrick Schmitz <pschmitz@berkeley.edu>
Thu, 23 Jun 2011 23:50:06 +0000 (23:50 +0000)
committerPatrick Schmitz <pschmitz@berkeley.edu>
Thu, 23 Jun 2011 23:50:06 +0000 (23:50 +0000)
services/common/src/main/cspace/config/services/tenants/tenant-bindings-proto.xml
services/common/src/main/java/org/collectionspace/services/common/init/AddIndices.java
services/common/src/main/java/org/collectionspace/services/common/init/ModifyFieldDatatypes.java

index 035f41361e1e5b2ef460778512e67e00a01a2ac4..ba019d47b9c5f62ab85023a026163c097e4a5f87 100644 (file)
         <service:classname>org.collectionspace.services.common.init.AddIndices</service:classname>
         <service:params>
           <service:field>
-            <service:table>nuxeo.vocabularies_common</service:table>
+            <service:table>vocabularies_common</service:table>
             <service:col>displayname</service:col>
           </service:field>
           <service:field>
-            <service:table>nuxeo.vocabularies_common</service:table>
+            <service:table>vocabularies_common</service:table>
             <service:col>shortidentifier</service:col>
           </service:field>
         </service:params>
         <service:classname>org.collectionspace.services.common.init.AddIndices</service:classname>
         <service:params>
           <service:field>
-            <service:table>nuxeo.vocabularyitems_common</service:table>
+            <service:table>vocabularyitems_common</service:table>
             <service:col>inauthority</service:col>
           </service:field>
           <service:field>
-            <service:table>nuxeo.vocabularyitems_common</service:table>
+            <service:table>vocabularyitems_common</service:table>
             <service:col>displayname</service:col>
           </service:field>
           <service:field>
-            <service:table>nuxeo.vocabularyitems_common</service:table>
+            <service:table>vocabularyitems_common</service:table>
             <service:col>shortidentifier</service:col>
           </service:field>
         </service:params>
         <service:classname>org.collectionspace.services.common.init.AddIndices</service:classname>
         <service:params>
           <service:field>
-            <service:table>nuxeo.orgauthorities_common</service:table>
+            <service:table>orgauthorities_common</service:table>
             <service:col>displayname</service:col>
           </service:field>
           <service:field>
-            <service:table>nuxeo.orgauthorities_common</service:table>
+            <service:table>orgauthorities_common</service:table>
             <service:col>shortidentifier</service:col>
           </service:field>
         </service:params>
         <service:classname>org.collectionspace.services.common.init.AddIndices</service:classname>
         <service:params>
           <service:field>
-            <service:table>nuxeo.organizations_common</service:table>
+            <service:table>organizations_common</service:table>
             <service:col>inauthority</service:col>
           </service:field>
           <service:field>
-            <service:table>nuxeo.organizations_common</service:table>
+            <service:table>organizations_common</service:table>
             <service:col>displayname</service:col>
           </service:field>
           <service:field>
-            <service:table>nuxeo.organizations_common</service:table>
+            <service:table>organizations_common</service:table>
             <service:col>shortidentifier</service:col>
           </service:field>
         </service:params>
         <service:classname>org.collectionspace.services.common.init.AddIndices</service:classname>
         <service:params>
           <service:field>
-            <service:table>nuxeo.personauthorities_common</service:table>
+            <service:table>personauthorities_common</service:table>
             <service:col>displayname</service:col>
           </service:field>
           <service:field>
-            <service:table>nuxeo.personauthorities_common</service:table>
+            <service:table>personauthorities_common</service:table>
             <service:col>shortidentifier</service:col>
           </service:field>
         </service:params>
         <service:classname>org.collectionspace.services.common.init.AddIndices</service:classname>
         <service:params>
           <service:field>
-            <service:table>nuxeo.persons_common</service:table>
+            <service:table>persons_common</service:table>
             <service:col>inauthority</service:col>
           </service:field>
           <service:field>
-            <service:table>nuxeo.persons_common</service:table>
+            <service:table>persons_common</service:table>
             <service:col>displayname</service:col>
           </service:field>
           <service:field>
-            <service:table>nuxeo.persons_common</service:table>
+            <service:table>persons_common</service:table>
             <service:col>shortidentifier</service:col>
           </service:field>
         </service:params>
         <service:classname>org.collectionspace.services.common.init.AddIndices</service:classname>
         <service:params>
           <service:field>
-            <service:table>nuxeo.locationauthorities_common</service:table>
+            <service:table>locationauthorities_common</service:table>
             <service:col>displayname</service:col>
           </service:field>
           <service:field>
-            <service:table>nuxeo.locationauthorities_common</service:table>
+            <service:table>locationauthorities_common</service:table>
             <service:col>shortidentifier</service:col>
           </service:field>
         </service:params>
         <service:classname>org.collectionspace.services.common.init.AddIndices</service:classname>
         <service:params>
           <service:field>
-            <service:table>nuxeo.locations_common</service:table>
+            <service:table>locations_common</service:table>
             <service:col>inauthority</service:col>
           </service:field>
           <service:field>
-            <service:table>nuxeo.locations_common</service:table>
+            <service:table>locations_common</service:table>
             <service:col>displayname</service:col>
           </service:field>
           <service:field>
-            <service:table>nuxeo.locations_common</service:table>
+            <service:table>locations_common</service:table>
             <service:col>shortidentifier</service:col>
           </service:field>
         </service:params>
         <service:classname>org.collectionspace.services.common.init.AddIndices</service:classname>
         <service:params>
           <service:field>
-            <service:table>nuxeo.taxonomyauthority_common</service:table>
+            <service:table>taxonomyauthority_common</service:table>
             <service:col>displayname</service:col>
           </service:field>
           <service:field>
-            <service:table>nuxeo.taxonomyauthority_common</service:table>
+            <service:table>taxonomyauthority_common</service:table>
             <service:col>shortidentifier</service:col>
           </service:field>
         </service:params>
         <service:classname>org.collectionspace.services.common.init.AddIndices</service:classname>
         <service:params>
           <service:field>
-            <service:table>nuxeo.taxon_common</service:table>
+            <service:table>taxon_common</service:table>
             <service:col>inauthority</service:col>
           </service:field>
           <service:field>
-            <service:table>nuxeo.taxon_common</service:table>
+            <service:table>taxon_common</service:table>
             <service:col>displayname</service:col>
           </service:field>
           <service:field>
-            <service:table>nuxeo.taxon_common</service:table>
+            <service:table>taxon_common</service:table>
             <service:col>shortidentifier</service:col>
           </service:field>
         </service:params>
           <types:value>predicateDisplayName</types:value>
         </types:item>
       </service:properties>
+      <service:initHandler xmlns:service="http://collectionspace.org/services/common/service">
+        <service:classname>org.collectionspace.services.common.init.AddIndices</service:classname>
+        <service:params>
+          <service:field>
+            <service:table>relations_common</service:table>
+            <service:param>documentid1,documentid2</service:param>
+          </service:field>
+        </service:params>
+      </service:initHandler>
       <service:object xmlns:service="http://collectionspace.org/services/common/service" name="Relation" version="0.1">
         <service:part id="0" control_group="Managed" versionable="true" auditable="false" label="relations-system" updated="" order="0">
           <service:content contentType="application/xml">
index 59a78daf83e80a72cdd0c2f2d15251dccf0c9b46..5735c9aea12259db370ad8c7b92398c684768592 100755 (executable)
@@ -79,6 +79,7 @@ public class AddIndices extends InitHandler implements IInitHandler {
 \r
     final Logger logger = LoggerFactory.getLogger(AddIndices.class);\r
     private final static String INDEX_SUFFIX = "_idx";\r
+    private final static String INDEX_SEP = "_";\r
 \r
     /** See the class javadoc for this class: it shows the syntax supported in the configuration params.\r
      */\r
@@ -108,10 +109,10 @@ public class AddIndices extends InitHandler implements IInitHandler {
     private int addOneIndex(String tableName, String columnName){\r
         int rows = 0;\r
         String sql = "";\r
-        String indexName = columnName + INDEX_SUFFIX;\r
+        String indexName = tableName + INDEX_SEP + columnName + INDEX_SUFFIX;\r
         try {\r
             DatabaseProductType databaseProductType = JDBCTools.getDatabaseProductType();\r
-            if (indexExists(databaseProductType, tableName, indexName)) {\r
+            if (indexExists(databaseProductType, tableName, columnName, indexName)) {\r
                 logger.trace("Index already exists for column " + columnName\r
                         + " in table " + tableName);\r
                 // FIXME: Can add the option to drop and re-create an index here.\r
@@ -121,12 +122,11 @@ public class AddIndices extends InitHandler implements IInitHandler {
             // TODO: Consider refactoring this 'if' statement to a general-purpose\r
             // mechanism for retrieving and populating catalog/DDL-type SQL statements\r
             // appropriate to a particular database product.\r
-            if (databaseProductType == DatabaseProductType.MYSQL) {\r
-                 logger.info("Creating index for column " + columnName + " in table " + tableName);\r
-                 sql = "CREATE INDEX " + indexName + " ON " + tableName + " (" + columnName + ")";\r
-            } else if (databaseProductType == DatabaseProductType.POSTGRESQL) {\r
-                 logger.info("Creating index for column " + columnName + " in table " + tableName);\r
-                 sql = "CREATE INDEX ON " + tableName + " (" + columnName + ")";\r
+            logger.info("Creating index for column " + columnName + " in table " + tableName);\r
+            if (databaseProductType == DatabaseProductType.MYSQL\r
+                       || databaseProductType == DatabaseProductType.POSTGRESQL) {\r
+                 sql = "CREATE INDEX " + indexName + " ON " \r
+                               + tableName + " (" + columnName + ")";\r
             } else {\r
                 throw new Exception("Unrecognized database system " + databaseProductType);\r
             }\r
@@ -151,7 +151,7 @@ public class AddIndices extends InitHandler implements IInitHandler {
     }\r
 \r
     private boolean indexExists(DatabaseProductType databaseProductType,\r
-            String tableName, String indexName) {\r
+            String tableName, String colName, 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
@@ -169,7 +169,6 @@ public class AddIndices extends InitHandler implements IInitHandler {
         // java.sql.DatabaseMetaData.getIndexInfo()\r
         \r
         boolean indexExists = false;\r
-        int rows = 0;\r
         String sql = "";\r
         Connection conn = null;\r
         Statement stmt = null;\r
@@ -178,9 +177,10 @@ 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
+               // We want to see if any index on that column exists, not just ours...\r
             sql = "SELECT indexname FROM pg_catalog.pg_indexes "\r
-                    + "WHERE indexname = '" + indexName + "'"\r
-                    + " AND tablename = '" + tableName + "'";\r
+                    + "WHERE tablename = '" + tableName \r
+                    + "' AND indexdef ILIKE '%("+colName+")'";\r
         }\r
 \r
         try {\r
@@ -196,15 +196,12 @@ public class AddIndices extends InitHandler implements IInitHandler {
             conn = JDBCTools.getConnection(JDBCTools.NUXEO_REPOSITORY_NAME);\r
             stmt = conn.createStatement();\r
             rs = stmt.executeQuery(sql);\r
-            if (rs.last()) {\r
-               rows = rs.getRow();\r
+            if (rs.next()) {\r
+                indexExists = true;\r
             }\r
             rs.close();\r
             stmt.close();\r
             conn.close();\r
-            if (rows > 0) {\r
-                indexExists = true;\r
-            }\r
         } catch (Exception e) {\r
             logger.debug("Error when identifying whether index exists in table "\r
                     + tableName + ":" + e.getMessage());\r
index 701cacd97d9adf39107b425d0a7893b54f05a11c..fa68210bd7f9d4fb1941b057bc42f17344dc59f2 100644 (file)
@@ -202,7 +202,7 @@ public class ModifyFieldDatatypes extends InitHandler implements IInitHandler {
     private String getTableName(Field field) {
         String tableName = "";
         String[] databaseAndTableNames = field.getTable().split("\\.", 2);
-        if (databaseAndTableNames[1].isEmpty()) {
+        if (databaseAndTableNames.length>1 && !databaseAndTableNames[1].isEmpty()) {
             tableName = databaseAndTableNames[1];
         } else {
             tableName = field.getTable();