<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">
\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
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
// 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
}\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
// 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
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
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