diff --git a/config/alfresco/bootstrap-context.xml b/config/alfresco/bootstrap-context.xml
index ef59239827..59fa7e6449 100644
--- a/config/alfresco/bootstrap-context.xml
+++ b/config/alfresco/bootstrap-context.xml
@@ -35,7 +35,7 @@
- classpath:alfresco/dbscripts/create/2.0/${db.script.dialect}/AlfrescoPostCreate-2.0-FKIndexes.sql
+ classpath:alfresco/dbscripts/create/2.1/${db.script.dialect}/AlfrescoPostCreate-2.1-FKIndexes.sql
@@ -46,15 +46,15 @@
-
+
-
-
+
+
-
+
diff --git a/config/alfresco/dbscripts/create/2.0/org.hibernate.dialect.Dialect/AlfrescoPostCreate-2.0-FKIndexes.sql b/config/alfresco/dbscripts/create/2.0/org.hibernate.dialect.Dialect/AlfrescoPostCreate-2.0-FKIndexes.sql
deleted file mode 100644
index c52d7b15eb..0000000000
--- a/config/alfresco/dbscripts/create/2.0/org.hibernate.dialect.Dialect/AlfrescoPostCreate-2.0-FKIndexes.sql
+++ /dev/null
@@ -1,53 +0,0 @@
---
--- Title: Post-Create Foreign Key indexes
--- Database: Generic
--- Since: V2.0 Schema 38
--- Author: Derek Hulley
---
--- Please contact support@alfresco.com if you need assistance with the upgrade.
---
-
--- Repository
-CREATE INDEX FKFFF41F9960601995 ON alf_access_control_entry (permission_id);
-CREATE INDEX FKFFF41F99B25A50BF ON alf_access_control_entry (authority_id);
-CREATE INDEX FKFFF41F99B9553F6C ON alf_access_control_entry (acl_id);
-CREATE INDEX FK8A749A657B7FDE43 ON alf_auth_ext_keys (id);
-CREATE INDEX FKFFC5468E74173FF4 ON alf_child_assoc (child_node_id);
-CREATE INDEX FKFFC5468E8E50E582 ON alf_child_assoc (parent_node_id);
-CREATE INDEX FK60EFB626B9553F6C ON alf_node (acl_id);
-CREATE INDEX FK60EFB626D24ADD25 ON alf_node (protocol, identifier);
-CREATE INDEX FK7D4CF8EC7F2C8017 ON alf_node_properties (node_id);
-CREATE INDEX FKD654E027F2C8017 ON alf_node_aspects (node_id);
-CREATE INDEX FKE1A550BCB69C43F3 ON alf_node_assoc (source_node_id);
-CREATE INDEX FKE1A550BCA8FC7769 ON alf_node_assoc (target_node_id);
-CREATE INDEX FK71C2002B7F2C8017 ON alf_node_status (node_id);
-CREATE INDEX FKBD4FF53D22DBA5BA ON alf_store (root_node_id);
-
---
--- Transaction tables
---
-CREATE INDEX FK71C2002B9E57C13D ON alf_node_status (transaction_id);
-CREATE INDEX FKB8761A3A9AE340B7 ON alf_transaction (server_id);
-
---
--- Audit tables
---
-CREATE INDEX FKEAD1817484342E39 ON alf_audit_fact (audit_date_id);
-CREATE INDEX FKEAD18174A0F9B8D9 ON alf_audit_fact (audit_source_id);
-CREATE INDEX FKEAD18174F524CFD7 ON alf_audit_fact (audit_conf_id);
-
--- AVM
-CREATE INDEX fk_avm_asp_node ON avm_aspects (node_id);
-CREATE INDEX fk_avm_ce_child ON avm_child_entries (child_id);
-CREATE INDEX fk_avm_ce_parent ON avm_child_entries (parent_id);
-CREATE INDEX fk_avm_hl_desc ON avm_history_links (descendent);
-CREATE INDEX fk_avm_hl_ancestor ON avm_history_links (ancestor);
-CREATE INDEX fk_avm_ml_from ON avm_merge_links (mfrom);
-CREATE INDEX fk_avm_ml_to ON avm_merge_links (mto);
-CREATE INDEX fk_avm_np_node ON avm_node_properties (node_id);
-CREATE INDEX fk_avm_n_acl ON avm_nodes (acl_id);
-CREATE INDEX fk_avm_n_store ON avm_nodes (store_new_id);
-CREATE INDEX fk_avm_sp_store ON avm_store_properties (avm_store_id);
-CREATE INDEX fk_avm_s_root ON avm_stores (current_root_id);
-CREATE INDEX fk_avm_vr_store ON avm_version_roots (avm_store_id);
-CREATE INDEX fk_avm_vr_root ON avm_version_roots (root_id);
diff --git a/config/alfresco/dbscripts/create/2.0/org.hibernate.dialect.MySQLInnoDBDialect/AlfrescoPostCreate-2.0-FKIndexes.sql b/config/alfresco/dbscripts/create/2.0/org.hibernate.dialect.MySQLInnoDBDialect/AlfrescoPostCreate-2.0-FKIndexes.sql
deleted file mode 100644
index 674078042b..0000000000
--- a/config/alfresco/dbscripts/create/2.0/org.hibernate.dialect.MySQLInnoDBDialect/AlfrescoPostCreate-2.0-FKIndexes.sql
+++ /dev/null
@@ -1,10 +0,0 @@
---
--- Title: Post-Create AVM Foreign Key indexes
--- Database: MySQL
--- Since: V2.0 Schema 38
--- Author: Derek Hulley
---
--- Please contact support@alfresco.com if you need assistance with the upgrade.
---
-
--- The MySQL dialects apply the FK indexes by default
diff --git a/config/alfresco/dbscripts/create/2.1/org.hibernate.dialect.Dialect/AlfrescoPostCreate-2.1-FKIndexes.sql b/config/alfresco/dbscripts/create/2.1/org.hibernate.dialect.Dialect/AlfrescoPostCreate-2.1-FKIndexes.sql
new file mode 100644
index 0000000000..c15a98afb6
--- /dev/null
+++ b/config/alfresco/dbscripts/create/2.1/org.hibernate.dialect.Dialect/AlfrescoPostCreate-2.1-FKIndexes.sql
@@ -0,0 +1,70 @@
+--
+-- Title: Post-Create Foreign Key indexes
+-- Database: Generic
+-- Since: V2.0 Schema 63
+-- Author: Derek Hulley
+--
+-- Please contact support@alfresco.com if you need assistance with the upgrade.
+--
+
+-- JBPM
+-- JBPM tables have explicit indexes where required. Adding FK indexes here
+-- leads to duplication, and on MySQL, this is exactly what happens.
+
+-- Repository
+CREATE INDEX FKFFF41F9960601995 ON alf_access_control_entry (permission_id);
+CREATE INDEX FKFFF41F99B25A50BF ON alf_access_control_entry (authority_id);
+CREATE INDEX FKFFF41F99B9553F6C ON alf_access_control_entry (acl_id);
+CREATE INDEX FK8A749A657B7FDE43 ON alf_auth_ext_keys (id);
+CREATE INDEX FKFFC5468E74173FF4 ON alf_child_assoc (child_node_id);
+CREATE INDEX FKFFC5468E8E50E582 ON alf_child_assoc (parent_node_id);
+CREATE INDEX FK60EFB626B9553F6C ON alf_node (acl_id);
+CREATE INDEX FK60EFB626D24ADD25 ON alf_node (protocol, identifier);
+CREATE INDEX FK7D4CF8EC7F2C8017 ON alf_node_properties (node_id);
+CREATE INDEX FK7D4CF8EC40E780DC ON alf_node_properties (attribute_value);
+CREATE INDEX FKD654E027F2C8017 ON alf_node_aspects (node_id);
+CREATE INDEX FKE1A550BCB69C43F3 ON alf_node_assoc (source_node_id);
+CREATE INDEX FKE1A550BCA8FC7769 ON alf_node_assoc (target_node_id);
+CREATE INDEX FK71C2002B7F2C8017 ON alf_node_status (node_id);
+CREATE INDEX FKBD4FF53D22DBA5BA ON alf_store (root_node_id);
+
+--
+-- Transaction tables
+--
+CREATE INDEX FK71C2002B9E57C13D ON alf_node_status (transaction_id);
+CREATE INDEX FKB8761A3A9AE340B7 ON alf_transaction (server_id);
+
+--
+-- Audit tables
+--
+CREATE INDEX FKEAD1817484342E39 ON alf_audit_fact (audit_date_id);
+CREATE INDEX FKEAD18174A0F9B8D9 ON alf_audit_fact (audit_source_id);
+CREATE INDEX FKEAD18174F524CFD7 ON alf_audit_fact (audit_conf_id);
+
+--
+-- Attribute tables
+--
+CREATE INDEX fk_attr_n_acl ON alf_attributes (acl_id);
+--CREATE INDEX FK64D0B9CF69B9F16A ON alf_global_attributes (attribute); This is auto-indexed
+CREATE INDEX FKC7D52FB0ACD8822C ON alf_list_attribute_entries (list_id);
+CREATE INDEX FKC7D52FB02C5AB86C ON alf_list_attribute_entries (attribute_id);
+CREATE INDEX FK335CAE262C5AB86C ON alf_map_attribute_entries (attribute_id);
+CREATE INDEX FK335CAE26AEAC208C ON alf_map_attribute_entries (map_id);
+
+-- AVM
+CREATE INDEX fk_avm_asp_node ON avm_aspects (node_id);
+CREATE INDEX FKD3FD9F95EDCD4A96 ON avm_aspects_new (id);
+CREATE INDEX fk_avm_ce_child ON avm_child_entries (child_id);
+CREATE INDEX fk_avm_ce_parent ON avm_child_entries (parent_id);
+CREATE INDEX fk_avm_hl_desc ON avm_history_links (descendent);
+CREATE INDEX fk_avm_hl_ancestor ON avm_history_links (ancestor);
+CREATE INDEX fk_avm_ml_from ON avm_merge_links (mfrom);
+CREATE INDEX fk_avm_ml_to ON avm_merge_links (mto);
+CREATE INDEX FK44A37C8A6BD529F3 ON avm_node_properties_new (node_id);
+CREATE INDEX fk_avm_np_node ON avm_node_properties (node_id);
+CREATE INDEX fk_avm_n_acl ON avm_nodes (acl_id);
+CREATE INDEX fk_avm_n_store ON avm_nodes (store_new_id);
+CREATE INDEX fk_avm_sp_store ON avm_store_properties (avm_store_id);
+CREATE INDEX fk_avm_s_root ON avm_stores (current_root_id);
+CREATE INDEX fk_avm_vr_store ON avm_version_roots (avm_store_id);
+CREATE INDEX fk_avm_vr_root ON avm_version_roots (root_id);
diff --git a/config/alfresco/dbscripts/create/2.1/org.hibernate.dialect.MySQLInnoDBDialect/AlfrescoPostCreate-2.1-FKIndexes.sql b/config/alfresco/dbscripts/create/2.1/org.hibernate.dialect.MySQLInnoDBDialect/AlfrescoPostCreate-2.1-FKIndexes.sql
new file mode 100644
index 0000000000..c4e01b517a
--- /dev/null
+++ b/config/alfresco/dbscripts/create/2.1/org.hibernate.dialect.MySQLInnoDBDialect/AlfrescoPostCreate-2.1-FKIndexes.sql
@@ -0,0 +1,14 @@
+--
+-- Title: Post-Create Foreign Key indexes
+-- Database: MySQL
+-- Since: V2.0 Schema 63
+-- Author: Derek Hulley
+--
+-- Please contact support@alfresco.com if you need assistance with the upgrade.
+--
+
+-- Remove pointless duplicated FK indexes
+ALTER TABLE alf_global_attributes DROP INDEX FK64D0B9CF69B9F16A;
+
+
+-- The MySQL dialects apply the FK indexes by default
diff --git a/config/alfresco/dbscripts/upgrade/1.4/org.hibernate.dialect.Dialect/AlfrescoSchemaUpdate-1.4-PostgresFKIndexes.sql b/config/alfresco/dbscripts/upgrade/1.4/org.hibernate.dialect.Dialect/AlfrescoSchemaUpdate-1.4-PostgresFKIndexes.sql
deleted file mode 100644
index 427cee8419..0000000000
--- a/config/alfresco/dbscripts/upgrade/1.4/org.hibernate.dialect.Dialect/AlfrescoSchemaUpdate-1.4-PostgresFKIndexes.sql
+++ /dev/null
@@ -1,15 +0,0 @@
---
--- Foreign Key Indexes for PostgreSQL databases. (Generic Schema 1.4)
---
-
---
--- Record script finish
---
-delete from alf_applied_patch where id = 'patch.db-V1.4-PostgresFKIndexes';
-insert into alf_applied_patch
- (id, description, fixes_from_schema, fixes_to_schema, applied_to_schema, target_schema, applied_on_date, applied_to_server, was_executed, succeeded, report)
- values
- (
- 'patch.db-V1.4-PostgresFKIndexes', 'Manually execute script AlfrescoSchemaUpdate-1.4-PostgresFKIndexes.sql',
- 21, 24, -1, 25, null, 'UNKOWN', 1, 1, 'Script completed'
- );
\ No newline at end of file
diff --git a/config/alfresco/dbscripts/upgrade/1.4/org.hibernate.dialect.PostgreSQLDialect/AlfrescoSchemaUpdate-1.4-PostgresFKIndexes.sql b/config/alfresco/dbscripts/upgrade/1.4/org.hibernate.dialect.PostgreSQLDialect/AlfrescoSchemaUpdate-1.4-PostgresFKIndexes.sql
deleted file mode 100644
index 8fbc02d686..0000000000
--- a/config/alfresco/dbscripts/upgrade/1.4/org.hibernate.dialect.PostgreSQLDialect/AlfrescoSchemaUpdate-1.4-PostgresFKIndexes.sql
+++ /dev/null
@@ -1,42 +0,0 @@
---
--- Foreign Key Indexes for PostgreSQL databases. (PostgreSQL Schema 1.4)
---
-CREATE INDEX FKFFF41F9960601995 ON alf_access_control_entry (permission_id);
-CREATE INDEX FKFFF41F99B25A50BF ON alf_access_control_entry (authority_id);
-CREATE INDEX FKFFF41F99B9553F6C ON alf_access_control_entry (acl_id);
-CREATE INDEX FK8A749A657B7FDE43 ON alf_auth_ext_keys (id);
-CREATE INDEX FKFFC5468E74173FF4 ON alf_child_assoc (child_node_id);
-CREATE INDEX FKFFC5468E8E50E582 ON alf_child_assoc (parent_node_id);
-CREATE INDEX FK60EFB626B9553F6C ON alf_node (acl_id);
-CREATE INDEX FK60EFB626D24ADD25 ON alf_node (protocol, identifier);
-CREATE INDEX FK7D4CF8EC7F2C8017 ON alf_node_properties (node_id);
-CREATE INDEX FKD654E027F2C8017 ON alf_node_aspects (node_id);
-CREATE INDEX FKE1A550BCB69C43F3 ON alf_node_assoc (source_node_id);
-CREATE INDEX FKE1A550BCA8FC7769 ON alf_node_assoc (target_node_id);
-CREATE INDEX FK71C2002B7F2C8017 ON alf_node_status (node_id);
-CREATE INDEX FKBD4FF53D22DBA5BA ON alf_store (root_node_id);
-
---
--- Transaction tables
---
-CREATE INDEX FK71C2002B9E57C13D ON alf_node_status (transaction_id);
-CREATE INDEX FKB8761A3A9AE340B7 ON alf_transaction (server_id);
-
---
--- New audit tables
---
-CREATE INDEX FKEAD1817484342E39 ON alf_audit_fact (audit_date_id);
-CREATE INDEX FKEAD18174A0F9B8D9 ON alf_audit_fact (audit_source_id);
-CREATE INDEX FKEAD18174F524CFD7 ON alf_audit_fact (audit_conf_id);
-
---
--- Record script finish
---
-delete from alf_applied_patch where id = 'patch.db-V1.4-PostgresFKIndexes';
-insert into alf_applied_patch
- (id, description, fixes_from_schema, fixes_to_schema, applied_to_schema, target_schema, applied_on_date, applied_to_server, was_executed, succeeded, report)
- values
- (
- 'patch.db-V1.4-PostgresFKIndexes', 'Manually execute script AlfrescoSchemaUpdate-1.4-PostgresFKIndexes.sql',
- 21, 24, -1, 25, null, 'UNKOWN', TRUE, TRUE, 'Script completed'
- );
\ No newline at end of file
diff --git a/config/alfresco/dbscripts/upgrade/2.0/org.hibernate.dialect.Dialect/AlfrescoSchemaUpdate-2.0-AVMFKIndexes.sql b/config/alfresco/dbscripts/upgrade/2.0/org.hibernate.dialect.Dialect/AlfrescoSchemaUpdate-2.0-AVMFKIndexes.sql
deleted file mode 100644
index b6a5946b5b..0000000000
--- a/config/alfresco/dbscripts/upgrade/2.0/org.hibernate.dialect.Dialect/AlfrescoSchemaUpdate-2.0-AVMFKIndexes.sql
+++ /dev/null
@@ -1,35 +0,0 @@
---
--- Title: AVM Foreign Key indexes
--- Database: Generic
--- Since: V2.0 Schema 38
--- Author: Derek Hulley
---
--- Please contact support@alfresco.com if you need assistance with the upgrade.
---
-
-CREATE INDEX fk_avm_asp_node ON avm_aspects (node_id);
-CREATE INDEX fk_avm_ce_child ON avm_child_entries (child_id);
-CREATE INDEX fk_avm_ce_parent ON avm_child_entries (parent_id);
-CREATE INDEX fk_avm_hl_desc ON avm_history_links (descendent);
-CREATE INDEX fk_avm_hl_ancestor ON avm_history_links (ancestor);
-CREATE INDEX fk_avm_ml_from ON avm_merge_links (mfrom);
-CREATE INDEX fk_avm_ml_to ON avm_merge_links (mto);
-CREATE INDEX fk_avm_np_node ON avm_node_properties (node_id);
-CREATE INDEX fk_avm_n_acl ON avm_nodes (acl_id);
-CREATE INDEX fk_avm_n_store ON avm_nodes (store_new_id);
-CREATE INDEX fk_avm_sp_store ON avm_store_properties (avm_store_id);
-CREATE INDEX fk_avm_s_root ON avm_stores (current_root_id);
-CREATE INDEX fk_avm_vr_store ON avm_version_roots (avm_store_id);
-CREATE INDEX fk_avm_vr_root ON avm_version_roots (root_id);
-
---
--- Record script finish
---
-DELETE FROM alf_applied_patch WHERE id = 'patch.db-V2.0-AVMFKIndexes';
-INSERT INTO alf_applied_patch
- (id, description, fixes_from_schema, fixes_to_schema, applied_to_schema, target_schema, applied_on_date, applied_to_server, was_executed, succeeded, report)
- VALUES
- (
- 'patch.db-V2.0-AVMFKIndexes', 'Manually executed script upgrade V2.0: AVM Foreign Key Indexes',
- 0, 37, -1, 38, null, 'UNKOWN', 1, 1, 'Script completed'
- );
\ No newline at end of file
diff --git a/config/alfresco/dbscripts/upgrade/2.0/org.hibernate.dialect.Dialect/AlfrescoSchemaUpdate-2.0-ExplicitIndexes.sql b/config/alfresco/dbscripts/upgrade/2.0/org.hibernate.dialect.Dialect/AlfrescoSchemaUpdate-2.0-ExplicitIndexes.sql
deleted file mode 100644
index 9911294d56..0000000000
--- a/config/alfresco/dbscripts/upgrade/2.0/org.hibernate.dialect.Dialect/AlfrescoSchemaUpdate-2.0-ExplicitIndexes.sql
+++ /dev/null
@@ -1,60 +0,0 @@
---
--- Title: Explicit indexes
--- Database: Generic
--- Since: V2.0 Schema 38
--- Author: Derek Hulley
---
--- Please contact support@alfresco.com if you need assistance with the upgrade.
---
--- None of the Hibernate dialects will generate statements for explicit indexes
--- when creating new tables for an existing database. We need to check that the
--- indexes for the AUDIT, JBPM and AVM tables are present.
---
--- This script must be executed after Hibernate-generated scripts have been executed.
--- Where the updates are being applied long after the tables may have been created,
--- the index creation statements are optional. The the select statements ensure that
--- the script is only executed once the appropriate tables have been created.
---
-
--- JBPM tables
-SELECT COUNT(*) FROM JBPM_POOLEDACTOR;
-CREATE INDEX IDX_PLDACTR_ACTID ON JBPM_POOLEDACTOR (ACTORID_);(optional)
-SELECT COUNT(*) FROM JBPM_TASKINSTANCE;
-CREATE INDEX IDX_TASK_ACTORID ON JBPM_TASKINSTANCE (ACTORID_);(optional)
-
--- Audit tables
-SELECT COUNT(*) FROM alf_audit_date;
-CREATE INDEX adt_q_idx ON alf_audit_date (quarter);(optional)
-CREATE INDEX adt_dow_idx ON alf_audit_date (day_of_week);(optional)
-CREATE INDEX adt_date_idx ON alf_audit_date (date_only);(optional)
-CREATE INDEX adt_y_idx ON alf_audit_date (year);(optional)
-CREATE INDEX adt_hy_idx ON alf_audit_date (halfYear);(optional)
-CREATE INDEX adt_wom_idx ON alf_audit_date (week_of_month);(optional)
-CREATE INDEX adt_dom_idx ON alf_audit_date (day_of_month);(optional)
-CREATE INDEX adt_m_idx ON alf_audit_date (month);(optional)
-CREATE INDEX adt_doy_idx ON alf_audit_date (day_of_year);(optional)
-CREATE INDEX adt_woy_idx ON alf_audit_date (week_of_year);(optional)
-SELECT COUNT(*) FROM alf_audit_fact;
-CREATE INDEX adt_user_idx ON alf_audit_fact (user_id);(optional)
-CREATE INDEX adt_store_idx ON alf_audit_fact (store_protocol, store_id, node_uuid);(optional)
-SELECT COUNT(*) FROM alf_audit_source;
-CREATE INDEX app_source_met_idx ON alf_audit_source (method);(optional)
-CREATE INDEX app_source_app_idx ON alf_audit_source (application);(optional)
-CREATE INDEX app_source_ser_idx ON alf_audit_source (service);(optional)
-
--- AVM tables: These are new so are not optional
-CREATE INDEX idx_avm_np_name ON avm_node_properties (qname);
-CREATE INDEX idx_avm_sp_name ON avm_store_properties (qname);
-CREATE INDEX idx_avm_vr_version ON avm_version_roots (version_id);
-
---
--- Record script finish
---
-DELETE FROM alf_applied_patch WHERE id = 'patch.db-V2.0-ExplicitIndexes';
-INSERT INTO alf_applied_patch
- (id, description, fixes_from_schema, fixes_to_schema, applied_to_schema, target_schema, applied_on_date, applied_to_server, was_executed, succeeded, report)
- VALUES
- (
- 'patch.db-V2.0-ExplicitIndexes', 'Manually executed script upgrade V2.0: Explicit Indexes',
- 0, 37, -1, 38, null, 'UNKOWN', 1, 1, 'Script completed'
- );
\ No newline at end of file
diff --git a/config/alfresco/dbscripts/upgrade/2.0/org.hibernate.dialect.MySQLInnoDBDialect/AlfrescoSchemaUpdate-2.0-AVMFKIndexes.sql b/config/alfresco/dbscripts/upgrade/2.0/org.hibernate.dialect.MySQLInnoDBDialect/AlfrescoSchemaUpdate-2.0-AVMFKIndexes.sql
deleted file mode 100644
index 6a6246717f..0000000000
--- a/config/alfresco/dbscripts/upgrade/2.0/org.hibernate.dialect.MySQLInnoDBDialect/AlfrescoSchemaUpdate-2.0-AVMFKIndexes.sql
+++ /dev/null
@@ -1,22 +0,0 @@
---
--- Title: AVM Foreign Key indexes
--- Database: MySQL
--- Since: V2.0 Schema 38
--- Author: Derek Hulley
---
--- Please contact support@alfresco.com if you need assistance with the upgrade.
---
-
--- The MySQL dialects apply the FK indexes by default
-
---
--- Record script finish
---
-DELETE FROM alf_applied_patch WHERE id = 'patch.db-V2.0-AVMFKIndexes';
-INSERT INTO alf_applied_patch
- (id, description, fixes_from_schema, fixes_to_schema, applied_to_schema, target_schema, applied_on_date, applied_to_server, was_executed, succeeded, report)
- VALUES
- (
- 'patch.db-V2.0-AVMFKIndexes', 'Manually executed script upgrade V2.0: AVM Foreign Key Indexes',
- 0, 37, -1, 38, now(), 'UNKOWN', 1, 1, 'Script completed'
- );
\ No newline at end of file
diff --git a/config/alfresco/dbscripts/upgrade/2.0/org.hibernate.dialect.PostgreSQLDialect/AlfrescoSchemaUpdate-2.0-AVMFKIndexes.sql b/config/alfresco/dbscripts/upgrade/2.0/org.hibernate.dialect.PostgreSQLDialect/AlfrescoSchemaUpdate-2.0-AVMFKIndexes.sql
deleted file mode 100644
index 3985a05789..0000000000
--- a/config/alfresco/dbscripts/upgrade/2.0/org.hibernate.dialect.PostgreSQLDialect/AlfrescoSchemaUpdate-2.0-AVMFKIndexes.sql
+++ /dev/null
@@ -1,35 +0,0 @@
---
--- Title: AVM Foreign Key indexes
--- Database: PostgreSQL
--- Since: V2.0 Schema 38
--- Author: Derek Hulley
---
--- Please contact support@alfresco.com if you need assistance with the upgrade.
---
-
-CREATE INDEX fk_avm_asp_node ON avm_aspects (node_id);
-CREATE INDEX fk_avm_ce_child ON avm_child_entries (child_id);
-CREATE INDEX fk_avm_ce_parent ON avm_child_entries (parent_id);
-CREATE INDEX fk_avm_hl_desc ON avm_history_links (descendent);
-CREATE INDEX fk_avm_hl_ancestor ON avm_history_links (ancestor);
-CREATE INDEX fk_avm_ml_from ON avm_merge_links (mfrom);
-CREATE INDEX fk_avm_ml_to ON avm_merge_links (mto);
-CREATE INDEX fk_avm_np_node ON avm_node_properties (node_id);
-CREATE INDEX fk_avm_n_acl ON avm_nodes (acl_id);
-CREATE INDEX fk_avm_n_store ON avm_nodes (store_new_id);
-CREATE INDEX fk_avm_sp_store ON avm_store_properties (avm_store_id);
-CREATE INDEX fk_avm_s_root ON avm_stores (current_root_id);
-CREATE INDEX fk_avm_vr_store ON avm_version_roots (avm_store_id);
-CREATE INDEX fk_avm_vr_root ON avm_version_roots (root_id);
-
---
--- Record script finish
---
-DELETE FROM alf_applied_patch WHERE id = 'patch.db-V2.0-AVMFKIndexes';
-INSERT INTO alf_applied_patch
- (id, description, fixes_from_schema, fixes_to_schema, applied_to_schema, target_schema, applied_on_date, applied_to_server, was_executed, succeeded, report)
- VALUES
- (
- 'patch.db-V2.0-AVMFKIndexes', 'Manually executed script upgrade V2.0: AVM Foreign Key Indexes',
- 0, 37, -1, 38, null, 'UNKOWN', TRUE, TRUE, 'Script completed'
- );
\ No newline at end of file
diff --git a/config/alfresco/dbscripts/upgrade/2.0/org.hibernate.dialect.PostgreSQLDialect/AlfrescoSchemaUpdate-2.0-ExplicitIndexes.sql b/config/alfresco/dbscripts/upgrade/2.0/org.hibernate.dialect.PostgreSQLDialect/AlfrescoSchemaUpdate-2.0-ExplicitIndexes.sql
deleted file mode 100644
index c610b0f361..0000000000
--- a/config/alfresco/dbscripts/upgrade/2.0/org.hibernate.dialect.PostgreSQLDialect/AlfrescoSchemaUpdate-2.0-ExplicitIndexes.sql
+++ /dev/null
@@ -1,66 +0,0 @@
---
--- Title: Explicit indexes
--- Database: PostgreSQL
--- Since: V2.0 Schema 38
--- Author: Derek Hulley
---
--- Please contact support@alfresco.com if you need assistance with the upgrade.
---
--- PostgreSQL cannot handle optional statements (statements that may fail) in the
--- transaction.
---
-
--- JBPM tables
-DROP INDEX IF EXISTS IDX_PLDACTR_ACTID;
-CREATE INDEX IDX_PLDACTR_ACTID ON JBPM_POOLEDACTOR (ACTORID_);
-DROP INDEX IF EXISTS IDX_TASK_ACTORID;
-CREATE INDEX IDX_TASK_ACTORID ON JBPM_TASKINSTANCE (ACTORID_);
-
--- Audit tables
-DROP INDEX IF EXISTS adt_q_idx;
-CREATE INDEX adt_q_idx ON alf_audit_date (quarter);
-DROP INDEX IF EXISTS adt_dow_idx;
-CREATE INDEX adt_dow_idx ON alf_audit_date (day_of_week);
-DROP INDEX IF EXISTS adt_date_idx;
-CREATE INDEX adt_date_idx ON alf_audit_date (date_only);
-DROP INDEX IF EXISTS adt_y_idx;
-CREATE INDEX adt_y_idx ON alf_audit_date (year);
-DROP INDEX IF EXISTS adt_hy_idx;
-CREATE INDEX adt_hy_idx ON alf_audit_date (halfYear);
-DROP INDEX IF EXISTS adt_wom_idx;
-CREATE INDEX adt_wom_idx ON alf_audit_date (week_of_month);
-DROP INDEX IF EXISTS adt_dom_idx;
-CREATE INDEX adt_dom_idx ON alf_audit_date (day_of_month);
-DROP INDEX IF EXISTS adt_m_idx;
-CREATE INDEX adt_m_idx ON alf_audit_date (month);
-DROP INDEX IF EXISTS adt_doy_idx;
-CREATE INDEX adt_doy_idx ON alf_audit_date (day_of_year);
-DROP INDEX IF EXISTS adt_woy_idx;
-CREATE INDEX adt_woy_idx ON alf_audit_date (week_of_year);
-DROP INDEX IF EXISTS adt_user_idx;
-CREATE INDEX adt_user_idx ON alf_audit_fact (user_id);
-DROP INDEX IF EXISTS adt_store_idx;
-CREATE INDEX adt_store_idx ON alf_audit_fact (store_protocol, store_id, node_uuid);
-DROP INDEX IF EXISTS app_source_met_idx;
-CREATE INDEX app_source_met_idx ON alf_audit_source (method);
-DROP INDEX IF EXISTS app_source_app_idx;
-CREATE INDEX app_source_app_idx ON alf_audit_source (application);
-DROP INDEX IF EXISTS app_source_ser_idx;
-CREATE INDEX app_source_ser_idx ON alf_audit_source (service);
-
--- AVM tables: These are new so are not optional
-CREATE INDEX idx_avm_np_name ON avm_node_properties (qname);
-CREATE INDEX idx_avm_sp_name ON avm_store_properties (qname);
-CREATE INDEX idx_avm_vr_version ON avm_version_roots (version_id);
-
---
--- Record script finish
---
-DELETE FROM alf_applied_patch WHERE id = 'patch.db-V2.0-ExplicitIndexes';
-INSERT INTO alf_applied_patch
- (id, description, fixes_from_schema, fixes_to_schema, applied_to_schema, target_schema, applied_on_date, applied_to_server, was_executed, succeeded, report)
- VALUES
- (
- 'patch.db-V2.0-ExplicitIndexes', 'Manually executed script upgrade V2.0: Explicit Indexes',
- 0, 37, -1, 38, null, 'UNKOWN', TRUE, TRUE, 'Script completed'
- );
\ No newline at end of file
diff --git a/config/alfresco/dbscripts/upgrade/2.1/org.hibernate.dialect.Dialect/AlfrescoSchemaUpdate-2.1-ExplicitIndexes.sql b/config/alfresco/dbscripts/upgrade/2.1/org.hibernate.dialect.Dialect/AlfrescoSchemaUpdate-2.1-ExplicitIndexes.sql
new file mode 100644
index 0000000000..ea97c3ddd8
--- /dev/null
+++ b/config/alfresco/dbscripts/upgrade/2.1/org.hibernate.dialect.Dialect/AlfrescoSchemaUpdate-2.1-ExplicitIndexes.sql
@@ -0,0 +1,113 @@
+--
+-- Title: Ensure that all expicit indexes are present
+-- Database: Generic
+-- Since: V2.1 Schema 64
+-- Author: Derek Hulley
+--
+-- Please contact support@alfresco.com if you need assistance with the upgrade.
+--
+-- During an upgrade, explicit indexes are not added. This script ensures that
+-- all explicit indexes that would be available after a clean boot are also
+-- available for an upgrade.
+
+-- JBPM
+SELECT COUNT(*) FROM JBPM_ACTION;
+CREATE INDEX IDX_ACTION_EVENT ON JBPM_ACTION (EVENT_);(optional)
+CREATE INDEX IDX_ACTION_ACTNDL ON JBPM_ACTION (ACTIONDELEGATION_);(optional)
+CREATE INDEX IDX_ACTION_PROCDF ON JBPM_ACTION (PROCESSDEFINITION_);(optional)
+SELECT COUNT(*) FROM JBPM_COMMENT;
+CREATE INDEX IDX_COMMENT_TOKEN ON JBPM_COMMENT (TOKEN_);(optional)
+CREATE INDEX IDX_COMMENT_TSK ON JBPM_COMMENT (TASKINSTANCE_);(optional)
+SELECT COUNT(*) FROM JBPM_DELEGATION;
+CREATE INDEX IDX_DELEG_PRCD ON JBPM_DELEGATION (PROCESSDEFINITION_);(optional)
+SELECT COUNT(*) FROM JBPM_JOB;
+CREATE INDEX IDX_JOB_TSKINST ON JBPM_JOB (TASKINSTANCE_);(optional)
+CREATE INDEX IDX_JOB_PRINST ON JBPM_JOB (PROCESSINSTANCE_);(optional)
+CREATE INDEX IDX_JOB_TOKEN ON JBPM_JOB (TOKEN_);(optional)
+SELECT COUNT(*) FROM JBPM_MODULEDEFINITION;
+CREATE INDEX IDX_MODDEF_PROCDF ON JBPM_MODULEDEFINITION (PROCESSDEFINITION_);(optional)
+SELECT COUNT(*) FROM JBPM_MODULEINSTANCE;
+CREATE INDEX IDX_MODINST_PRINST ON JBPM_MODULEINSTANCE (PROCESSINSTANCE_);(optional)
+SELECT COUNT(*) FROM JBPM_NODE;
+CREATE INDEX IDX_PSTATE_SBPRCDEF ON JBPM_NODE (SUBPROCESSDEFINITION_);(optional)
+CREATE INDEX IDX_NODE_SUPRSTATE ON JBPM_NODE (SUPERSTATE_);(optional)
+CREATE INDEX IDX_NODE_PROCDEF ON JBPM_NODE (PROCESSDEFINITION_);(optional)
+CREATE INDEX IDX_NODE_ACTION ON JBPM_NODE (ACTION_);(optional)
+SELECT COUNT(*) FROM JBPM_POOLEDACTOR;
+CREATE INDEX IDX_PLDACTR_ACTID ON JBPM_POOLEDACTOR (ACTORID_);(optional)
+CREATE INDEX IDX_TSKINST_SWLANE ON JBPM_POOLEDACTOR (SWIMLANEINSTANCE_);(optional)
+SELECT COUNT(*) FROM JBPM_PROCESSDEFINITION;
+CREATE INDEX IDX_PROCDEF_STRTST ON JBPM_PROCESSDEFINITION (STARTSTATE_);(optional)
+SELECT COUNT(*) FROM JBPM_PROCESSINSTANCE;
+CREATE INDEX IDX_PROCIN_ROOTTK ON JBPM_PROCESSINSTANCE (ROOTTOKEN_);(optional)
+CREATE INDEX IDX_PROCIN_SPROCTK ON JBPM_PROCESSINSTANCE (SUPERPROCESSTOKEN_);(optional)
+CREATE INDEX IDX_PROCIN_PROCDEF ON JBPM_PROCESSINSTANCE (PROCESSDEFINITION_);(optional)
+SELECT COUNT(*) FROM JBPM_RUNTIMEACTION;
+CREATE INDEX IDX_RTACTN_PRCINST ON JBPM_RUNTIMEACTION (PROCESSINSTANCE_);(optional)
+CREATE INDEX IDX_RTACTN_ACTION ON JBPM_RUNTIMEACTION (ACTION_);(optional)
+SELECT COUNT(*) FROM JBPM_SWIMLANEINSTANCE;
+CREATE INDEX IDX_SWIMLINST_SL ON JBPM_SWIMLANEINSTANCE (SWIMLANE_);(optional)
+SELECT COUNT(*) FROM JBPM_TASK;
+CREATE INDEX IDX_TASK_TSKNODE ON JBPM_TASK (TASKNODE_);(optional)
+CREATE INDEX IDX_TASK_PROCDEF ON JBPM_TASK (PROCESSDEFINITION_);(optional)
+CREATE INDEX IDX_TASK_TASKMGTDF ON JBPM_TASK (TASKMGMTDEFINITION_);(optional)
+SELECT COUNT(*) FROM JBPM_TASKINSTANCE;
+CREATE INDEX IDX_TASKINST_TOKN ON JBPM_TASKINSTANCE (TOKEN_);(optional)
+CREATE INDEX IDX_TASKINST_TSK ON JBPM_TASKINSTANCE (TASK_, PROCINST_);(optional)
+CREATE INDEX IDX_TSKINST_TMINST ON JBPM_TASKINSTANCE (TASKMGMTINSTANCE_);(optional)
+CREATE INDEX IDX_TSKINST_SLINST ON JBPM_TASKINSTANCE (SWIMLANINSTANCE_);(optional)
+CREATE INDEX IDX_TASK_ACTORID ON JBPM_TASKINSTANCE (ACTORID_);(optional)
+SELECT COUNT(*) FROM JBPM_TOKEN;
+CREATE INDEX IDX_TOKEN_PROCIN ON JBPM_TOKEN (PROCESSINSTANCE_);(optional)
+CREATE INDEX IDX_TOKEN_SUBPI ON JBPM_TOKEN (SUBPROCESSINSTANCE_);(optional)
+CREATE INDEX IDX_TOKEN_NODE ON JBPM_TOKEN (NODE_);(optional)
+CREATE INDEX IDX_TOKEN_PARENT ON JBPM_TOKEN (PARENT_);(optional)
+SELECT COUNT(*) FROM JBPM_TOKENVARIABLEMAP;
+CREATE INDEX IDX_TKVARMAP_CTXT ON JBPM_TOKENVARIABLEMAP (CONTEXTINSTANCE_);(optional)
+CREATE INDEX IDX_TKVVARMP_TOKEN ON JBPM_TOKENVARIABLEMAP (TOKEN_);(optional)
+SELECT COUNT(*) FROM JBPM_TRANSITION;
+CREATE INDEX IDX_TRANSIT_TO ON JBPM_TRANSITION (TO_);(optional)
+CREATE INDEX IDX_TRANSIT_FROM ON JBPM_TRANSITION (FROM_);(optional)
+CREATE INDEX IDX_TRANS_PROCDEF ON JBPM_TRANSITION (PROCESSDEFINITION_);(optional)
+SELECT COUNT(*) FROM JBPM_VARIABLEINSTANCE;
+CREATE INDEX IDX_VARINST_TKVARMP ON JBPM_VARIABLEINSTANCE (TOKENVARIABLEMAP_);(optional)
+CREATE INDEX IDX_VARINST_PRCINS ON JBPM_VARIABLEINSTANCE (PROCESSINSTANCE_);(optional)
+CREATE INDEX IDX_VARINST_TK ON JBPM_VARIABLEINSTANCE (TOKEN_);(optional)
+
+SELECT COUNT(*) FROM alf_audit_date;
+CREATE INDEX adt_q_idx ON alf_audit_date (quarter);(optional)
+CREATE INDEX adt_dow_idx ON alf_audit_date (day_of_week);(optional)
+CREATE INDEX adt_date_idx ON alf_audit_date (date_only);(optional)
+CREATE INDEX adt_y_idx ON alf_audit_date (year);(optional)
+CREATE INDEX adt_hy_idx ON alf_audit_date (halfYear);(optional)
+CREATE INDEX adt_wom_idx ON alf_audit_date (week_of_month);(optional)
+CREATE INDEX adt_dom_idx ON alf_audit_date (day_of_month);(optional)
+CREATE INDEX adt_m_idx ON alf_audit_date (month);(optional)
+CREATE INDEX adt_doy_idx ON alf_audit_date (day_of_year);(optional)
+CREATE INDEX adt_woy_idx ON alf_audit_date (week_of_year);(optional)
+SELECT COUNT(*) FROM alf_audit_fact;
+CREATE INDEX adt_user_idx ON alf_audit_fact (user_id);(optional)
+CREATE INDEX adt_store_idx ON alf_audit_fact (store_protocol, store_id, node_uuid);(optional)
+SELECT COUNT(*) FROM alf_audit_source;
+CREATE INDEX app_source_met_idx ON alf_audit_source (method);(optional)
+CREATE INDEX app_source_app_idx ON alf_audit_source (application);(optional)
+CREATE INDEX app_source_ser_idx ON alf_audit_source (service);(optional)
+
+SELECT COUNT(*) FROM avm_node_properties;
+CREATE INDEX idx_avm_np_name ON avm_node_properties (qname);(optional)
+SELECT COUNT(*) FROM avm_store_properties;
+CREATE INDEX idx_avm_sp_name ON avm_store_properties (qname);(optional)
+SELECT COUNT(*) FROM avm_version_roots;
+CREATE INDEX idx_avm_vr_version ON avm_version_roots (version_id);(optional)
+
+--
+-- Record script finish
+--
+DELETE FROM alf_applied_patch WHERE id = 'patch.db-V2.1-ExplicitIndexes';
+INSERT INTO alf_applied_patch
+ (id, description, fixes_from_schema, fixes_to_schema, applied_to_schema, target_schema, applied_on_date, applied_to_server, was_executed, succeeded, report)
+ VALUES
+ (
+ 'patch.db-V2.1-ExplicitIndexes', 'Manually executed script upgrade V2.1: Ensure existence of V2.1 Explicit indexes',
+ 0, 63, -1, 64, null, 'UNKOWN', 1, 1, 'Script completed'
+ );
\ No newline at end of file
diff --git a/config/alfresco/dbscripts/upgrade/2.1/org.hibernate.dialect.Dialect/AlfrescoSchemaUpdate-2.1-FKIndexes.sql b/config/alfresco/dbscripts/upgrade/2.1/org.hibernate.dialect.Dialect/AlfrescoSchemaUpdate-2.1-FKIndexes.sql
new file mode 100644
index 0000000000..51a37927d5
--- /dev/null
+++ b/config/alfresco/dbscripts/upgrade/2.1/org.hibernate.dialect.Dialect/AlfrescoSchemaUpdate-2.1-FKIndexes.sql
@@ -0,0 +1,115 @@
+--
+-- Title: Ensure that all Foreign Key indexes are present
+-- Database: Generic
+-- Since: V2.1 Schema 64
+-- Author: Derek Hulley
+--
+-- Please contact support@alfresco.com if you need assistance with the upgrade.
+--
+-- All dialects, with the exception of MySQL, will not have FK-related indexes
+-- automatically generated by Hibernate. Quite a few indexes here will be present
+-- in the database already, but the list depends on the particular upgrade path
+-- taken. In order to reduce the number of scripts that need to be run to cater for
+-- these diverse scenarios, this script just attempts to create each and every
+-- index that would be created for a new install. The statements are optional, apart
+-- from the control statements to check for the presence of the required tables.
+
+-- JBPM
+-- JBPM tables have explicit indexes where required. Adding FK indexes here
+-- leads to duplication, and on MySQL, this is exactly what happens.
+
+-- Repository
+SELECT COUNT(*) FROM alf_access_control_entry;
+CREATE INDEX FKFFF41F9960601995 ON alf_access_control_entry (permission_id);(optional)
+CREATE INDEX FKFFF41F99B25A50BF ON alf_access_control_entry (authority_id);(optional)
+CREATE INDEX FKFFF41F99B9553F6C ON alf_access_control_entry (acl_id);(optional)
+SELECT COUNT(*) FROM alf_auth_ext_keys;
+CREATE INDEX FK8A749A657B7FDE43 ON alf_auth_ext_keys (id);(optional)
+SELECT COUNT(*) FROM alf_child_assoc;
+CREATE INDEX FKFFC5468E74173FF4 ON alf_child_assoc (child_node_id);(optional)
+CREATE INDEX FKFFC5468E8E50E582 ON alf_child_assoc (parent_node_id);(optional)
+SELECT COUNT(*) FROM alf_node;
+CREATE INDEX FK60EFB626B9553F6C ON alf_node (acl_id);(optional)
+CREATE INDEX FK60EFB626D24ADD25 ON alf_node (protocol, identifier);(optional)
+SELECT COUNT(*) FROM alf_node_properties;
+CREATE INDEX FK7D4CF8EC7F2C8017 ON alf_node_properties (node_id);(optional)
+CREATE INDEX FK7D4CF8EC40E780DC ON alf_node_properties (attribute_value);(optional)
+SELECT COUNT(*) FROM alf_node_aspects;
+CREATE INDEX FKD654E027F2C8017 ON alf_node_aspects (node_id);(optional)
+SELECT COUNT(*) FROM alf_node_assoc;
+CREATE INDEX FKE1A550BCB69C43F3 ON alf_node_assoc (source_node_id);(optional)
+CREATE INDEX FKE1A550BCA8FC7769 ON alf_node_assoc (target_node_id);(optional)
+SELECT COUNT(*) FROM alf_node_status;
+CREATE INDEX FK71C2002B7F2C8017 ON alf_node_status (node_id);(optional)
+SELECT COUNT(*) FROM alf_store;
+CREATE INDEX FKBD4FF53D22DBA5BA ON alf_store (root_node_id);(optional)
+
+--
+-- Transaction tables
+--
+CREATE INDEX FK71C2002B9E57C13D ON alf_node_status (transaction_id);(optional)
+SELECT COUNT(*) FROM alf_transaction;
+CREATE INDEX FKB8761A3A9AE340B7 ON alf_transaction (server_id);(optional)
+
+--
+-- Audit tables
+--
+SELECT COUNT(*) FROM alf_audit_fact;
+CREATE INDEX FKEAD1817484342E39 ON alf_audit_fact (audit_date_id);(optional)
+CREATE INDEX FKEAD18174A0F9B8D9 ON alf_audit_fact (audit_source_id);(optional)
+CREATE INDEX FKEAD18174F524CFD7 ON alf_audit_fact (audit_conf_id);(optional)
+
+--
+-- Attribute tables
+--
+SELECT COUNT(*) FROM alf_attributes;
+CREATE INDEX fk_attr_n_acl ON alf_attributes (acl_id);(optional)
+SELECT COUNT(*) FROM alf_global_attributes;
+CREATE INDEX FK64D0B9CF69B9F16A ON alf_global_attributes (attribute);(optional)
+SELECT COUNT(*) FROM alf_list_attribute_entries;
+CREATE INDEX FKC7D52FB0ACD8822C ON alf_list_attribute_entries (list_id);(optional)
+CREATE INDEX FKC7D52FB02C5AB86C ON alf_list_attribute_entries (attribute_id);(optional)
+SELECT COUNT(*) FROM alf_map_attribute_entries;
+CREATE INDEX FK335CAE262C5AB86C ON alf_map_attribute_entries (attribute_id);(optional)
+CREATE INDEX FK335CAE26AEAC208C ON alf_map_attribute_entries (map_id);(optional)
+
+-- AVM
+SELECT COUNT(*) FROM avm_aspects;
+CREATE INDEX fk_avm_asp_node ON avm_aspects (node_id);(optional)
+SELECT COUNT(*) FROM avm_aspects_new;
+CREATE INDEX FKD3FD9F95EDCD4A96 ON avm_aspects_new (id);(optional)
+SELECT COUNT(*) FROM avm_child_entries;
+CREATE INDEX fk_avm_ce_child ON avm_child_entries (child_id);(optional)
+CREATE INDEX fk_avm_ce_parent ON avm_child_entries (parent_id);(optional)
+SELECT COUNT(*) FROM avm_history_links;
+CREATE INDEX fk_avm_hl_desc ON avm_history_links (descendent);(optional)
+CREATE INDEX fk_avm_hl_ancestor ON avm_history_links (ancestor);(optional)
+SELECT COUNT(*) FROM avm_merge_links;
+CREATE INDEX fk_avm_ml_from ON avm_merge_links (mfrom);(optional)
+CREATE INDEX fk_avm_ml_to ON avm_merge_links (mto);(optional)
+SELECT COUNT(*) FROM avm_node_properties_new;
+CREATE INDEX FK44A37C8A6BD529F3 ON avm_node_properties_new (node_id);(optional)
+CREATE INDEX fk_avm_np_node ON avm_node_properties (node_id);(optional)
+SELECT COUNT(*) FROM avm_nodes;
+CREATE INDEX fk_avm_n_acl ON avm_nodes (acl_id);(optional)
+CREATE INDEX fk_avm_n_store ON avm_nodes (store_new_id);(optional)
+SELECT COUNT(*) FROM avm_store_properties;
+CREATE INDEX fk_avm_sp_store ON avm_store_properties (avm_store_id);(optional)
+SELECT COUNT(*) FROM avm_stores;
+CREATE INDEX fk_avm_s_root ON avm_stores (current_root_id);(optional)
+SELECT COUNT(*) FROM avm_version_roots;
+CREATE INDEX fk_avm_vr_store ON avm_version_roots (avm_store_id);(optional)
+CREATE INDEX fk_avm_vr_root ON avm_version_roots (root_id);(optional)
+
+
+--
+-- Record script finish
+--
+DELETE FROM alf_applied_patch WHERE id = 'patch.db-V2.1-FKIndexes';
+INSERT INTO alf_applied_patch
+ (id, description, fixes_from_schema, fixes_to_schema, applied_to_schema, target_schema, applied_on_date, applied_to_server, was_executed, succeeded, report)
+ VALUES
+ (
+ 'patch.db-V2.1-FKIndexes', 'Manually executed script upgrade V2.1: Ensure existence of V2.1 FK indexes',
+ 0, 63, -1, 64, null, 'UNKOWN', 1, 1, 'Script completed'
+ );
\ No newline at end of file
diff --git a/config/alfresco/dbscripts/upgrade/2.1/org.hibernate.dialect.Dialect/AlfrescoSchemaUpdate-2.1-NotNullColumns.sql b/config/alfresco/dbscripts/upgrade/2.1/org.hibernate.dialect.Dialect/AlfrescoSchemaUpdate-2.1-NotNullColumns.sql
new file mode 100644
index 0000000000..031aa1132c
--- /dev/null
+++ b/config/alfresco/dbscripts/upgrade/2.1/org.hibernate.dialect.Dialect/AlfrescoSchemaUpdate-2.1-NotNullColumns.sql
@@ -0,0 +1,21 @@
+--
+-- Title: Add text columns that allow null
+-- Database: Generic
+-- Since: V2.1 Schema 64
+-- Author: Derek Hulley
+--
+-- Please contact support@alfresco.com if you need assistance with the upgrade.
+--
+-- This is a Sybase issue, so nothing is required here.
+
+--
+-- Record script finish
+--
+DELETE FROM alf_applied_patch WHERE id = 'patch.db-V2.1-NotNullColumns';
+INSERT INTO alf_applied_patch
+ (id, description, fixes_from_schema, fixes_to_schema, applied_to_schema, target_schema, applied_on_date, applied_to_server, was_executed, succeeded, report)
+ VALUES
+ (
+ 'patch.db-V2.1-NotNullColumns', 'Manually executed script upgrade V2.1: Add nullable columns',
+ 0, 63, -1, 64, null, 'UNKOWN', 1, 1, 'Script completed'
+ );
\ No newline at end of file
diff --git a/config/alfresco/dbscripts/upgrade/2.1/org.hibernate.dialect.Dialect/AlfrescoSchemaUpdate-2.1-VersionColumns.sql b/config/alfresco/dbscripts/upgrade/2.1/org.hibernate.dialect.Dialect/AlfrescoSchemaUpdate-2.1-VersionColumns.sql
index e4b0a3f472..a369bc6030 100644
--- a/config/alfresco/dbscripts/upgrade/2.1/org.hibernate.dialect.Dialect/AlfrescoSchemaUpdate-2.1-VersionColumns.sql
+++ b/config/alfresco/dbscripts/upgrade/2.1/org.hibernate.dialect.Dialect/AlfrescoSchemaUpdate-2.1-VersionColumns.sql
@@ -18,15 +18,16 @@ UPDATE alf_access_control_list SET version = 1 WHERE version IS NULL;
UPDATE alf_access_control_entry SET version = 1 WHERE version IS NULL;
UPDATE alf_permission SET version = 1 WHERE version IS NULL;
UPDATE alf_authority SET version = 1 WHERE version IS NULL;
+UPDATE alf_version_count SET version = 1 WHERE version IS NULL;
--
-- Record script finish
--
-DELETE FROM alf_applied_patch WHERE id = 'patch.db-V2.1-VersionColumns';
+DELETE FROM alf_applied_patch WHERE id = 'patch.db-V2.1-VersionColumns2';
INSERT INTO alf_applied_patch
(id, description, fixes_from_schema, fixes_to_schema, applied_to_schema, target_schema, applied_on_date, applied_to_server, was_executed, succeeded, report)
VALUES
(
- 'patch.db-V2.1-VersionColumns', 'Manually executed script upgrade V2.1: Created initial version number for ADM entities',
- 0, 53, -1, 54, null, 'UNKOWN', 1, 1, 'Script completed'
+ 'patch.db-V2.1-VersionColumns2', 'Manually executed script upgrade V2.1: Created initial version number for ADM entities',
+ 0, 63, -1, 64, null, 'UNKOWN', 1, 1, 'Script completed'
);
\ No newline at end of file
diff --git a/config/alfresco/dbscripts/upgrade/2.1/org.hibernate.dialect.MySQLInnoDBDialect/AlfrescoSchemaUpdate-2.1-FKIndexes.sql b/config/alfresco/dbscripts/upgrade/2.1/org.hibernate.dialect.MySQLInnoDBDialect/AlfrescoSchemaUpdate-2.1-FKIndexes.sql
new file mode 100644
index 0000000000..f8f12fc7b0
--- /dev/null
+++ b/config/alfresco/dbscripts/upgrade/2.1/org.hibernate.dialect.MySQLInnoDBDialect/AlfrescoSchemaUpdate-2.1-FKIndexes.sql
@@ -0,0 +1,24 @@
+--
+-- Title: Ensure that all Foreign Key indexes are present
+-- Database: MySQL InnoDB
+-- Since: V2.1 Schema 64
+-- Author: Derek Hulley
+--
+-- Please contact support@alfresco.com if you need assistance with the upgrade.
+--
+-- The MySQL InnoDB Dialect has special support for foreign keys.
+
+-- Remove pointless duplicated FK indexes
+ALTER TABLE alf_global_attributes DROP INDEX FK64D0B9CF69B9F16A;
+
+--
+-- Record script finish
+--
+DELETE FROM alf_applied_patch WHERE id = 'patch.db-V2.1-FKIndexes';
+INSERT INTO alf_applied_patch
+ (id, description, fixes_from_schema, fixes_to_schema, applied_to_schema, target_schema, applied_on_date, applied_to_server, was_executed, succeeded, report)
+ VALUES
+ (
+ 'patch.db-V2.1-FKIndexes', 'Manually executed script upgrade V2.1: Ensure existence of V2.1 FK indexes',
+ 0, 63, -1, 64, null, 'UNKOWN', 1, 1, 'Script completed'
+ );
\ No newline at end of file
diff --git a/config/alfresco/dbscripts/upgrade/2.1/org.hibernate.dialect.PostgreSQLDialect/AlfrescoSchemaUpdate-2.1-ExplicitIndexes.sql b/config/alfresco/dbscripts/upgrade/2.1/org.hibernate.dialect.PostgreSQLDialect/AlfrescoSchemaUpdate-2.1-ExplicitIndexes.sql
new file mode 100644
index 0000000000..4702c2a70e
--- /dev/null
+++ b/config/alfresco/dbscripts/upgrade/2.1/org.hibernate.dialect.PostgreSQLDialect/AlfrescoSchemaUpdate-2.1-ExplicitIndexes.sql
@@ -0,0 +1,113 @@
+--
+-- Title: Ensure that all expicit indexes are present
+-- Database: PostgreSQL
+-- Since: V2.1 Schema 64
+-- Author: Derek Hulley
+--
+-- Please contact support@alfresco.com if you need assistance with the upgrade.
+--
+-- During an upgrade, explicit indexes are not added. This script ensures that
+-- all explicit indexes that would be available after a clean boot are also
+-- available for an upgrade.
+
+-- JBPM
+SELECT COUNT(*) FROM JBPM_ACTION;
+CREATE INDEX IDX_ACTION_EVENT ON JBPM_ACTION (EVENT_);(optional)
+CREATE INDEX IDX_ACTION_ACTNDL ON JBPM_ACTION (ACTIONDELEGATION_);(optional)
+CREATE INDEX IDX_ACTION_PROCDF ON JBPM_ACTION (PROCESSDEFINITION_);(optional)
+SELECT COUNT(*) FROM JBPM_COMMENT;
+CREATE INDEX IDX_COMMENT_TOKEN ON JBPM_COMMENT (TOKEN_);(optional)
+CREATE INDEX IDX_COMMENT_TSK ON JBPM_COMMENT (TASKINSTANCE_);(optional)
+SELECT COUNT(*) FROM JBPM_DELEGATION;
+CREATE INDEX IDX_DELEG_PRCD ON JBPM_DELEGATION (PROCESSDEFINITION_);(optional)
+SELECT COUNT(*) FROM JBPM_JOB;
+CREATE INDEX IDX_JOB_TSKINST ON JBPM_JOB (TASKINSTANCE_);(optional)
+CREATE INDEX IDX_JOB_PRINST ON JBPM_JOB (PROCESSINSTANCE_);(optional)
+CREATE INDEX IDX_JOB_TOKEN ON JBPM_JOB (TOKEN_);(optional)
+SELECT COUNT(*) FROM JBPM_MODULEDEFINITION;
+CREATE INDEX IDX_MODDEF_PROCDF ON JBPM_MODULEDEFINITION (PROCESSDEFINITION_);(optional)
+SELECT COUNT(*) FROM JBPM_MODULEINSTANCE;
+CREATE INDEX IDX_MODINST_PRINST ON JBPM_MODULEINSTANCE (PROCESSINSTANCE_);(optional)
+SELECT COUNT(*) FROM JBPM_NODE;
+CREATE INDEX IDX_PSTATE_SBPRCDEF ON JBPM_NODE (SUBPROCESSDEFINITION_);(optional)
+CREATE INDEX IDX_NODE_SUPRSTATE ON JBPM_NODE (SUPERSTATE_);(optional)
+CREATE INDEX IDX_NODE_PROCDEF ON JBPM_NODE (PROCESSDEFINITION_);(optional)
+CREATE INDEX IDX_NODE_ACTION ON JBPM_NODE (ACTION_);(optional)
+SELECT COUNT(*) FROM JBPM_POOLEDACTOR;
+CREATE INDEX IDX_PLDACTR_ACTID ON JBPM_POOLEDACTOR (ACTORID_);(optional)
+CREATE INDEX IDX_TSKINST_SWLANE ON JBPM_POOLEDACTOR (SWIMLANEINSTANCE_);(optional)
+SELECT COUNT(*) FROM JBPM_PROCESSDEFINITION;
+CREATE INDEX IDX_PROCDEF_STRTST ON JBPM_PROCESSDEFINITION (STARTSTATE_);(optional)
+SELECT COUNT(*) FROM JBPM_PROCESSINSTANCE;
+CREATE INDEX IDX_PROCIN_ROOTTK ON JBPM_PROCESSINSTANCE (ROOTTOKEN_);(optional)
+CREATE INDEX IDX_PROCIN_SPROCTK ON JBPM_PROCESSINSTANCE (SUPERPROCESSTOKEN_);(optional)
+CREATE INDEX IDX_PROCIN_PROCDEF ON JBPM_PROCESSINSTANCE (PROCESSDEFINITION_);(optional)
+SELECT COUNT(*) FROM JBPM_RUNTIMEACTION;
+CREATE INDEX IDX_RTACTN_PRCINST ON JBPM_RUNTIMEACTION (PROCESSINSTANCE_);(optional)
+CREATE INDEX IDX_RTACTN_ACTION ON JBPM_RUNTIMEACTION (ACTION_);(optional)
+SELECT COUNT(*) FROM JBPM_SWIMLANEINSTANCE;
+CREATE INDEX IDX_SWIMLINST_SL ON JBPM_SWIMLANEINSTANCE (SWIMLANE_);(optional)
+SELECT COUNT(*) FROM JBPM_TASK;
+CREATE INDEX IDX_TASK_TSKNODE ON JBPM_TASK (TASKNODE_);(optional)
+CREATE INDEX IDX_TASK_PROCDEF ON JBPM_TASK (PROCESSDEFINITION_);(optional)
+CREATE INDEX IDX_TASK_TASKMGTDF ON JBPM_TASK (TASKMGMTDEFINITION_);(optional)
+SELECT COUNT(*) FROM JBPM_TASKINSTANCE;
+CREATE INDEX IDX_TASKINST_TOKN ON JBPM_TASKINSTANCE (TOKEN_);(optional)
+CREATE INDEX IDX_TASKINST_TSK ON JBPM_TASKINSTANCE (TASK_, PROCINST_);(optional)
+CREATE INDEX IDX_TSKINST_TMINST ON JBPM_TASKINSTANCE (TASKMGMTINSTANCE_);(optional)
+CREATE INDEX IDX_TSKINST_SLINST ON JBPM_TASKINSTANCE (SWIMLANINSTANCE_);(optional)
+CREATE INDEX IDX_TASK_ACTORID ON JBPM_TASKINSTANCE (ACTORID_);(optional)
+SELECT COUNT(*) FROM JBPM_TOKEN;
+CREATE INDEX IDX_TOKEN_PROCIN ON JBPM_TOKEN (PROCESSINSTANCE_);(optional)
+CREATE INDEX IDX_TOKEN_SUBPI ON JBPM_TOKEN (SUBPROCESSINSTANCE_);(optional)
+CREATE INDEX IDX_TOKEN_NODE ON JBPM_TOKEN (NODE_);(optional)
+CREATE INDEX IDX_TOKEN_PARENT ON JBPM_TOKEN (PARENT_);(optional)
+SELECT COUNT(*) FROM JBPM_TOKENVARIABLEMAP;
+CREATE INDEX IDX_TKVARMAP_CTXT ON JBPM_TOKENVARIABLEMAP (CONTEXTINSTANCE_);(optional)
+CREATE INDEX IDX_TKVVARMP_TOKEN ON JBPM_TOKENVARIABLEMAP (TOKEN_);(optional)
+SELECT COUNT(*) FROM JBPM_TRANSITION;
+CREATE INDEX IDX_TRANSIT_TO ON JBPM_TRANSITION (TO_);(optional)
+CREATE INDEX IDX_TRANSIT_FROM ON JBPM_TRANSITION (FROM_);(optional)
+CREATE INDEX IDX_TRANS_PROCDEF ON JBPM_TRANSITION (PROCESSDEFINITION_);(optional)
+SELECT COUNT(*) FROM JBPM_VARIABLEINSTANCE;
+CREATE INDEX IDX_VARINST_TKVARMP ON JBPM_VARIABLEINSTANCE (TOKENVARIABLEMAP_);(optional)
+CREATE INDEX IDX_VARINST_PRCINS ON JBPM_VARIABLEINSTANCE (PROCESSINSTANCE_);(optional)
+CREATE INDEX IDX_VARINST_TK ON JBPM_VARIABLEINSTANCE (TOKEN_);(optional)
+
+SELECT COUNT(*) FROM alf_audit_date;
+CREATE INDEX adt_q_idx ON alf_audit_date (quarter);(optional)
+CREATE INDEX adt_dow_idx ON alf_audit_date (day_of_week);(optional)
+CREATE INDEX adt_date_idx ON alf_audit_date (date_only);(optional)
+CREATE INDEX adt_y_idx ON alf_audit_date (year);(optional)
+CREATE INDEX adt_hy_idx ON alf_audit_date (halfYear);(optional)
+CREATE INDEX adt_wom_idx ON alf_audit_date (week_of_month);(optional)
+CREATE INDEX adt_dom_idx ON alf_audit_date (day_of_month);(optional)
+CREATE INDEX adt_m_idx ON alf_audit_date (month);(optional)
+CREATE INDEX adt_doy_idx ON alf_audit_date (day_of_year);(optional)
+CREATE INDEX adt_woy_idx ON alf_audit_date (week_of_year);(optional)
+SELECT COUNT(*) FROM alf_audit_fact;
+CREATE INDEX adt_user_idx ON alf_audit_fact (user_id);(optional)
+CREATE INDEX adt_store_idx ON alf_audit_fact (store_protocol, store_id, node_uuid);(optional)
+SELECT COUNT(*) FROM alf_audit_source;
+CREATE INDEX app_source_met_idx ON alf_audit_source (method);(optional)
+CREATE INDEX app_source_app_idx ON alf_audit_source (application);(optional)
+CREATE INDEX app_source_ser_idx ON alf_audit_source (service);(optional)
+
+SELECT COUNT(*) FROM avm_node_properties;
+CREATE INDEX idx_avm_np_name ON avm_node_properties (qname);(optional)
+SELECT COUNT(*) FROM avm_store_properties;
+CREATE INDEX idx_avm_sp_name ON avm_store_properties (qname);(optional)
+SELECT COUNT(*) FROM avm_version_roots;
+CREATE INDEX idx_avm_vr_version ON avm_version_roots (version_id);(optional)
+
+--
+-- Record script finish
+--
+DELETE FROM alf_applied_patch WHERE id = 'patch.db-V2.1-ExplicitIndexes';
+INSERT INTO alf_applied_patch
+ (id, description, fixes_from_schema, fixes_to_schema, applied_to_schema, target_schema, applied_on_date, applied_to_server, was_executed, succeeded, report)
+ VALUES
+ (
+ 'patch.db-V2.1-ExplicitIndexes', 'Manually executed script upgrade V2.1: Ensure existence of V2.1 Explicit indexes',
+ 0, 63, -1, 64, null, 'UNKOWN', TRUE, TRUE, 'Script completed'
+ );
\ No newline at end of file
diff --git a/config/alfresco/dbscripts/upgrade/2.1/org.hibernate.dialect.PostgreSQLDialect/AlfrescoSchemaUpdate-2.1-FKIndexes.sql b/config/alfresco/dbscripts/upgrade/2.1/org.hibernate.dialect.PostgreSQLDialect/AlfrescoSchemaUpdate-2.1-FKIndexes.sql
new file mode 100644
index 0000000000..d0e9ead513
--- /dev/null
+++ b/config/alfresco/dbscripts/upgrade/2.1/org.hibernate.dialect.PostgreSQLDialect/AlfrescoSchemaUpdate-2.1-FKIndexes.sql
@@ -0,0 +1,115 @@
+--
+-- Title: Ensure that all Foreign Key indexes are present
+-- Database: PostgreSQL
+-- Since: V2.1 Schema 64
+-- Author: Derek Hulley
+--
+-- Please contact support@alfresco.com if you need assistance with the upgrade.
+--
+-- All dialects, with the exception of MySQL, will not have FK-related indexes
+-- automatically generated by Hibernate. Quite a few indexes here will be present
+-- in the database already, but the list depends on the particular upgrade path
+-- taken. In order to reduce the number of scripts that need to be run to cater for
+-- these diverse scenarios, this script just attempts to create each and every
+-- index that would be created for a new install. The statements are optional, apart
+-- from the control statements to check for the presence of the required tables.
+
+-- JBPM
+-- JBPM tables have explicit indexes where required. Adding FK indexes here
+-- leads to duplication, and on MySQL, this is exactly what happens.
+
+-- Repository
+SELECT COUNT(*) FROM alf_access_control_entry;
+CREATE INDEX FKFFF41F9960601995 ON alf_access_control_entry (permission_id);(optional)
+CREATE INDEX FKFFF41F99B25A50BF ON alf_access_control_entry (authority_id);(optional)
+CREATE INDEX FKFFF41F99B9553F6C ON alf_access_control_entry (acl_id);(optional)
+SELECT COUNT(*) FROM alf_auth_ext_keys;
+CREATE INDEX FK8A749A657B7FDE43 ON alf_auth_ext_keys (id);(optional)
+SELECT COUNT(*) FROM alf_child_assoc;
+CREATE INDEX FKFFC5468E74173FF4 ON alf_child_assoc (child_node_id);(optional)
+CREATE INDEX FKFFC5468E8E50E582 ON alf_child_assoc (parent_node_id);(optional)
+SELECT COUNT(*) FROM alf_node;
+CREATE INDEX FK60EFB626B9553F6C ON alf_node (acl_id);(optional)
+CREATE INDEX FK60EFB626D24ADD25 ON alf_node (protocol, identifier);(optional)
+SELECT COUNT(*) FROM alf_node_properties;
+CREATE INDEX FK7D4CF8EC7F2C8017 ON alf_node_properties (node_id);(optional)
+CREATE INDEX FK7D4CF8EC40E780DC ON alf_node_properties (attribute_value);(optional)
+SELECT COUNT(*) FROM alf_node_aspects;
+CREATE INDEX FKD654E027F2C8017 ON alf_node_aspects (node_id);(optional)
+SELECT COUNT(*) FROM alf_node_assoc;
+CREATE INDEX FKE1A550BCB69C43F3 ON alf_node_assoc (source_node_id);(optional)
+CREATE INDEX FKE1A550BCA8FC7769 ON alf_node_assoc (target_node_id);(optional)
+SELECT COUNT(*) FROM alf_node_status;
+CREATE INDEX FK71C2002B7F2C8017 ON alf_node_status (node_id);(optional)
+SELECT COUNT(*) FROM alf_store;
+CREATE INDEX FKBD4FF53D22DBA5BA ON alf_store (root_node_id);(optional)
+
+--
+-- Transaction tables
+--
+CREATE INDEX FK71C2002B9E57C13D ON alf_node_status (transaction_id);(optional)
+SELECT COUNT(*) FROM alf_transaction;
+CREATE INDEX FKB8761A3A9AE340B7 ON alf_transaction (server_id);(optional)
+
+--
+-- Audit tables
+--
+SELECT COUNT(*) FROM alf_audit_fact;
+CREATE INDEX FKEAD1817484342E39 ON alf_audit_fact (audit_date_id);(optional)
+CREATE INDEX FKEAD18174A0F9B8D9 ON alf_audit_fact (audit_source_id);(optional)
+CREATE INDEX FKEAD18174F524CFD7 ON alf_audit_fact (audit_conf_id);(optional)
+
+--
+-- Attribute tables
+--
+SELECT COUNT(*) FROM alf_attributes;
+CREATE INDEX fk_attr_n_acl ON alf_attributes (acl_id);(optional)
+SELECT COUNT(*) FROM alf_global_attributes;
+CREATE INDEX FK64D0B9CF69B9F16A ON alf_global_attributes (attribute);(optional)
+SELECT COUNT(*) FROM alf_list_attribute_entries;
+CREATE INDEX FKC7D52FB0ACD8822C ON alf_list_attribute_entries (list_id);(optional)
+CREATE INDEX FKC7D52FB02C5AB86C ON alf_list_attribute_entries (attribute_id);(optional)
+SELECT COUNT(*) FROM alf_map_attribute_entries;
+CREATE INDEX FK335CAE262C5AB86C ON alf_map_attribute_entries (attribute_id);(optional)
+CREATE INDEX FK335CAE26AEAC208C ON alf_map_attribute_entries (map_id);(optional)
+
+-- AVM
+SELECT COUNT(*) FROM avm_aspects;
+CREATE INDEX fk_avm_asp_node ON avm_aspects (node_id);(optional)
+SELECT COUNT(*) FROM avm_aspects_new;
+CREATE INDEX FKD3FD9F95EDCD4A96 ON avm_aspects_new (id);(optional)
+SELECT COUNT(*) FROM avm_child_entries;
+CREATE INDEX fk_avm_ce_child ON avm_child_entries (child_id);(optional)
+CREATE INDEX fk_avm_ce_parent ON avm_child_entries (parent_id);(optional)
+SELECT COUNT(*) FROM avm_history_links;
+CREATE INDEX fk_avm_hl_desc ON avm_history_links (descendent);(optional)
+CREATE INDEX fk_avm_hl_ancestor ON avm_history_links (ancestor);(optional)
+SELECT COUNT(*) FROM avm_merge_links;
+CREATE INDEX fk_avm_ml_from ON avm_merge_links (mfrom);(optional)
+CREATE INDEX fk_avm_ml_to ON avm_merge_links (mto);(optional)
+SELECT COUNT(*) FROM avm_node_properties_new;
+CREATE INDEX FK44A37C8A6BD529F3 ON avm_node_properties_new (node_id);(optional)
+CREATE INDEX fk_avm_np_node ON avm_node_properties (node_id);(optional)
+SELECT COUNT(*) FROM avm_nodes;
+CREATE INDEX fk_avm_n_acl ON avm_nodes (acl_id);(optional)
+CREATE INDEX fk_avm_n_store ON avm_nodes (store_new_id);(optional)
+SELECT COUNT(*) FROM avm_store_properties;
+CREATE INDEX fk_avm_sp_store ON avm_store_properties (avm_store_id);(optional)
+SELECT COUNT(*) FROM avm_stores;
+CREATE INDEX fk_avm_s_root ON avm_stores (current_root_id);(optional)
+SELECT COUNT(*) FROM avm_version_roots;
+CREATE INDEX fk_avm_vr_store ON avm_version_roots (avm_store_id);(optional)
+CREATE INDEX fk_avm_vr_root ON avm_version_roots (root_id);(optional)
+
+
+--
+-- Record script finish
+--
+DELETE FROM alf_applied_patch WHERE id = 'patch.db-V2.1-FKIndexes';
+INSERT INTO alf_applied_patch
+ (id, description, fixes_from_schema, fixes_to_schema, applied_to_schema, target_schema, applied_on_date, applied_to_server, was_executed, succeeded, report)
+ VALUES
+ (
+ 'patch.db-V2.1-FKIndexes', 'Manually executed script upgrade V2.1: Ensure existence of V2.1 FK indexes',
+ 0, 63, -1, 64, null, 'UNKOWN', TRUE, TRUE, 'Script completed'
+ );
\ No newline at end of file
diff --git a/config/alfresco/dbscripts/upgrade/2.1/org.hibernate.dialect.PostgreSQLDialect/AlfrescoSchemaUpdate-2.1-JBPMData.sql b/config/alfresco/dbscripts/upgrade/2.1/org.hibernate.dialect.PostgreSQLDialect/AlfrescoSchemaUpdate-2.1-JBPMData.sql
new file mode 100644
index 0000000000..27d12f42c6
--- /dev/null
+++ b/config/alfresco/dbscripts/upgrade/2.1/org.hibernate.dialect.PostgreSQLDialect/AlfrescoSchemaUpdate-2.1-JBPMData.sql
@@ -0,0 +1,29 @@
+--
+-- Title: Jbpm 3.1.2 -> 3.2 Data Migration
+-- Database: PostgreSQL
+-- Since: V2.1 Schema 52
+-- Author: David Caruana
+--
+-- Please contact support@alfresco.com if you need assistance with the upgrade.
+--
+
+UPDATE JBPM_TASK SET PRIORITY_ = 2;
+UPDATE JBPM_NODE SET ISASYNCEXCL_ = FALSE;
+UPDATE JBPM_MODULEINSTANCE SET VERSION_ = 0;
+UPDATE JBPM_POOLEDACTOR SET VERSION_ = 0;
+UPDATE JBPM_SWIMLANEINSTANCE SET VERSION_ = 0;
+UPDATE JBPM_TASKINSTANCE SET VERSION_ = 0;
+UPDATE JBPM_TOKENVARIABLEMAP SET VERSION_ = 0;
+UPDATE JBPM_VARIABLEINSTANCE SET VERSION_ = 0;
+
+--
+-- Record script finish
+--
+DELETE FROM alf_applied_patch WHERE id = 'patch.db-V2.1-JBPMUpdate';
+INSERT INTO alf_applied_patch
+ (id, description, fixes_from_schema, fixes_to_schema, applied_to_schema, target_schema, applied_on_date, applied_to_server, was_executed, succeeded, report)
+ VALUES
+ (
+ 'patch.db-V2.1-JBPMUpdate', 'Manually executed script upgrade V2.1: JBPM 3.1.2 to 3.2 Data Upgrade',
+ 0, 51, -1, 52, null, 'UNKOWN', TRUE, TRUE, 'Script completed'
+ );
\ No newline at end of file
diff --git a/config/alfresco/dbscripts/upgrade/2.1/org.hibernate.dialect.PostgreSQLDialect/AlfrescoSchemaUpdate-2.1-JBPMProcessKey.sql b/config/alfresco/dbscripts/upgrade/2.1/org.hibernate.dialect.PostgreSQLDialect/AlfrescoSchemaUpdate-2.1-JBPMProcessKey.sql
new file mode 100644
index 0000000000..183a879ed5
--- /dev/null
+++ b/config/alfresco/dbscripts/upgrade/2.1/org.hibernate.dialect.PostgreSQLDialect/AlfrescoSchemaUpdate-2.1-JBPMProcessKey.sql
@@ -0,0 +1,22 @@
+--
+-- Title: Jbpm 3.2 Process Instance Key
+-- Database: PostgreSQL
+-- Since: V2.1 Schema 63
+-- Author: David Caruana
+--
+-- Please contact support@alfresco.com if you need assistance with the upgrade.
+--
+
+UPDATE JBPM_PROCESSINSTANCE SET KEY_ = ID_ WHERE KEY_ IS NULL;
+
+--
+-- Record script finish
+--
+DELETE FROM alf_applied_patch WHERE id = 'patch.db-V2.1-JBPMProcessKey';
+INSERT INTO alf_applied_patch
+ (id, description, fixes_from_schema, fixes_to_schema, applied_to_schema, target_schema, applied_on_date, applied_to_server, was_executed, succeeded, report)
+ VALUES
+ (
+ 'patch.db-V2.1-JBPMProcessKey', 'Manually executed script upgrade V2.1: JBPM 3.2 Process Instance Key',
+ 0, 62, -1, 63, null, 'UNKOWN', TRUE, TRUE, 'Script completed'
+ );
\ No newline at end of file
diff --git a/config/alfresco/dbscripts/upgrade/2.1/org.hibernate.dialect.PostgreSQLDialect/AlfrescoSchemaUpdate-2.1-NotNullColumns.sql b/config/alfresco/dbscripts/upgrade/2.1/org.hibernate.dialect.PostgreSQLDialect/AlfrescoSchemaUpdate-2.1-NotNullColumns.sql
new file mode 100644
index 0000000000..1eca3086ec
--- /dev/null
+++ b/config/alfresco/dbscripts/upgrade/2.1/org.hibernate.dialect.PostgreSQLDialect/AlfrescoSchemaUpdate-2.1-NotNullColumns.sql
@@ -0,0 +1,21 @@
+--
+-- Title: Add text columns that allow null
+-- Database: PostgreSQL
+-- Since: V2.1 Schema 64
+-- Author: Derek Hulley
+--
+-- Please contact support@alfresco.com if you need assistance with the upgrade.
+--
+-- This is a Sybase issue, so nothing is required here.
+
+--
+-- Record script finish
+--
+DELETE FROM alf_applied_patch WHERE id = 'patch.db-V2.1-NotNullColumns';
+INSERT INTO alf_applied_patch
+ (id, description, fixes_from_schema, fixes_to_schema, applied_to_schema, target_schema, applied_on_date, applied_to_server, was_executed, succeeded, report)
+ VALUES
+ (
+ 'patch.db-V2.1-NotNullColumns', 'Manually executed script upgrade V2.1: Add nullable columns',
+ 0, 63, -1, 64, null, 'UNKOWN', TRUE, TRUE, 'Script completed'
+ );
\ No newline at end of file
diff --git a/config/alfresco/dbscripts/upgrade/2.1/org.hibernate.dialect.PostgreSQLDialect/AlfrescoSchemaUpdate-2.1-VersionColumns.sql b/config/alfresco/dbscripts/upgrade/2.1/org.hibernate.dialect.PostgreSQLDialect/AlfrescoSchemaUpdate-2.1-VersionColumns.sql
new file mode 100644
index 0000000000..877f7fdd8c
--- /dev/null
+++ b/config/alfresco/dbscripts/upgrade/2.1/org.hibernate.dialect.PostgreSQLDialect/AlfrescoSchemaUpdate-2.1-VersionColumns.sql
@@ -0,0 +1,33 @@
+--
+-- Title: Fill 'version' columns with data
+-- Database: PostgreSQL
+-- Since: V2.1 Schema 54
+-- Author: Derek Hulley
+--
+-- Please contact support@alfresco.com if you need assistance with the upgrade.
+--
+
+UPDATE alf_store SET version = 1 WHERE version IS NULL;
+UPDATE alf_node SET version = 1 WHERE version IS NULL;
+UPDATE alf_child_assoc SET version = 1 WHERE version IS NULL;
+UPDATE alf_node_assoc SET version = 1 WHERE version IS NULL;
+UPDATE alf_node_status SET version = 1 WHERE version IS NULL;
+UPDATE alf_transaction SET version = 1 WHERE version IS NULL;
+UPDATE alf_server SET version = 1 WHERE version IS NULL;
+UPDATE alf_access_control_list SET version = 1 WHERE version IS NULL;
+UPDATE alf_access_control_entry SET version = 1 WHERE version IS NULL;
+UPDATE alf_permission SET version = 1 WHERE version IS NULL;
+UPDATE alf_authority SET version = 1 WHERE version IS NULL;
+UPDATE alf_version_count SET version = 1 WHERE version IS NULL;
+
+--
+-- Record script finish
+--
+DELETE FROM alf_applied_patch WHERE id = 'patch.db-V2.1-VersionColumns2';
+INSERT INTO alf_applied_patch
+ (id, description, fixes_from_schema, fixes_to_schema, applied_to_schema, target_schema, applied_on_date, applied_to_server, was_executed, succeeded, report)
+ VALUES
+ (
+ 'patch.db-V2.1-VersionColumns2', 'Manually executed script upgrade V2.1: Created initial version number for ADM entities',
+ 0, 63, -1, 64, null, 'UNKOWN', TRUE, TRUE, 'Script completed'
+ );
\ No newline at end of file
diff --git a/config/alfresco/dbscripts/upgrade/2.0/org.hibernate.dialect.PostgreSQLDialect/_pg_keypositions-function.sql b/config/alfresco/dbscripts/upgrade/2.1/org.hibernate.dialect.PostgreSQLDialect/_pg_keypositions-function.sql
similarity index 100%
rename from config/alfresco/dbscripts/upgrade/2.0/org.hibernate.dialect.PostgreSQLDialect/_pg_keypositions-function.sql
rename to config/alfresco/dbscripts/upgrade/2.1/org.hibernate.dialect.PostgreSQLDialect/_pg_keypositions-function.sql
diff --git a/config/alfresco/dbscripts/upgrade/2.1/org.hibernate.dialect.SybaseDialect/AlfrescoSchemaUpdate-2.1-NotNullColumns.sql b/config/alfresco/dbscripts/upgrade/2.1/org.hibernate.dialect.SybaseDialect/AlfrescoSchemaUpdate-2.1-NotNullColumns.sql
new file mode 100644
index 0000000000..44647d61c8
--- /dev/null
+++ b/config/alfresco/dbscripts/upgrade/2.1/org.hibernate.dialect.SybaseDialect/AlfrescoSchemaUpdate-2.1-NotNullColumns.sql
@@ -0,0 +1,53 @@
+--
+-- Title: ADD text columns that allow null
+-- Database: Sybase
+-- Since: V2.1 Schema 64
+-- Author: Derek Hulley
+--
+-- Please contact support@alfresco.com if you need assistance with the upgrade.
+--
+-- Sybase won't allow ALTER TABLE commands where the text columns are not null.
+-- Where the nullability is not explicitly set, Sybase assumes NOT NULL.
+
+-- JBPM
+ALTER TABLE JBPM_NODE ADD DESCRIPTION_ text NULL;
+ALTER TABLE JBPM_NODE ADD ISASYNCEXCL_ tinyint DEFAULT 0;
+ALTER TABLE JBPM_NODE ADD SUBPROCNAME_ text NULL;
+ALTER TABLE JBPM_NODE ADD SCRIPT_ numeric(19,0) NULL;
+ALTER TABLE JBPM_PROCESSDEFINITION ADD CLASS_ char(1) NOT NULL DEFAULT 'P';
+ALTER TABLE JBPM_PROCESSDEFINITION ADD DESCRIPTION_ text NULL;
+ALTER TABLE JBPM_PROCESSINSTANCE ADD KEY_ text NULL;
+ALTER TABLE JBPM_TASK ADD CONDITION_ text NULL;
+ALTER TABLE JBPM_TASK ADD PRIORITY_ int DEFAULT 2;
+ALTER TABLE JBPM_TASKINSTANCE ADD PROCINST_ numeric(19,0) NULL;
+ALTER TABLE JBPM_TOKEN ADD LOCK_ text NULL;
+ALTER TABLE JBPM_TRANSITION ADD DESCRIPTION_ text NULL;
+ALTER TABLE JBPM_TRANSITION ADD CONDITION_ text NULL;
+
+-- ALFRESCO
+ALTER TABLE alf_access_control_entry ADD version numeric(19,0) DEFAULT 0;
+ALTER TABLE alf_access_control_list ADD version numeric(19,0) DEFAULT 0;
+ALTER TABLE alf_authority ADD version numeric(19,0) DEFAULT 0;
+ALTER TABLE alf_child_assoc ADD version numeric(19,0) DEFAULT 0;
+ALTER TABLE alf_node ADD version numeric(19,0) DEFAULT 0;
+ALTER TABLE alf_node_assoc ADD version numeric(19,0) DEFAULT 0;
+ALTER TABLE alf_node_properties ADD attribute_value numeric(19,0) NULL;
+ALTER TABLE alf_node_status ADD version numeric(19,0) DEFAULT 0;
+ALTER TABLE alf_permission ADD version numeric(19,0) DEFAULT 0;
+ALTER TABLE alf_server ADD version numeric(19,0) DEFAULT 0;
+ALTER TABLE alf_store ADD version numeric(19,0) DEFAULT 0;
+ALTER TABLE alf_transaction ADD version numeric(19,0) DEFAULT 0;
+ALTER TABLE alf_version_count ADD version numeric(19,0) DEFAULT 0;
+
+
+--
+-- Record script finish
+--
+DELETE FROM alf_applied_patch WHERE id = 'patch.db-V2.1-NotNullColumns';
+INSERT INTO alf_applied_patch
+ (id, description, fixes_from_schema, fixes_to_schema, applied_to_schema, target_schema, applied_on_date, applied_to_server, was_executed, succeeded, report)
+ VALUES
+ (
+ 'patch.db-V2.1-NotNullColumns', 'Manually executed script upgrade V2.1: ADD nullable text columns for Sybase',
+ 0, 63, -1, 64, null, 'UNKOWN', 1, 1, 'Script completed'
+ );
\ No newline at end of file
diff --git a/config/alfresco/patch/patch-services-context.xml b/config/alfresco/patch/patch-services-context.xml
index 14664122ad..efc47dcf36 100644
--- a/config/alfresco/patch/patch-services-context.xml
+++ b/config/alfresco/patch/patch-services-context.xml
@@ -527,22 +527,6 @@
-
- patch.db-V1.4-PostgresFKIndexes
- patch.schemaUpgradeScript.description
- 21
- 51
- 52
-
- classpath:alfresco/dbscripts/upgrade/1.4/${db.script.dialect}/AlfrescoSchemaUpdate-1.4-PostgresFKIndexes.sql
-
-
-
-
-
-
-
-
patch.multilingualBootstrap
patch.multilingualBootstrap.description
@@ -648,28 +632,6 @@
-
- patch.db-V2.0-ExplicitIndexes
- patch.schemaUpgradeScript.description
- 0
- 37
- 38
-
- classpath:alfresco/dbscripts/upgrade/2.0/${db.script.dialect}/AlfrescoSchemaUpdate-2.0-ExplicitIndexes.sql
-
-
-
-
- patch.db-V2.0-AVMFKIndexes
- patch.schemaUpgradeScript.description
- 0
- 37
- 38
-
- classpath:alfresco/dbscripts/upgrade/2.0/${db.script.dialect}/AlfrescoSchemaUpdate-2.0-AVMFKIndexes.sql
-
-
-
patch.db-V2.1-JBPMUpdate
patch.schemaUpgradeScript.description
@@ -680,6 +642,17 @@
classpath:alfresco/dbscripts/upgrade/2.1/${db.script.dialect}/AlfrescoSchemaUpdate-2.1-JBPMData.sql
+
+
+ patch.db-V2.1-NotNullColumns
+ patch.schemaUpgradeScript.description
+ 0
+ 51
+ 52
+
+ classpath:alfresco/dbscripts/upgrade/2.1/${db.script.dialect}/AlfrescoSchemaUpdate-2.1-NotNullColumns.sql
+
+
patch.groupNamesAsIdentifiers
@@ -743,17 +716,6 @@
-
- patch.db-V2.1-VersionColumns
- patch.schemaUpgradeScript.description
- 0
- 53
- 54
-
- classpath:alfresco/dbscripts/upgrade/2.1/${db.script.dialect}/AlfrescoSchemaUpdate-2.1-VersionColumns.sql
-
-
-
patch.webscriptsExtension
patch.webscriptsExtension.description
@@ -896,4 +858,37 @@
+
+ patch.db-V2.1-FKIndexes
+ patch.schemaUpgradeScript.description
+ 0
+ 63
+ 64
+
+ classpath:alfresco/dbscripts/upgrade/2.1/${db.script.dialect}/AlfrescoSchemaUpdate-2.1-FKIndexes.sql
+
+
+
+
+ patch.db-V2.1-ExplicitIndexes
+ patch.schemaUpgradeScript.description
+ 0
+ 63
+ 64
+
+ classpath:alfresco/dbscripts/upgrade/2.1/${db.script.dialect}/AlfrescoSchemaUpdate-2.1-ExplicitIndexes.sql
+
+
+
+
+ patch.db-V2.1-VersionColumns2
+ patch.schemaUpgradeScript.description
+ 0
+ 63
+ 64
+
+ classpath:alfresco/dbscripts/upgrade/2.1/${db.script.dialect}/AlfrescoSchemaUpdate-2.1-VersionColumns.sql
+
+
+
diff --git a/config/alfresco/version.properties b/config/alfresco/version.properties
index 14c3d18bf3..8ff0422941 100644
--- a/config/alfresco/version.properties
+++ b/config/alfresco/version.properties
@@ -19,4 +19,4 @@ version.build=@build-number@
# Schema number
-version.schema=63
+version.schema=64
diff --git a/source/java/org/alfresco/repo/domain/hibernate/VersionCount.hbm.xml b/source/java/org/alfresco/repo/domain/hibernate/VersionCount.hbm.xml
index ad7fcfe2fb..4a0c2a102c 100644
--- a/source/java/org/alfresco/repo/domain/hibernate/VersionCount.hbm.xml
+++ b/source/java/org/alfresco/repo/domain/hibernate/VersionCount.hbm.xml
@@ -14,12 +14,18 @@
dynamic-insert="false"
select-before-update="false"
optimistic-lock="version" >
+
+
+
+
+
+
diff --git a/source/java/org/alfresco/repo/domain/hibernate/VersionCountImpl.java b/source/java/org/alfresco/repo/domain/hibernate/VersionCountImpl.java
index 022d989640..97fa223638 100644
--- a/source/java/org/alfresco/repo/domain/hibernate/VersionCountImpl.java
+++ b/source/java/org/alfresco/repo/domain/hibernate/VersionCountImpl.java
@@ -39,8 +39,7 @@ public class VersionCountImpl implements VersionCount, Serializable
private static final long serialVersionUID = 6420375860928877809L;
private StoreKey key;
- @SuppressWarnings("unused")
- private long version; // used by Hibernate for concurrency
+ private long version;
private int versionCount;
public VersionCountImpl()
@@ -89,11 +88,25 @@ public class VersionCountImpl implements VersionCount, Serializable
return key;
}
- public synchronized void setKey(StoreKey key)
+ public void setKey(StoreKey key)
{
this.key = key;
}
+ public Long getVersion()
+ {
+ return version;
+ }
+
+ /**
+ * For Hibernate use
+ */
+ @SuppressWarnings("unused")
+ private void setVersion(Long version)
+ {
+ this.version = version;
+ }
+
/**
* For Hibernate use
*/