Merged V3.0 to HEAD

12123: Merged V2.2 to V3.0
      11466: Fixed sql-query DELETE syntax
      11614: Flush after putChild, fix for ETWOTWO-777
      11641: Merged V2.1 to V2.2
         11632: Improvements for AVM index FULL and AUTO rebuild. 
      11646: Upgrade scripts tweaks:
      11650: Added unit test to confirm fix of ETWOTWO-740
      11674: Added missing EHCache definitions for QName, Namespace and Locale caches
      11825: Fixed Eclipse classpath addition of path for Oracle JDBC driver
   12125: ETHREEOH-899: Image transformations do not follow Options
   12127: Merged V2.2 to V3.0
      11675: Node DAO optimizations
      11680: Full Fix for ETWOTWO-777 + more protection for nested write transactions beneath read transactions.
      11729: AVM creates and deletes no longer update the directory mod time - ETWOTWO-801
      11738: Fix for ETWOTWO - fixed check for TX propagation mode
      11748: Fixed ETWOTWO-578: RepositoryWebService fetchMore() does not fetch last node
      11749: Incorporate feedback from ACT-5440: MySQL-specific tweaks to the upgrade scripts
      11750: Moved t_qnames_dyn section to after t_qnames
      11752: Fixed ETWOTWO-734: ImporterComponent uses Lucene queries
      11785: Build Fix:Remove auto created person TX commit fro DB
      11853: Fix for ETWOTWO-687 - missed a case when generating lists of actions for modified files list
      11940: Stress test main method for ETWOTWO-744
      11950: Fixed ETWOTWO-909 and ETWOTWO-911
      11987: Dirty checking for attribute related  DAOs
      12008: Fixed test for transaction-requiring AttributeService
   12128: Merged V2.2 to V3.0
      11530: Merged V2.1 to V2.2
         11499: Defensive clear of the security context to avoid any ticket sharing for a given user - ETWOTWO-326

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@12501 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Kevin Roast
2008-12-18 17:23:44 +00:00
parent ab4bdfc013
commit 16861e9117
32 changed files with 853 additions and 315 deletions

View File

