diff --git a/config/alfresco/dbscripts/upgrade/3.3/org.hibernate.dialect.MySQLInnoDBDialect/modify-index-permission_id.sql b/config/alfresco/dbscripts/upgrade/3.3/org.hibernate.dialect.MySQLInnoDBDialect/modify-index-permission_id.sql index 38a2d42c0f..a29679d1f7 100644 --- a/config/alfresco/dbscripts/upgrade/3.3/org.hibernate.dialect.MySQLInnoDBDialect/modify-index-permission_id.sql +++ b/config/alfresco/dbscripts/upgrade/3.3/org.hibernate.dialect.MySQLInnoDBDialect/modify-index-permission_id.sql @@ -36,7 +36,84 @@ INSERT INTO alf_tmp_min_ace (min, permission_id, authority_id, allowed, applies) GROUP BY ace1.permission_id, ace1.authority_id, ace1.allowed, ace1.applies ; - + + +CREATE TABLE alf_tmp_acl_members ( + id BIGINT NOT NULL, + min BIGINT NOT NULL, + acl_id BIGINT NOT NULL, + pos BIGINT, + ace_id BIGINT NOT NULL, + PRIMARY KEY (id), + UNIQUE (min, acl_id, pos, ace_id) +) ENGINE=InnoDB; + + +INSERT INTO + alf_tmp_acl_members + SELECT + mem.id, help.min, mem.acl_id, mem.pos, mem.ace_id + FROM + alf_acl_member mem + JOIN + alf_access_control_entry ace + ON + mem.ace_id = ace.id + JOIN + alf_tmp_min_ace help + ON + help.permission_id = ace.permission_id AND + help.authority_id = ace.authority_id AND + help.allowed = ace.allowed AND + help.applies = ace.applies; + + +CREATE TABLE alf_tmp_acl_groups ( + min BIGINT NOT NULL, + acl_id BIGINT NOT NULL, + pos BIGINT, + group_min BIGINT NOT NULL, + UNIQUE (min, acl_id, pos) +) ENGINE=InnoDB; + + +INSERT INTO + alf_tmp_acl_groups + SELECT + mems.min, mems.acl_id, mems.pos, min(mems.ace_id) + FROM + alf_tmp_acl_members mems + GROUP BY + mems.min, mems.acl_id, mems.pos + HAVING + count(*) > 1; + + +DELETE FROM + alf_acl_member +WHERE + id IN ( + SELECT + mems.id + FROM + alf_tmp_acl_members mems + JOIN + alf_tmp_acl_groups groups + ON + mems.min = groups.min AND + mems.acl_id = groups.acl_id AND + mems.pos = groups.pos + WHERE + mems.ace_id <> groups.group_min + ); + + +DROP TABLE + alf_tmp_acl_members; + +DROP TABLE + alf_tmp_acl_groups; + -- Update members to point to the first use of an access control entry UPDATE alf_acl_member mem diff --git a/config/alfresco/dbscripts/upgrade/3.3/org.hibernate.dialect.PostgreSQLDialect/modify-index-permission_id.sql b/config/alfresco/dbscripts/upgrade/3.3/org.hibernate.dialect.PostgreSQLDialect/modify-index-permission_id.sql index bb8e778e02..c57aeb7317 100644 --- a/config/alfresco/dbscripts/upgrade/3.3/org.hibernate.dialect.PostgreSQLDialect/modify-index-permission_id.sql +++ b/config/alfresco/dbscripts/upgrade/3.3/org.hibernate.dialect.PostgreSQLDialect/modify-index-permission_id.sql @@ -38,6 +38,83 @@ INSERT INTO alf_tmp_min_ace (min, permission_id, authority_id, allowed, applies) ; +CREATE TABLE alf_tmp_acl_members ( + id INT8 NOT NULL, + min INT8 NOT NULL, + acl_id INT8 NOT NULL, + pos INT8, + ace_id INT8 NOT NULL, + PRIMARY KEY (id), + UNIQUE (min, acl_id, pos, ace_id) +); + + +INSERT INTO + alf_tmp_acl_members + SELECT + mem.id, help.min, mem.acl_id, mem.pos, mem.ace_id + FROM + alf_acl_member mem + JOIN + alf_access_control_entry ace + ON + mem.ace_id = ace.id + JOIN + alf_tmp_min_ace help + ON + help.permission_id = ace.permission_id AND + help.authority_id = ace.authority_id AND + help.allowed = ace.allowed AND + help.applies = ace.applies; + + +CREATE TABLE alf_tmp_acl_groups ( + min INT8 NOT NULL, + acl_id INT8 NOT NULL, + pos INT8, + group_min INT8 NOT NULL, + UNIQUE (min, acl_id, pos) +); + + +INSERT INTO + alf_tmp_acl_groups + SELECT + mems.min, mems.acl_id, mems.pos, min(mems.ace_id) + FROM + alf_tmp_acl_members mems + GROUP BY + mems.min, mems.acl_id, mems.pos + HAVING + count(*) > 1; + + +DELETE FROM + alf_acl_member +WHERE + id IN ( + SELECT + mems.id + FROM + alf_tmp_acl_members mems + JOIN + alf_tmp_acl_groups groups + ON + mems.min = groups.min AND + mems.acl_id = groups.acl_id AND + mems.pos = groups.pos + WHERE + mems.ace_id <> groups.group_min + ); + + +DROP TABLE + alf_tmp_acl_members; + +DROP TABLE + alf_tmp_acl_groups; + + -- Update members to point to the first use of an access control entry UPDATE alf_acl_member mem SET ace_id = (SELECT help.min FROM alf_access_control_entry ace