From: Aron Roberts Date: Sun, 29 May 2011 17:33:43 +0000 (+0000) Subject: CSPACE-2496,CSPACE-2497: Added PostgreSQL variants of SQL statements to add indices... X-Git-Url: https://git.aero2k.de/?a=commitdiff_plain;h=90494abb81ffc70a0154c38192e84a17f00a78ce;p=tmp%2Fjakarta-migration.git CSPACE-2496,CSPACE-2497: Added PostgreSQL variants of SQL statements to add indices and determine column datatypes to init classes. --- diff --git a/services/common/src/main/java/org/collectionspace/services/common/init/AddIndices.java b/services/common/src/main/java/org/collectionspace/services/common/init/AddIndices.java index 85416b162..92ad73a34 100755 --- a/services/common/src/main/java/org/collectionspace/services/common/init/AddIndices.java +++ b/services/common/src/main/java/org/collectionspace/services/common/init/AddIndices.java @@ -72,8 +72,8 @@ import org.slf4j.LoggerFactory; </s:params> </s:initHandler> * - * $LastChangedRevision: $ - * $LastChangedDate: $ + * $LastChangedRevision$ + * $LastChangedDate$ */ public class AddIndices extends InitHandler implements IInitHandler { @@ -143,6 +143,20 @@ public class AddIndices extends InitHandler implements IInitHandler { private boolean indexExists(DatabaseProductType databaseProductType, String tableName, String indexName) { + + // FIXME: May need to qualify table name by database/catalog, + // as table names likely will not be globally unique across same + // (although index names *may* be unique within scope). + // - Pass in database name as parameter, retrieved via + // getDatabaseName(field) in onRepositoryInitialized, above. + // - Add 'IN databaseName' after tableName in MySQL variant, below. + // (PostgreSQL variant, below, uses a view that doesn't include + // a foreign key for associating a database/catalog to the index.) + + // FIXME: Consider instead substituting a database-agnostic + // JDBC mechanism for retrieving indexes; e.g. + // java.sql.DatabaseMetaData.getIndexInfo() + boolean indexExists = false; int rows = 0; String sql = ""; @@ -153,7 +167,9 @@ public class AddIndices extends InitHandler implements IInitHandler { if (databaseProductType == DatabaseProductType.MYSQL) { sql = "SHOW INDEX FROM " + tableName + " WHERE key_name='" + indexName + "'"; } else if (databaseProductType == DatabaseProductType.POSTGRESQL) { - // FIXME: Add comparable SQL statement for PostgreSQL. + sql = "SELECT indexname FROM pg_catalog.pg_indexes " + + "WHERE indexname = '" + indexName + "'" + + " AND tablename = '" + tableName + "'"; } try { diff --git a/services/common/src/main/java/org/collectionspace/services/common/init/IInitHandler.java b/services/common/src/main/java/org/collectionspace/services/common/init/IInitHandler.java index 7a7483e25..d9da3391b 100755 --- a/services/common/src/main/java/org/collectionspace/services/common/init/IInitHandler.java +++ b/services/common/src/main/java/org/collectionspace/services/common/init/IInitHandler.java @@ -8,8 +8,8 @@ import java.util.List; /** * User: laramie - * $LastChangedRevision: $ - * $LastChangedDate: $ + * $LastChangedRevision$ + * $LastChangedDate$ */ public interface IInitHandler { diff --git a/services/common/src/main/java/org/collectionspace/services/common/init/InitHandler.java b/services/common/src/main/java/org/collectionspace/services/common/init/InitHandler.java index fb6801732..647062eff 100755 --- a/services/common/src/main/java/org/collectionspace/services/common/init/InitHandler.java +++ b/services/common/src/main/java/org/collectionspace/services/common/init/InitHandler.java @@ -33,8 +33,8 @@ import java.util.List; * some action on the event onRepositoryInitialized(), such as sending JDBC * calls to the repository to add indices, etc. * @author Laramie - * $LastChangedRevision: $ - * $LastChangedDate: $ + * $LastChangedRevision$ + * $LastChangedDate$ */ public class InitHandler implements IInitHandler { diff --git a/services/common/src/main/java/org/collectionspace/services/common/init/ModifyFieldDatatypes.java b/services/common/src/main/java/org/collectionspace/services/common/init/ModifyFieldDatatypes.java index 024b13c85..9f9788a16 100644 --- a/services/common/src/main/java/org/collectionspace/services/common/init/ModifyFieldDatatypes.java +++ b/services/common/src/main/java/org/collectionspace/services/common/init/ModifyFieldDatatypes.java @@ -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 {