@@ -40,54 +40,6 @@ CREATE TABLE alf_qname
UNIQUE (ns_id, local_name)
) ENGINE=InnoDB;
-- Create temporary table for dynamic (child) QNames
CREATE TABLE t_qnames_dyn
(
qname VARCHAR(255) NOT NULL,
namespace VARCHAR(100),
namespace_id BIGINT,
local_name VARCHAR(200),
INDEX tidx_qnd_qn (qname),
INDEX tidx_qnd_ns (namespace)
) ENGINE=InnoDB;
-- Populate the table with the child association paths
-- Query OK, 415312 rows affected (1 min 11.91 sec)
INSERT INTO t_qnames_dyn (qname)
(
SELECT distinct(qname) FROM alf_child_assoc
);
-- Extract the Namespace
-- Query OK, 415312 rows affected (20.03 sec)
UPDATE t_qnames_dyn SET namespace = CONCAT('FILLER-', SUBSTR(SUBSTRING_INDEX(qname, '}', 1), 2));
-- Extract the Localname
-- Query OK, 415312 rows affected (16.22 sec)
UPDATE t_qnames_dyn SET local_name = SUBSTRING_INDEX(qname, '}', -1);
-- Move the namespaces to the their new home
-- Query OK, 4 rows affected (34.59 sec)
INSERT INTO alf_namespace (uri, version)
(
SELECT
distinct(x.namespace), 1
FROM
(
SELECT t.namespace, n.uri FROM t_qnames_dyn t LEFT OUTER JOIN alf_namespace n ON (n.uri = t.namespace)
) x
WHERE
x.uri IS NULL
);
-- Record the new namespace IDs
-- Query OK, 415312 rows affected (10.41 sec)
UPDATE t_qnames_dyn t SET t.namespace_id = (SELECT ns.id FROM alf_namespace ns WHERE ns.uri = t.namespace);
-- Recoup some storage
ALTER TABLE t_qnames_dyn DROP COLUMN namespace;
OPTIMIZE TABLE t_qnames_dyn;
-- Create temporary table to hold static QNames
CREATE TABLE t_qnames
(
@@ -188,6 +140,62 @@ UPDATE t_qnames t SET t.qname_id =
WHERE ns.uri = t.namespace AND q.local_name = t.localname
);
-- ----------------------------
-- SHORTCUT:
-- Up to this point, we have been extracting static data. The data can be dumped and loaded
-- to do faster testing of the ugprades:
-- mysqldump derek1 alf_qname alf_namespace t_qnames > extracted-qnames.sql
-- Load the dump file and continue from this point
-- ----------------------------
-- Create temporary table for dynamic (child) QNames
CREATE TABLE t_qnames_dyn
(
qname VARCHAR(255) NOT NULL,
namespace VARCHAR(100),
namespace_id BIGINT,
local_name VARCHAR(200),
INDEX tidx_qnd_qn (qname),
INDEX tidx_qnd_ns (namespace)
) ENGINE=InnoDB;
-- Populate the table with the child association paths
-- Query OK, 415312 rows affected (1 min 11.91 sec)
INSERT INTO t_qnames_dyn (qname)
(
SELECT distinct(qname) FROM alf_child_assoc
);
-- Extract the Namespace
-- Query OK, 415312 rows affected (20.03 sec)
UPDATE t_qnames_dyn SET namespace = CONCAT('FILLER-', SUBSTR(SUBSTRING_INDEX(qname, '}', 1), 2));
-- Extract the Localname
-- Query OK, 415312 rows affected (16.22 sec)
UPDATE t_qnames_dyn SET local_name = SUBSTRING_INDEX(qname, '}', -1);
-- Move the namespaces to the their new home
-- Query OK, 4 rows affected (34.59 sec)
INSERT INTO alf_namespace (uri, version)
(
SELECT
distinct(x.namespace), 1
FROM
(
SELECT t.namespace, n.uri FROM t_qnames_dyn t LEFT OUTER JOIN alf_namespace n ON (n.uri = t.namespace)
) x
WHERE
x.uri IS NULL
);
-- Record the new namespace IDs
-- Query OK, 415312 rows affected (10.41 sec)
UPDATE t_qnames_dyn t SET t.namespace_id = (SELECT ns.id FROM alf_namespace ns WHERE ns.uri = t.namespace);
-- Recoup some storage
ALTER TABLE t_qnames_dyn DROP COLUMN namespace;
OPTIMIZE TABLE t_qnames_dyn;
-- ----------------------------
-- Populate the Permissions --
-- ----------------------------
@@ -263,24 +271,40 @@ INSERT INTO t_alf_store (version, protocol, identifier, root_node_id)
SELECT 1, protocol, identifier, root_node_id FROM alf_store
;
-- Add type_qname index for nodes
CREATE INDEX tidx_node_tqn ON alf_node (type_qname);
-- Summarize the alf_node_status table
CREATE TABLE t_summary_nstat
(
node_id BIGINT(20) NOT NULL,
transaction_id BIGINT(20) DEFAULT NULL,
PRIMARY KEY (node_id)
) TYPE=InnoDB;
INSERT INTO t_summary_nstat (node_id, transaction_id)
SELECT node_id, transaction_id FROM alf_node_status WHERE node_id IS NOT NULL;
-- Copy data over
LOCK TABLES
t_alf_node WRITE,
alf_node AS n READ,
t_summary_nstat AS nstat READ,
t_alf_store AS s READ,
t_qnames AS q READ
;
INSERT INTO t_alf_node
(
id, version, store_id, uuid, transaction_id, node_deleted, type_qname_id, acl_id,
audit_creator, audit_created, audit_modifier, audit_modified
audit_creator, audit_created, audit_modifier, audit_modified, audit_accessed
)
SELECT
SELECT STRAIGHT_JOIN
n.id, 1, s.id, n.uuid, nstat.transaction_id, false, q.qname_id, n.acl_id,
null, null, null, null
null, null, null, null, null
FROM
alf_node n
JOIN t_qnames q ON (q.qname = n.type_qname)
JOIN alf_node_status nstat ON (nstat.node_id = n.id)
JOIN t_alf_store s ON (s.protocol = nstat.protocol AND s.identifier = nstat.identifier)
JOIN t_summary_nstat nstat ON (nstat.node_id = n.id)
JOIN t_alf_store s ON (s.protocol = n.protocol AND s.identifier = n.identifier)
;
UNLOCK TABLES;
DROP TABLE t_summary_nstat;
-- Hook the store up to the root node
ALTER TABLE t_alf_store
@@ -327,8 +351,8 @@ CREATE TABLE t_alf_child_assoc
version BIGINT NOT NULL,
parent_node_id BIGINT NOT NULL,
type_qname_id BIGINT NOT NULL,
child_node_name VARCHAR(50) NOT NULL,
child_node_name_crc BIGINT NOT NULL,
child_node_name VARCHAR(50) NOT NULL,
child_node_id BIGINT NOT NULL,
qname_ns_id BIGINT NOT NULL,
qname_localname VARCHAR(100) NOT NULL,
@@ -344,24 +368,31 @@ CREATE TABLE t_alf_child_assoc
CONSTRAINT fk_alf_cass_tqn foreign key (type_qname_id) REFERENCES alf_qname (id),
CONSTRAINT fk_alf_cass_qnns foreign key (qname_ns_id) REFERENCES alf_namespace (id),
PRIMARY KEY (id),
UNIQUE (parent_node_id, type_qname_id, child_node_name, child_node_name_crc)
UNIQUE (parent_node_id, type_qname_id, child_node_name_crc, child_node_name)
) TYPE=InnoDB;
-- Query OK, 830217 rows affected (11 min 59.10 sec)
LOCK TABLES
t_alf_child_assoc WRITE,
alf_child_assoc AS ca READ,
t_qnames_dyn AS tqndyn READ,
t_qnames AS tqn READ
;
INSERT INTO t_alf_child_assoc
(
id, version,
parent_node_id, child_node_id,
child_node_name, child_node_name_crc,
parent_node_id,
type_qname_id,
child_node_name_crc, child_node_name,
child_node_id,
qname_ns_id, qname_localname,
is_primary, assoc_index
)
SELECT
SELECT STRAIGHT_JOIN
ca.id, 1,
ca.parent_node_id, ca.child_node_id,
ca.child_node_name, child_node_name_crc,
ca.parent_node_id,
tqn.qname_id,
ca.child_node_name_crc, ca.child_node_name,
ca.child_node_id,
tqndyn.namespace_id, tqndyn.local_name,
ca.is_primary, ca.assoc_index
FROM
@@ -369,6 +400,7 @@ INSERT INTO t_alf_child_assoc
JOIN t_qnames_dyn tqndyn ON (ca.qname = tqndyn.qname)
JOIN t_qnames tqn ON (ca.type_qname = tqn.qname)
;
UNLOCK TABLES;
-- Clean up
DROP TABLE t_qnames_dyn;
@@ -396,20 +428,26 @@ CREATE TABLE t_alf_node_assoc
UNIQUE (source_node_id, target_node_id, type_qname_id)
) TYPE=InnoDB;
LOCK TABLES
t_alf_node_assoc WRITE,
alf_node_assoc AS na READ,
t_qnames AS tqn READ
;
INSERT INTO t_alf_node_assoc
(
id, version,
source_node_id, target_node_id,
type_qname_id
)
SELECT
SELECT STRAIGHT_JOIN
na.id, 1,
na.source_node_id, na.source_node_id,
na.source_node_id, na.target_node_id,
tqn.qname_id
FROM
alf_node_assoc na
JOIN t_qnames tqn ON (na.type_qname = tqn.qname)
;
UNLOCK TABLES;
-- Clean up
DROP TABLE alf_node_assoc;
@@ -463,8 +501,12 @@ CREATE TABLE t_alf_node_aspects
PRIMARY KEY (node_id, qname_id)
) TYPE=InnoDB;
LOCK TABLES
t_alf_node_aspects WRITE,
alf_node_aspects AS na READ,
t_qnames AS tqn READ
;
-- Note the omission of sys:referencable. This is implicit.
-- Query OK, 415051 rows affected (17.59 sec)
INSERT INTO t_alf_node_aspects
(
node_id, qname_id
@@ -476,11 +518,9 @@ INSERT INTO t_alf_node_aspects
alf_node_aspects na
JOIN t_qnames tqn ON (na.qname = tqn.qname)
WHERE
tqn.qname NOT IN
(
'{http://www.alfresco.org/model/system/1.0}referenceable'
)
tqn.qname != '{http://www.alfresco.org/model/system/1.0}referenceable'
;
UNLOCK TABLES;
-- Clean up
DROP TABLE alf_node_aspects;
@@ -609,6 +649,7 @@ ALTER TABLE t_avm_store_properties RENAME TO avm_store_properties;
CREATE TABLE t_avm_node_properties
(
node_id BIGINT NOT NULL,
qname_id BIGINT NOT NULL,
actual_type_n INTEGER NOT NULL,
persisted_type_n INTEGER NOT NULL,
multi_valued BIT NOT NULL,
@@ -618,7 +659,6 @@ CREATE TABLE t_avm_node_properties
double_value DOUBLE PRECISION,
string_value TEXT,
serializable_value BLOB,
qname_id BIGINT NOT NULL,
INDEX fk_avm_nprop_n (node_id),
INDEX fk_avm_nprop_qn (qname_id),
CONSTRAINT fk_avm_nprop_n FOREIGN KEY (node_id) REFERENCES avm_nodes (id),
@@ -722,16 +762,23 @@ CREATE TABLE t_alf_node_properties
) TYPE=InnoDB;
-- Copy values over
LOCK TABLES
t_alf_node_properties WRITE,
alf_node_properties AS np READ,
t_prop_types AS ptypes_actual READ,
t_prop_types AS ptypes_persisted READ,
t_qnames AS tqn READ
;
INSERT INTO t_alf_node_properties
(
node_id, qname_id, list_index, locale_id,
node_id, qname_id, locale_id, list_index,
actual_type_n, persisted_type_n,
boolean_value, long_value, float_value, double_value,
string_value,
serializable_value
)
SELECT
np.node_id, tqn.qname_id, -1, 1,
np.node_id, tqn.qname_id, 1, -1,
ptypes_actual.type_id, ptypes_persisted.type_id,
np.boolean_value, np.long_value, np.float_value, np.double_value,
np.string_value,
@@ -744,6 +791,7 @@ INSERT INTO t_alf_node_properties
WHERE
np.attribute_value IS NULL
;
UNLOCK TABLES;
-- Update cm:auditable properties on the nodes
UPDATE t_alf_node n SET audit_creator =
(
@@ -798,6 +846,19 @@ UPDATE t_alf_node n SET audit_modified =
qn.local_name = 'modified'
);
-- Remove the unused cm:auditable properties
-- SHORTCUT:
-- The qname_id values can be determined up front
-- SELECT * FROM
-- alf_qname
-- JOIN alf_namespace ON (alf_qname.ns_id = alf_namespace.id)
-- WHERE
-- alf_namespace.uri = 'FILLER-http://www.alfresco.org/model/content/1.0' AND
-- alf_qname.local_name IN ('creator', 'created', 'modifier', 'modified')
-- ;
-- DELETE t_alf_node_properties
-- FROM t_alf_node_properties
-- WHERE
-- qname_id IN (13, 14, 23, 24);
DELETE t_alf_node_properties
FROM t_alf_node_properties
JOIN alf_qname ON (t_alf_node_properties.qname_id = alf_qname.id)
@@ -810,14 +871,14 @@ DELETE t_alf_node_properties
-- Copy all MLText values over
INSERT INTO t_alf_node_properties
(
node_id, qname_id, list_index, locale_id,
node_id, qname_id, locale_id, list_index,
actual_type_n, persisted_type_n,
boolean_value, long_value, float_value, double_value,
string_value,
serializable_value
)
SELECT
np.node_id, tqn.qname_id, -1, loc.id,
np.node_id, tqn.qname_id, loc.id, -1,
-1, 0,
FALSE, 0, 0, 0,
a2.string_value,
@@ -838,6 +899,7 @@ UPDATE t_alf_node_properties
SET actual_type_n = 9, persisted_type_n = 9
WHERE actual_type_n = -1 AND serializable_value IS NOT NULL
;
DELETE FROM t_alf_node_properties WHERE actual_type_n = -1;
-- Delete the node properties and move the fixed values over
DROP TABLE alf_node_properties;

View File

@@ -63,20 +63,38 @@ INSERT INTO t_alf_store (version, protocol, identifier, root_node_id)
SELECT 1, protocol, identifier, root_node_id FROM alf_store
;
-- Summarize the alf_node_status table
CREATE TABLE t_summary_nstat
(
node_id BIGINT(20) NOT NULL,
transaction_id BIGINT(20) DEFAULT NULL,
PRIMARY KEY (node_id)
) TYPE=InnoDB;
INSERT INTO t_summary_nstat (node_id, transaction_id)
SELECT node_id, transaction_id FROM alf_node_status WHERE node_id IS NOT NULL;
-- Copy data over
LOCK TABLES
t_alf_node WRITE,
alf_node AS n READ,
t_summary_nstat AS nstat READ,
t_alf_store AS s READ
;
INSERT INTO t_alf_node
(
id, version, store_id, uuid, transaction_id, node_deleted, type_qname_id, acl_id,
audit_creator, audit_created, audit_modifier, audit_modified
audit_creator, audit_created, audit_modifier, audit_modified, audit_accessed
)
SELECT
SELECT STRAIGHT_JOIN
n.id, 1, s.id, n.uuid, nstat.transaction_id, false, n.type_qname_id, n.acl_id,
null, null, null, null
null, null, null, null, null
FROM
alf_node n
JOIN alf_node_status nstat ON (nstat.node_id = n.id)
JOIN t_alf_store s ON (s.protocol = nstat.protocol AND s.identifier = nstat.identifier)
JOIN t_summary_nstat nstat ON (nstat.node_id = n.id)
JOIN t_alf_store s ON (s.protocol = n.protocol AND s.identifier = n.identifier)
;
UNLOCK TABLES;
DROP TABLE t_summary_nstat;
-- Hook the store up to the root node
ALTER TABLE t_alf_store
@@ -123,8 +141,8 @@ CREATE TABLE t_alf_child_assoc
version BIGINT NOT NULL,
parent_node_id BIGINT NOT NULL,
type_qname_id BIGINT NOT NULL,
child_node_name VARCHAR(50) NOT NULL,
child_node_name_crc BIGINT NOT NULL,
child_node_name VARCHAR(50) NOT NULL,
child_node_id BIGINT NOT NULL,
qname_ns_id BIGINT NOT NULL,
qname_localname VARCHAR(100) NOT NULL,
@@ -140,28 +158,35 @@ CREATE TABLE t_alf_child_assoc
CONSTRAINT fk_alf_cass_tqn foreign key (type_qname_id) REFERENCES alf_qname (id),
CONSTRAINT fk_alf_cass_qnns foreign key (qname_ns_id) REFERENCES alf_namespace (id),
PRIMARY KEY (id),
UNIQUE (parent_node_id, type_qname_id, child_node_name, child_node_name_crc)
UNIQUE (parent_node_id, type_qname_id, child_node_name_crc, child_node_name)
) TYPE=InnoDB;
LOCK TABLES
t_alf_child_assoc WRITE,
alf_child_assoc AS ca READ
;
INSERT INTO t_alf_child_assoc
(
id, version,
parent_node_id, child_node_id,
child_node_name, child_node_name_crc,
parent_node_id,
type_qname_id,
child_node_name_crc, child_node_name,
child_node_id,
qname_ns_id, qname_localname,
is_primary, assoc_index
)
SELECT
SELECT STRAIGHT_JOIN
ca.id, 1,
ca.parent_node_id, ca.child_node_id,
ca.child_node_name, child_node_name_crc,
ca.parent_node_id,
ca.type_qname_id,
ca.child_node_name_crc, ca.child_node_name,
ca.child_node_id,
ca.qname_ns_id, ca.qname_localname,
ca.is_primary, ca.assoc_index
FROM
alf_child_assoc ca
;
UNLOCK TABLES;
-- Clean up
DROP TABLE alf_child_assoc;
@@ -188,19 +213,24 @@ CREATE TABLE t_alf_node_assoc
UNIQUE (source_node_id, target_node_id, type_qname_id)
) TYPE=InnoDB;
LOCK TABLES
t_alf_node_assoc WRITE,
alf_node_assoc AS na READ
;
INSERT INTO t_alf_node_assoc
(
id, version,
source_node_id, target_node_id,
type_qname_id
)
SELECT
SELECT STRAIGHT_JOIN
na.id, 1,
na.source_node_id, na.source_node_id,
na.source_node_id, na.target_node_id,
na.type_qname_id
FROM
alf_node_assoc na
;
UNLOCK TABLES;
-- Clean up
DROP TABLE alf_node_assoc;
@@ -254,6 +284,12 @@ CREATE TABLE t_alf_node_aspects
PRIMARY KEY (node_id, qname_id)
) TYPE=InnoDB;
LOCK TABLES
t_alf_node_aspects WRITE,
alf_node_aspects AS na READ,
alf_qname AS qn READ,
alf_namespace AS ns READ
;
-- Note the omission of sys:referencable. This is implicit.
INSERT INTO t_alf_node_aspects
(
@@ -270,6 +306,7 @@ INSERT INTO t_alf_node_aspects
ns.uri != 'http://www.alfresco.org/model/system/1.0' OR
qn.local_name != 'referenceable'
;
UNLOCK TABLES;
-- Clean up
DROP TABLE alf_node_aspects;
@@ -353,6 +390,7 @@ ALTER TABLE t_avm_store_properties RENAME TO avm_store_properties;
CREATE TABLE t_avm_node_properties
(
node_id BIGINT NOT NULL,
qname_id BIGINT NOT NULL,
actual_type_n INTEGER NOT NULL,
persisted_type_n INTEGER NOT NULL,
multi_valued BIT NOT NULL,
@@ -362,7 +400,6 @@ CREATE TABLE t_avm_node_properties
double_value DOUBLE PRECISION,
string_value TEXT,
serializable_value BLOB,
qname_id BIGINT NOT NULL,
INDEX fk_avm_nprop_n (node_id),
INDEX fk_avm_nprop_qn (qname_id),
CONSTRAINT fk_avm_nprop_n FOREIGN KEY (node_id) REFERENCES avm_nodes (id),
@@ -441,16 +478,20 @@ CREATE TABLE t_alf_node_properties
) TYPE=InnoDB;
-- Copy values over
LOCK TABLES
t_alf_node_properties WRITE,
alf_node_properties AS np READ
;
INSERT INTO t_alf_node_properties
(
node_id, qname_id, list_index, locale_id,
node_id, qname_id, locale_id, list_index,
actual_type_n, persisted_type_n,
boolean_value, long_value, float_value, double_value,
string_value,
serializable_value
)
SELECT
np.node_id, np.qname_id, -1, 1,
np.node_id, np.qname_id, 1, -1,
np.actual_type_n, np.persisted_type_n,
np.boolean_value, np.long_value, np.float_value, np.double_value,
np.string_value,
@@ -460,6 +501,7 @@ INSERT INTO t_alf_node_properties
WHERE
np.attribute_value IS NULL
;
UNLOCK TABLES;
-- Update cm:auditable properties on the nodes
UPDATE t_alf_node n SET audit_creator =
(
@@ -553,6 +595,7 @@ UPDATE t_alf_node_properties
SET actual_type_n = 9, persisted_type_n = 9
WHERE actual_type_n = -1 AND serializable_value IS NOT NULL
;
DELETE FROM t_alf_node_properties WHERE actual_type_n = -1;
-- Delete the node properties and move the fixed values over
DROP TABLE alf_node_properties;