diff --git a/config/alfresco/dbscripts/upgrade/2.2/org.hibernate.dialect.MySQLInnoDBDialect/AlfrescoSchemaUpdate-2.2-ACL.sql b/config/alfresco/dbscripts/upgrade/2.2/org.hibernate.dialect.MySQLInnoDBDialect/AlfrescoSchemaUpdate-2.2-ACL.sql index 9eed82db12..565761e88c 100644 --- a/config/alfresco/dbscripts/upgrade/2.2/org.hibernate.dialect.MySQLInnoDBDialect/AlfrescoSchemaUpdate-2.2-ACL.sql +++ b/config/alfresco/dbscripts/upgrade/2.2/org.hibernate.dialect.MySQLInnoDBDialect/AlfrescoSchemaUpdate-2.2-ACL.sql @@ -1,157 +1,157 @@ --- --- Title: Update for permissions schema changes --- Database: MySQL InnoDB --- Since: V2.2 Schema 85 --- Author: Andy Hind --- --- Please contact support@alfresco.com if you need assistance with the upgrade. --- - -CREATE TABLE alf_acl_change_set ( - id BIGINT NOT NULL AUTO_INCREMENT, - version BIGINT NOT NULL, - primary key (id) -) type=InnoDB; - - --- Add to ACL -ALTER TABLE alf_access_control_list - ADD COLUMN type INT NOT NULL DEFAULT 0, - ADD COLUMN latest BOOLEAN NOT NULL DEFAULT TRUE, - ADD COLUMN acl_id VARCHAR(36) NOT NULL DEFAULT 'UNSET', - ADD COLUMN acl_version BIGINT NOT NULL DEFAULT 1, - ADD COLUMN inherited_acl BIGINT, - ADD COLUMN is_versioned BOOLEAN NOT NULL DEFAULT FALSE, - ADD COLUMN requires_version BOOLEAN NOT NULL DEFAULT FALSE, - ADD COLUMN acl_change_set BIGINT, - ADD COLUMN inherits_from BIGINT; -CREATE INDEX fk_alf_acl_acs ON alf_access_control_list (acl_change_set); -ALTER TABLE alf_access_control_list ADD CONSTRAINT fk_alf_acl_acs FOREIGN KEY (acl_change_set) REFERENCES alf_acl_change_set (id); - -UPDATE alf_access_control_list acl - set acl_id = (acl.id); - -ALTER TABLE alf_access_control_list - ADD UNIQUE (acl_id, latest, acl_version); - --- Create ACL member list -CREATE TABLE alf_acl_member ( - id BIGINT NOT NULL AUTO_INCREMENT, - version BIGINT NOT NULL, - acl_id BIGINT NOT NULL, - ace_id BIGINT NOT NULL, - pos INT NOT NULL, - primary key (id), - unique(acl_id, ace_id, pos) -) type=InnoDB; -CREATE INDEX fk_alf_aclm_acl ON alf_acl_member (acl_id); -ALTER TABLE alf_acl_member ADD CONSTRAINT fk_alf_aclm_acl FOREIGN KEY (acl_id) REFERENCES alf_access_control_list (id); -CREATE INDEX fk_alf_aclm_ace ON alf_acl_member (ace_id); -ALTER TABLE alf_acl_member ADD CONSTRAINT fk_alf_aclm_ace FOREIGN KEY (ace_id) REFERENCES alf_access_control_entry (id); - - -ALTER TABLE alf_access_control_entry DROP INDEX acl_id; - --- Extend ACE -ALTER TABLE alf_access_control_entry - ADD COLUMN auth_id BIGINT NOT NULL DEFAULT -1, - ADD COLUMN applies INT NOT NULL DEFAULT 0, - ADD COLUMN context_id BIGINT; - --- remove unused -DROP TABLE alf_auth_ext_keys; - --- remove authority constraint -ALTER TABLE alf_access_control_entry DROP INDEX FKFFF41F99B25A50BF, DROP FOREIGN KEY FKFFF41F99B25A50BF; - --- restructure authority -ALTER TABLE alf_authority - DROP PRIMARY KEY, - ADD COLUMN id BIGINT NOT NULL AUTO_INCREMENT, - CHANGE recipient authority VARCHAR(100), - ADD primary key (id), - ADD UNIQUE (authority); - --- migrate data - fix up FK refs to authority -UPDATE alf_access_control_entry ace - set auth_id = (select id from alf_authority a where a.authority = ace.authority_id); - - --- migrate data - build equivalent ACL entries -INSERT INTO alf_acl_member (version, acl_id, ace_id, pos) - select 1, acl_id, id, 0 from alf_access_control_entry; - --- Create ACE context -CREATE TABLE alf_ace_context ( - id BIGINT NOT NULL AUTO_INCREMENT, - version BIGINT NOT NULL, - class_context VARCHAR(1024), - property_context VARCHAR(1024), - kvp_context VARCHAR(1024), - primary key (id) - ) type=InnoDB; - - --- Create auth aliases table -CREATE TABLE alf_authority_alias ( - id BIGINT NOT NULL AUTO_INCREMENT, - version BIGINT NOT NULL, - auth_id BIGINT NOT NULL, - alias_id BIGINT NOT NULL, - primary key (id), - UNIQUE (auth_id, alias_id) -) type=InnoDB; -CREATE INDEX fk_alf_autha_ali ON alf_authority_alias (alias_id); -ALTER TABLE alf_authority_alias ADD CONSTRAINT fk_alf_autha_ali FOREIGN KEY (alias_id) REFERENCES alf_authority (id); -CREATE INDEX fk_alf_autha_aut ON alf_authority_alias (auth_id); -ALTER TABLE alf_authority_alias ADD CONSTRAINT fk_alf_autha_aut FOREIGN KEY (auth_id) REFERENCES alf_authority (id); - - --- Tidy up unused cols on ace table and add the FK contstraint back --- finish take out of ACL_ID -ALTER TABLE alf_access_control_entry DROP INDEX FKFFF41F99B9553F6C, DROP FOREIGN KEY FKFFF41F99B9553F6C; -ALTER TABLE alf_access_control_entry DROP INDEX FKFFF41F9960601995, DROP FOREIGN KEY FKFFF41F9960601995; -ALTER TABLE alf_access_control_entry DROP COLUMN acl_id, DROP COLUMN authority_id; -ALTER TABLE alf_access_control_entry - CHANGE auth_id authority_id BIGINT NOT NULL; -CREATE INDEX fk_alf_ace_auth ON alf_access_control_entry (authority_id); -ALTER TABLE alf_access_control_entry ADD CONSTRAINT fk_alf_ace_auth FOREIGN KEY (authority_id) REFERENCES alf_authority (id); -CREATE INDEX fk_alf_ace_perm ON alf_access_control_entry (permission_id); -ALTER TABLE alf_access_control_entry ADD CONSTRAINT fk_alf_ace_perm FOREIGN KEY (permission_id) REFERENCES alf_permission (id); -CREATE INDEX fk_alf_ace_ctx ON alf_access_control_entry (context_id); -ALTER TABLE alf_access_control_entry ADD CONSTRAINT fk_alf_ace_ctx FOREIGN KEY (context_id) REFERENCES alf_ace_context (id); - - - --- Update members to point to the first use of an access control entry -UPDATE alf_acl_member mem - SET ace_id = (SELECT min(ace2.id) FROM alf_access_control_entry ace1 - JOIN alf_access_control_entry ace2 - ON ace1.permission_id = ace2.permission_id AND - ace1.authority_id = ace2.authority_id AND - ace1.allowed = ace2.allowed AND - ace1.applies = ace2.applies - WHERE ace1.id = mem.ace_id ); - --- Remove duplicate aces the mysql way (as you can not use the deleted table in the where clause ...) - -CREATE TEMPORARY TABLE tmp_to_delete SELECT ace.id FROM alf_acl_member mem RIGHT OUTER JOIN alf_access_control_entry ace ON mem.ace_id = ace.id WHERE mem.ace_id IS NULL; -DELETE FROM alf_access_control_entry ace USING alf_access_control_entry ace JOIN tmp_to_delete t ON ace.id = t.id; -DROP TEMPORARY TABLE tmp_to_delete; - --- Add constraint for duplicate acls - -ALTER TABLE alf_access_control_entry - ADD UNIQUE (permission_id, authority_id, allowed, applies, context_id); - --- --- Record script finish --- -DELETE FROM alf_applied_patch WHERE id = 'patch.db-V2.2-ACL'; -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.2-ACL', 'Manually executed script upgrade V2.2: Update acl schema', - 0, 84, -1, 85, null, 'UNKOWN', 1, 1, 'Script completed' +-- +-- Title: Update for permissions schema changes +-- Database: MySQL InnoDB +-- Since: V2.2 Schema 85 +-- Author: Andy Hind +-- +-- Please contact support@alfresco.com if you need assistance with the upgrade. +-- + +CREATE TABLE alf_acl_change_set ( + id BIGINT NOT NULL AUTO_INCREMENT, + version BIGINT NOT NULL, + primary key (id) +) type=InnoDB; + + +-- Add to ACL +ALTER TABLE alf_access_control_list + ADD COLUMN type INT NOT NULL DEFAULT 0, + ADD COLUMN latest BOOLEAN NOT NULL DEFAULT TRUE, + ADD COLUMN acl_id VARCHAR(36) NOT NULL DEFAULT 'UNSET', + ADD COLUMN acl_version BIGINT NOT NULL DEFAULT 1, + ADD COLUMN inherited_acl BIGINT, + ADD COLUMN is_versioned BOOLEAN NOT NULL DEFAULT FALSE, + ADD COLUMN requires_version BOOLEAN NOT NULL DEFAULT FALSE, + ADD COLUMN acl_change_set BIGINT, + ADD COLUMN inherits_from BIGINT; +CREATE INDEX fk_alf_acl_acs ON alf_access_control_list (acl_change_set); +ALTER TABLE alf_access_control_list ADD CONSTRAINT fk_alf_acl_acs FOREIGN KEY (acl_change_set) REFERENCES alf_acl_change_set (id); + +UPDATE alf_access_control_list acl + set acl_id = (acl.id); + +ALTER TABLE alf_access_control_list + ADD UNIQUE (acl_id, latest, acl_version); + +-- Create ACL member list +CREATE TABLE alf_acl_member ( + id BIGINT NOT NULL AUTO_INCREMENT, + version BIGINT NOT NULL, + acl_id BIGINT NOT NULL, + ace_id BIGINT NOT NULL, + pos INT NOT NULL, + primary key (id), + unique(acl_id, ace_id, pos) +) type=InnoDB; +CREATE INDEX fk_alf_aclm_acl ON alf_acl_member (acl_id); +ALTER TABLE alf_acl_member ADD CONSTRAINT fk_alf_aclm_acl FOREIGN KEY (acl_id) REFERENCES alf_access_control_list (id); +CREATE INDEX fk_alf_aclm_ace ON alf_acl_member (ace_id); +ALTER TABLE alf_acl_member ADD CONSTRAINT fk_alf_aclm_ace FOREIGN KEY (ace_id) REFERENCES alf_access_control_entry (id); + + +ALTER TABLE alf_access_control_entry DROP INDEX acl_id; + +-- Extend ACE +ALTER TABLE alf_access_control_entry + ADD COLUMN auth_id BIGINT NOT NULL DEFAULT -1, + ADD COLUMN applies INT NOT NULL DEFAULT 0, + ADD COLUMN context_id BIGINT; + +-- remove unused +DROP TABLE alf_auth_ext_keys; + +-- remove authority constraint +ALTER TABLE alf_access_control_entry DROP INDEX FKFFF41F99B25A50BF, DROP FOREIGN KEY FKFFF41F99B25A50BF; + +-- restructure authority +ALTER TABLE alf_authority + DROP PRIMARY KEY, + ADD COLUMN id BIGINT NOT NULL AUTO_INCREMENT, + CHANGE recipient authority VARCHAR(100), + ADD primary key (id), + ADD UNIQUE (authority); + +-- migrate data - fix up FK refs to authority +UPDATE alf_access_control_entry ace + set auth_id = (select id from alf_authority a where a.authority = ace.authority_id); + + +-- migrate data - build equivalent ACL entries +INSERT INTO alf_acl_member (version, acl_id, ace_id, pos) + select 1, acl_id, id, 0 from alf_access_control_entry; + +-- Create ACE context +CREATE TABLE alf_ace_context ( + id BIGINT NOT NULL AUTO_INCREMENT, + version BIGINT NOT NULL, + class_context VARCHAR(1024), + property_context VARCHAR(1024), + kvp_context VARCHAR(1024), + primary key (id) + ) type=InnoDB; + + +-- Create auth aliases table +CREATE TABLE alf_authority_alias ( + id BIGINT NOT NULL AUTO_INCREMENT, + version BIGINT NOT NULL, + auth_id BIGINT NOT NULL, + alias_id BIGINT NOT NULL, + primary key (id), + UNIQUE (auth_id, alias_id) +) type=InnoDB; +CREATE INDEX fk_alf_autha_ali ON alf_authority_alias (alias_id); +ALTER TABLE alf_authority_alias ADD CONSTRAINT fk_alf_autha_ali FOREIGN KEY (alias_id) REFERENCES alf_authority (id); +CREATE INDEX fk_alf_autha_aut ON alf_authority_alias (auth_id); +ALTER TABLE alf_authority_alias ADD CONSTRAINT fk_alf_autha_aut FOREIGN KEY (auth_id) REFERENCES alf_authority (id); + + +-- Tidy up unused cols on ace table and add the FK contstraint back +-- finish take out of ACL_ID +ALTER TABLE alf_access_control_entry DROP INDEX FKFFF41F99B9553F6C, DROP FOREIGN KEY FKFFF41F99B9553F6C; +ALTER TABLE alf_access_control_entry DROP INDEX FKFFF41F9960601995, DROP FOREIGN KEY FKFFF41F9960601995; +ALTER TABLE alf_access_control_entry DROP COLUMN acl_id, DROP COLUMN authority_id; +ALTER TABLE alf_access_control_entry + CHANGE auth_id authority_id BIGINT NOT NULL; +CREATE INDEX fk_alf_ace_auth ON alf_access_control_entry (authority_id); +ALTER TABLE alf_access_control_entry ADD CONSTRAINT fk_alf_ace_auth FOREIGN KEY (authority_id) REFERENCES alf_authority (id); +CREATE INDEX fk_alf_ace_perm ON alf_access_control_entry (permission_id); +ALTER TABLE alf_access_control_entry ADD CONSTRAINT fk_alf_ace_perm FOREIGN KEY (permission_id) REFERENCES alf_permission (id); +CREATE INDEX fk_alf_ace_ctx ON alf_access_control_entry (context_id); +ALTER TABLE alf_access_control_entry ADD CONSTRAINT fk_alf_ace_ctx FOREIGN KEY (context_id) REFERENCES alf_ace_context (id); + + + +-- Update members to point to the first use of an access control entry +UPDATE alf_acl_member mem + SET ace_id = (SELECT min(ace2.id) FROM alf_access_control_entry ace1 + JOIN alf_access_control_entry ace2 + ON ace1.permission_id = ace2.permission_id AND + ace1.authority_id = ace2.authority_id AND + ace1.allowed = ace2.allowed AND + ace1.applies = ace2.applies + WHERE ace1.id = mem.ace_id ); + +-- Remove duplicate aces the mysql way (as you can not use the deleted table in the where clause ...) + +CREATE TEMPORARY TABLE tmp_to_delete SELECT ace.id FROM alf_acl_member mem RIGHT OUTER JOIN alf_access_control_entry ace ON mem.ace_id = ace.id WHERE mem.ace_id IS NULL; +DELETE FROM alf_access_control_entry ace USING alf_access_control_entry ace JOIN tmp_to_delete t ON ace.id = t.id; +DROP TEMPORARY TABLE tmp_to_delete; + +-- Add constraint for duplicate acls + +ALTER TABLE alf_access_control_entry + ADD UNIQUE (permission_id, authority_id, allowed, applies, context_id); + +-- +-- Record script finish +-- +DELETE FROM alf_applied_patch WHERE id = 'patch.db-V2.2-ACL'; +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.2-ACL', 'Manually executed script upgrade V2.2: Update acl schema', + 0, 84, -1, 85, null, 'UNKOWN', 1, 1, 'Script completed' ); \ No newline at end of file diff --git a/config/alfresco/dbscripts/upgrade/2.2/org.hibernate.dialect.MySQLInnoDBDialect/upgrade-1-drop-indexes-and-constraints.sql b/config/alfresco/dbscripts/upgrade/2.2/org.hibernate.dialect.MySQLInnoDBDialect/upgrade-1-drop-indexes-and-constraints.sql index 5d29e81726..2cd7f72b48 100644 --- a/config/alfresco/dbscripts/upgrade/2.2/org.hibernate.dialect.MySQLInnoDBDialect/upgrade-1-drop-indexes-and-constraints.sql +++ b/config/alfresco/dbscripts/upgrade/2.2/org.hibernate.dialect.MySQLInnoDBDialect/upgrade-1-drop-indexes-and-constraints.sql @@ -21,29 +21,29 @@ ALTER TABLE alf_acl_member DROP INDEX fk_alf_aclm_ace, DROP FOREIGN KEY fk_alf_a ALTER TABLE alf_attributes DROP INDEX fk_attributes_n_acl, DROP FOREIGN KEY fk_attributes_n_acl; -- (optional) -ALTER TABLE alf_audit_date DROP INDEX adt_woy_idx; +ALTER TABLE alf_audit_date DROP INDEX adt_woy_idx; -- (optional) -ALTER TABLE alf_audit_date DROP INDEX adt_date_idx; +ALTER TABLE alf_audit_date DROP INDEX adt_date_idx; -- (optional) -ALTER TABLE alf_audit_date DROP INDEX adt_y_idx; +ALTER TABLE alf_audit_date DROP INDEX adt_y_idx; -- (optional) -ALTER TABLE alf_audit_date DROP INDEX adt_q_idx; +ALTER TABLE alf_audit_date DROP INDEX adt_q_idx; -- (optional) -ALTER TABLE alf_audit_date DROP INDEX adt_m_idx; +ALTER TABLE alf_audit_date DROP INDEX adt_m_idx; -- (optional) -ALTER TABLE alf_audit_date DROP INDEX adt_dow_idx; +ALTER TABLE alf_audit_date DROP INDEX adt_dow_idx; -- (optional) -ALTER TABLE alf_audit_date DROP INDEX adt_doy_idx; +ALTER TABLE alf_audit_date DROP INDEX adt_doy_idx; -- (optional) -ALTER TABLE alf_audit_date DROP INDEX adt_dom_idx; +ALTER TABLE alf_audit_date DROP INDEX adt_dom_idx; -- (optional) -ALTER TABLE alf_audit_date DROP INDEX adt_hy_idx; +ALTER TABLE alf_audit_date DROP INDEX adt_hy_idx; -- (optional) -ALTER TABLE alf_audit_date DROP INDEX adt_wom_idx; +ALTER TABLE alf_audit_date DROP INDEX adt_wom_idx; -- (optional) -ALTER TABLE alf_audit_fact DROP INDEX adt_user_idx; +ALTER TABLE alf_audit_fact DROP INDEX adt_user_idx; -- (optional) -ALTER TABLE alf_audit_fact DROP INDEX adt_store_idx; +ALTER TABLE alf_audit_fact DROP INDEX adt_store_idx; -- (optional) ALTER TABLE alf_audit_fact DROP INDEX FKEAD18174A0F9B8D9, DROP FOREIGN KEY FKEAD18174A0F9B8D9; @@ -51,11 +51,11 @@ ALTER TABLE alf_audit_fact DROP INDEX FKEAD1817484342E39, DROP FOREIGN KEY FKEAD ALTER TABLE alf_audit_fact DROP INDEX FKEAD18174F524CFD7, DROP FOREIGN KEY FKEAD18174F524CFD7; -ALTER TABLE alf_audit_source DROP INDEX app_source_app_idx; +ALTER TABLE alf_audit_source DROP INDEX app_source_app_idx; -- (optional) -ALTER TABLE alf_audit_source DROP INDEX app_source_ser_idx; +ALTER TABLE alf_audit_source DROP INDEX app_source_ser_idx; -- (optional) -ALTER TABLE alf_audit_source DROP INDEX app_source_met_idx; +ALTER TABLE alf_audit_source DROP INDEX app_source_met_idx; -- (optional) ALTER TABLE alf_child_assoc DROP INDEX FKFFC5468E8E50E582, DROP FOREIGN KEY FKFFC5468E8E50E582; @@ -96,45 +96,45 @@ ALTER TABLE alf_transaction DROP INDEX idx_commit_time_ms; -- (optional) ALTER TABLE alf_transaction DROP INDEX FKB8761A3A9AE340B7, DROP FOREIGN KEY FKB8761A3A9AE340B7; -ALTER TABLE avm_aspects DROP INDEX fk_avm_asp_node, DROP FOREIGN KEY fk_avm_asp_node; +ALTER TABLE avm_aspects DROP INDEX fk_avm_asp_node, DROP FOREIGN KEY fk_avm_asp_node; --(optional) ALTER TABLE avm_aspects_new DROP INDEX FKD3FD9F95EDCD4A96, DROP FOREIGN KEY FKD3FD9F95EDCD4A96; -- (optional) -ALTER TABLE avm_child_entries DROP INDEX fk_avm_ce_child, DROP FOREIGN KEY fk_avm_ce_child; +ALTER TABLE avm_child_entries DROP INDEX fk_avm_ce_child, DROP FOREIGN KEY fk_avm_ce_child; --(optional) -ALTER TABLE avm_child_entries DROP INDEX fk_avm_ce_parent, DROP FOREIGN KEY fk_avm_ce_parent; +ALTER TABLE avm_child_entries DROP INDEX fk_avm_ce_parent, DROP FOREIGN KEY fk_avm_ce_parent; --(optional) -ALTER TABLE avm_history_links DROP INDEX fk_avm_hl_desc, DROP FOREIGN KEY fk_avm_hl_desc; +ALTER TABLE avm_history_links DROP INDEX fk_avm_hl_desc, DROP FOREIGN KEY fk_avm_hl_desc; --(optional) -ALTER TABLE avm_history_links DROP INDEX fk_avm_hl_ancestor, DROP FOREIGN KEY fk_avm_hl_ancestor; +ALTER TABLE avm_history_links DROP INDEX fk_avm_hl_ancestor, DROP FOREIGN KEY fk_avm_hl_ancestor; --(optional) -ALTER TABLE avm_merge_links DROP INDEX fk_avm_ml_to, DROP FOREIGN KEY fk_avm_ml_to; +ALTER TABLE avm_merge_links DROP INDEX fk_avm_ml_to, DROP FOREIGN KEY fk_avm_ml_to; --(optional) -ALTER TABLE avm_merge_links DROP INDEX fk_avm_ml_from, DROP FOREIGN KEY fk_avm_ml_from; +ALTER TABLE avm_merge_links DROP INDEX fk_avm_ml_from, DROP FOREIGN KEY fk_avm_ml_from; --(optional) -ALTER TABLE avm_node_properties DROP INDEX idx_avm_np_name; +ALTER TABLE avm_node_properties DROP INDEX idx_avm_np_name; --(optional) -ALTER TABLE avm_node_properties DROP INDEX fk_avm_np_node, DROP FOREIGN KEY fk_avm_np_node; +ALTER TABLE avm_node_properties DROP INDEX fk_avm_np_node, DROP FOREIGN KEY fk_avm_np_node; --(optional) ALTER TABLE avm_node_properties_new DROP INDEX FK44A37C8A6BD529F3, DROP FOREIGN KEY FK44A37C8A6BD529F3; -- (optional) -ALTER TABLE avm_nodes DROP INDEX fk_avm_n_acl, DROP FOREIGN KEY fk_avm_n_acl; +ALTER TABLE avm_nodes DROP INDEX fk_avm_n_acl, DROP FOREIGN KEY fk_avm_n_acl; --(optional) -ALTER TABLE avm_nodes DROP INDEX fk_avm_n_store, DROP FOREIGN KEY fk_avm_n_store; +ALTER TABLE avm_nodes DROP INDEX fk_avm_n_store, DROP FOREIGN KEY fk_avm_n_store; --(optional) -ALTER TABLE avm_store_properties DROP INDEX idx_avm_sp_name; +ALTER TABLE avm_store_properties DROP INDEX idx_avm_sp_name; --(optional) -ALTER TABLE avm_store_properties DROP INDEX fk_avm_sp_store, DROP FOREIGN KEY fk_avm_sp_store; +ALTER TABLE avm_store_properties DROP INDEX fk_avm_sp_store, DROP FOREIGN KEY fk_avm_sp_store; --(optional) -ALTER TABLE avm_stores DROP INDEX fk_avm_s_root, DROP FOREIGN KEY fk_avm_s_root; +ALTER TABLE avm_stores DROP INDEX fk_avm_s_root, DROP FOREIGN KEY fk_avm_s_root; --(optional) ALTER TABLE avm_version_layered_node_entry DROP INDEX FK182E672DEB9D70C, DROP FOREIGN KEY FK182E672DEB9D70C; -- (optional) -ALTER TABLE avm_version_roots DROP INDEX idx_avm_vr_version; +ALTER TABLE avm_version_roots DROP INDEX idx_avm_vr_version; --(optional) -ALTER TABLE avm_version_roots DROP INDEX fk_avm_vr_root, DROP FOREIGN KEY fk_avm_vr_root; +ALTER TABLE avm_version_roots DROP INDEX fk_avm_vr_root, DROP FOREIGN KEY fk_avm_vr_root; --(optional) -ALTER TABLE avm_version_roots DROP INDEX fk_avm_vr_store, DROP FOREIGN KEY fk_avm_vr_store; +ALTER TABLE avm_version_roots DROP INDEX fk_avm_vr_store, DROP FOREIGN KEY fk_avm_vr_store; --(optional) -- -- Record script finish diff --git a/config/alfresco/dbscripts/upgrade/2.2/org.hibernate.dialect.MySQLInnoDBDialect/upgrade-2-move-qnames.sql b/config/alfresco/dbscripts/upgrade/2.2/org.hibernate.dialect.MySQLInnoDBDialect/upgrade-2-move-qnames.sql index bda2ee8f37..4bfbb9a865 100644 --- a/config/alfresco/dbscripts/upgrade/2.2/org.hibernate.dialect.MySQLInnoDBDialect/upgrade-2-move-qnames.sql +++ b/config/alfresco/dbscripts/upgrade/2.2/org.hibernate.dialect.MySQLInnoDBDialect/upgrade-2-move-qnames.sql @@ -79,35 +79,35 @@ CREATE INDEX tidx_tqn_ln ON t_qnames (localname); -- Populate the table with all known static QNames INSERT INTO t_qnames (qname) ( - SELECT type_qname FROM alf_node + SELECT DISTINCT type_qname FROM alf_node ); INSERT INTO t_qnames (qname) ( - SELECT qname FROM alf_node_aspects + SELECT DISTINCT qname FROM alf_node_aspects ); INSERT INTO t_qnames (qname) ( - SELECT qname FROM alf_node_properties + SELECT DISTINCT qname FROM alf_node_properties ); INSERT INTO t_qnames (qname) ( - SELECT name FROM avm_aspects_new + SELECT DISTINCT name FROM avm_aspects_new ); INSERT INTO t_qnames (qname) ( - SELECT qname FROM avm_node_properties_new + SELECT DISTINCT qname FROM avm_node_properties_new ); INSERT INTO t_qnames (qname) ( - SELECT qname FROM avm_store_properties + SELECT DISTINCT qname FROM avm_store_properties ); INSERT INTO t_qnames (qname) ( - SELECT type_qname FROM alf_node_assoc + SELECT DISTINCT type_qname FROM alf_node_assoc ); INSERT INTO t_qnames (qname) ( - SELECT type_qname FROM alf_child_assoc + SELECT DISTINCT type_qname FROM alf_child_assoc ); -- Extract the namespace and localnames from the QNames UPDATE t_qnames SET namespace = SUBSTR(SUBSTRING_INDEX(qname, '}', 1), 2); @@ -159,6 +159,8 @@ ALTER TABLE alf_node MODIFY COLUMN type_qname_id BIGINT NOT NULL AFTER uuid; -- -- DATA REPLACEMENT: alf_node_aspects.qname +-- Due to the the potentially-missing primary key on the original table, it is +-- possible to have duplicates. These are removed. -- ALTER TABLE alf_node_aspects DROP PRIMARY KEY; -- (optional) ALTER TABLE alf_node_aspects ADD COLUMN qname_id BIGINT NULL AFTER node_id; @@ -171,6 +173,33 @@ UPDATE alf_node_aspects na set na.qname_id = ); ALTER TABLE alf_node_aspects DROP COLUMN qname; ALTER TABLE alf_node_aspects MODIFY COLUMN qname_id BIGINT NOT NULL AFTER node_id; +CREATE TABLE t_dup_aspects +( + node_id BIGINT NOT NULL, + qname_id BIGINT NOT NULL +); +INSERT INTO t_dup_aspects (node_id, qname_id) +( + SELECT + node_id, qname_id + FROM + alf_node_aspects + GROUP BY + node_id, qname_id + HAVING + count(*) > 1 +); +DELETE FROM alf_node_aspects na + USING alf_node_aspects na + JOIN t_dup_aspects t ON (t.node_id = na.node_id AND t.qname_id = na.qname_id); +INSERT INTO alf_node_aspects (node_id, qname_id) +( + SELECT + node_id, qname_id + FROM + t_dup_aspects +); +DROP TABLE t_dup_aspects; ALTER TABLE alf_node_aspects ADD PRIMARY KEY (node_id, qname_id); -- diff --git a/source/java/org/alfresco/repo/avm/AVMServicePermissionsTest.java b/source/java/org/alfresco/repo/avm/AVMServicePermissionsTest.java index 1ce18ff183..8a0b56fc52 100644 --- a/source/java/org/alfresco/repo/avm/AVMServicePermissionsTest.java +++ b/source/java/org/alfresco/repo/avm/AVMServicePermissionsTest.java @@ -428,6 +428,13 @@ public class AVMServicePermissionsTest extends TestCase finally { avmService.purgeStore(storeName); + avmService.purgeStore(storeName + "-layer-base"); + avmService.purgeStore(storeName + "-layer-a"); + avmService.purgeStore(storeName + "-layer-b"); + avmService.purgeStore(storeName + "-layer-c"); + avmService.purgeStore(storeName + "-layer-d"); + avmService.purgeStore(storeName + "-layer-layer-base"); + avmService.purgeStore(storeName + "-layer-layer-layer-base"); } } @@ -589,6 +596,13 @@ public class AVMServicePermissionsTest extends TestCase finally { avmService.purgeStore(storeName); + avmService.purgeStore(storeName + "-layer-base"); + avmService.purgeStore(storeName + "-layer-a"); + avmService.purgeStore(storeName + "-layer-b"); + avmService.purgeStore(storeName + "-layer-c"); + avmService.purgeStore(storeName + "-layer-d"); + avmService.purgeStore(storeName + "-layer-layer-base"); + avmService.purgeStore(storeName + "-layer-layer-layer-base"); } } @@ -742,6 +756,13 @@ public class AVMServicePermissionsTest extends TestCase finally { avmService.purgeStore(storeName); + avmService.purgeStore(storeName + "-layer-base"); + avmService.purgeStore(storeName + "-layer-a"); + avmService.purgeStore(storeName + "-layer-b"); + avmService.purgeStore(storeName + "-layer-c"); + avmService.purgeStore(storeName + "-layer-d"); + avmService.purgeStore(storeName + "-layer-layer-base"); + avmService.purgeStore(storeName + "-layer-layer-layer-base"); } } @@ -1622,6 +1643,8 @@ public class AVMServicePermissionsTest extends TestCase finally { avmService.purgeStore(storeName); + avmService.purgeStore(storeName+"-a-"); + } } @@ -1988,6 +2011,7 @@ public class AVMServicePermissionsTest extends TestCase finally { avmService.purgeStore(storeName); + avmService.purgeStore(storeName+"-a-"); } } @@ -2306,6 +2330,7 @@ public class AVMServicePermissionsTest extends TestCase finally { avmService.purgeStore(storeName); + avmService.purgeStore(storeName+"-a-"); } } @@ -2383,6 +2408,7 @@ public class AVMServicePermissionsTest extends TestCase finally { avmService.purgeStore(storeName); + avmService.purgeStore(storeName+"-a-"); } } } diff --git a/source/java/org/alfresco/repo/domain/PropertyValue.java b/source/java/org/alfresco/repo/domain/PropertyValue.java index 333aba4fd3..0e56d6479f 100644 --- a/source/java/org/alfresco/repo/domain/PropertyValue.java +++ b/source/java/org/alfresco/repo/domain/PropertyValue.java @@ -771,6 +771,14 @@ public class PropertyValue implements Cloneable, Serializable return actualType == null ? null : actualType.getOrdinalNumber(); } + /** + * @return Returns the actual type's String representation + */ + public String getActualTypeString() + { + return actualType == null ? null : actualType.toString(); + } + public void setActualType(Integer actualType) { ValueType type = PropertyValue.valueTypesByOrdinalNumber.get(actualType); diff --git a/source/java/org/alfresco/repo/domain/QNameDAOTest.java b/source/java/org/alfresco/repo/domain/QNameDAOTest.java index 5ab3a4c0ce..c5b775b6ce 100644 --- a/source/java/org/alfresco/repo/domain/QNameDAOTest.java +++ b/source/java/org/alfresco/repo/domain/QNameDAOTest.java @@ -200,8 +200,8 @@ public class QNameDAOTest extends TestCase readyLatch.await(5, TimeUnit.SECONDS); // Let the threads go startLatch.countDown(); - // Wait for them all to be done (within limits) - doneLatch.await(threadCount, TimeUnit.SECONDS); + // Wait for them all to be done (within limit of 10 seconds per thread) + doneLatch.await(threadCount * 10, TimeUnit.SECONDS); if (doneLatch.getCount() > 0) { fail("Still waiting for threads to finish"); diff --git a/source/java/org/alfresco/repo/domain/hibernate/HibernateQNameDAOImpl.java b/source/java/org/alfresco/repo/domain/hibernate/HibernateQNameDAOImpl.java index 20fb4aa5cd..731031648b 100644 --- a/source/java/org/alfresco/repo/domain/hibernate/HibernateQNameDAOImpl.java +++ b/source/java/org/alfresco/repo/domain/hibernate/HibernateQNameDAOImpl.java @@ -35,6 +35,8 @@ import org.alfresco.repo.domain.NamespaceEntity; import org.alfresco.repo.domain.QNameDAO; import org.alfresco.repo.domain.QNameEntity; import org.alfresco.service.namespace.QName; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.hibernate.Query; import org.hibernate.Session; import org.springframework.orm.hibernate3.HibernateCallback; @@ -48,6 +50,8 @@ import org.springframework.orm.hibernate3.support.HibernateDaoSupport; */ public class HibernateQNameDAOImpl extends HibernateDaoSupport implements QNameDAO { + private static Log logger = LogFactory.getLog(HibernateQNameDAOImpl.class); + private static final String QUERY_GET_NS_BY_URI = "qname.GetNamespaceByUri"; private static final String QUERY_GET_QNAME_BY_URI_AND_LOCALNAME = "qname.GetQNameByUriAndLocalName"; @@ -98,6 +102,10 @@ public class HibernateQNameDAOImpl extends HibernateDaoSupport implements QNameD public NamespaceEntity newNamespaceEntity(String namespaceUri) { + if (logger.isDebugEnabled()) + { + logger.debug("Persisting Namespace: " + namespaceUri); + } NamespaceEntity namespace = new NamespaceEntityImpl(); namespace.setUri(namespaceUri); // Persist @@ -186,6 +194,10 @@ public class HibernateQNameDAOImpl extends HibernateDaoSupport implements QNameD public QNameEntity newQNameEntity(QName qname) { + if (logger.isDebugEnabled()) + { + logger.debug("Persisting QName: " + qname); + } final String namespaceUri = qname.getNamespaceURI(); final String localName = qname.getLocalName(); NamespaceEntity namespace = getNamespaceEntity(namespaceUri); diff --git a/source/java/org/alfresco/repo/domain/hibernate/QName.hbm.xml b/source/java/org/alfresco/repo/domain/hibernate/QName.hbm.xml index f4d9c7974a..7d2d72f6f1 100644 --- a/source/java/org/alfresco/repo/domain/hibernate/QName.hbm.xml +++ b/source/java/org/alfresco/repo/domain/hibernate/QName.hbm.xml @@ -59,7 +59,7 @@ - + select namespace from @@ -68,7 +68,7 @@ namespace.uri = :namespaceUri - + select qname from