diff --git a/config/alfresco/bootstrap-context.xml b/config/alfresco/bootstrap-context.xml index 4b3adcd99b..54f1bfa245 100644 --- a/config/alfresco/bootstrap-context.xml +++ b/config/alfresco/bootstrap-context.xml @@ -94,6 +94,7 @@ + diff --git a/config/alfresco/dbscripts/upgrade/2.2/org.hibernate.dialect.Dialect/AlfrescoSchemaUpdate-2.2-CleanNodeStatuses.sql b/config/alfresco/dbscripts/upgrade/2.2/org.hibernate.dialect.Dialect/AlfrescoSchemaUpdate-2.2-CleanNodeStatuses.sql new file mode 100644 index 0000000000..d4889a4a6d --- /dev/null +++ b/config/alfresco/dbscripts/upgrade/2.2/org.hibernate.dialect.Dialect/AlfrescoSchemaUpdate-2.2-CleanNodeStatuses.sql @@ -0,0 +1,22 @@ +-- +-- Title: Clean duplicate alf_node_status entries +-- Database: Generic +-- Since: V3.1 schema 1011 +-- Author: Derek Hulley +-- +-- Please contact support@alfresco.com if you need assistance with the upgrade. +-- +-- Does nothing. The script is only meaningful for DBs supported by Alfresco on V2.1 +-- This script does not need to run if the server has already been upgraded to schema 90 or later + +-- +-- Record script finish +-- +DELETE FROM alf_applied_patch WHERE id = 'patch.db-V2.2-CleanNodeStatuses'; +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-CleanNodeStatuses', 'Manually executed script upgrade V2.2: Clean alf_node_status table', + 0, 89, -1, 90, null, 'UNKOWN', ${true}, ${true}, 'Script completed' + ); diff --git a/config/alfresco/dbscripts/upgrade/2.2/org.hibernate.dialect.MySQLInnoDBDialect/AlfrescoSchemaUpdate-2.2-CleanNodeStatuses.sql b/config/alfresco/dbscripts/upgrade/2.2/org.hibernate.dialect.MySQLInnoDBDialect/AlfrescoSchemaUpdate-2.2-CleanNodeStatuses.sql new file mode 100644 index 0000000000..3fca009a94 --- /dev/null +++ b/config/alfresco/dbscripts/upgrade/2.2/org.hibernate.dialect.MySQLInnoDBDialect/AlfrescoSchemaUpdate-2.2-CleanNodeStatuses.sql @@ -0,0 +1,58 @@ +-- +-- Title: Clean duplicate alf_node_status entries +-- Database: MySQL +-- Since: V3.1 schema 1011 +-- Author: Derek Hulley +-- +-- Please contact support@alfresco.com if you need assistance with the upgrade. +-- +-- Cleans out duplicate alf_node_status entries for V2.1 installations. +-- This script does not need to run if the server has already been upgraded to schema 90 or later + +CREATE TABLE t_node_status +( + node_id INTEGER NOT NULL, + transaction_id BIGINT(20) NOT NULL, + PRIMARY KEY (node_id) +); +INSERT INTO t_node_status +( + SELECT c.node_id, c.transaction_id FROM + ( + SELECT COUNT(node_id) x, ns.node_id, ns.transaction_id FROM alf_node_status ns GROUP BY node_id + ) c + WHERE c.x > 1 +); +DELETE FROM alf_node_status WHERE node_id IN (SELECT node_id FROM t_node_status); +INSERT INTO alf_node_status (protocol, identifier, guid, node_id, transaction_id, version) +( + SELECT n.protocol, n.identifier, n.uuid, n.id, tns.transaction_id, 0 FROM t_node_status tns JOIN alf_node n ON (n.id = tns.node_id) +); +DROP TABLE t_node_status; + +DELETE FROM alf_node_status WHERE node_id IS NULL; + +UPDATE alf_node_status ns SET ns.protocol = + ( + SELECT n.protocol FROM alf_node n WHERE n.id = ns.node_id + ); + +DELETE + alf_transaction + FROM + alf_transaction + LEFT JOIN alf_node_status ON (alf_node_status.transaction_id = alf_transaction.id) + WHERE + alf_node_status.node_id is null; + +-- +-- Record script finish +-- +DELETE FROM alf_applied_patch WHERE id = 'patch.db-V2.2-CleanNodeStatuses'; +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-CleanNodeStatuses', 'Manually executed script upgrade V2.2: Clean alf_node_status table', + 0, 89, -1, 90, null, 'UNKOWN', ${true}, ${true}, 'Script completed' + ); diff --git a/config/alfresco/patch/patch-services-context.xml b/config/alfresco/patch/patch-services-context.xml index f8b3ed1a7d..4a552f085e 100644 --- a/config/alfresco/patch/patch-services-context.xml +++ b/config/alfresco/patch/patch-services-context.xml @@ -1148,6 +1148,21 @@ + + patch.db-V2.2-CleanNodeStatuses + patch.schemaUpgradeScript.description + 0 + 89 + 90 + + classpath:alfresco/dbscripts/upgrade/2.2/${db.script.dialect}/AlfrescoSchemaUpdate-2.2-CleanNodeStatuses.sql + + + + + + + patch.db-V2.2-0-CreateMissingTables patch.schemaUpgradeScript.description @@ -1159,6 +1174,7 @@ + @@ -1181,6 +1197,7 @@ + diff --git a/source/java/org/alfresco/repo/domain/schema/SchemaBootstrap.java b/source/java/org/alfresco/repo/domain/schema/SchemaBootstrap.java index bd46a9f6ec..8584ac2572 100644 --- a/source/java/org/alfresco/repo/domain/schema/SchemaBootstrap.java +++ b/source/java/org/alfresco/repo/domain/schema/SchemaBootstrap.java @@ -889,6 +889,8 @@ public class SchemaBootstrap extends AbstractLifecycleBean File scriptFile, String scriptUrl) throws Exception { + final Dialect dialect = Dialect.getDialect(cfg.getProperties()); + StringBuilder executedStatements = executedStatementsThreadLocal.get(); if (executedStatements == null) { @@ -917,6 +919,24 @@ public class SchemaBootstrap extends AbstractLifecycleBean String fetchVarName = null; String fetchColumnName = null; Map varAssignments = new HashMap(13); + // Special variable assignments: + if (dialect instanceof PostgreSQLDialect) + { + // Needs 1/0 for true/false + varAssignments.put("true", "true"); + varAssignments.put("false", "false"); + varAssignments.put("TRUE", "TRUE"); + varAssignments.put("FALSE", "FALSE"); + } + else + { + // Needs true/false as strings + varAssignments.put("true", "1"); + varAssignments.put("false", "0"); + varAssignments.put("TRUE", "1"); + varAssignments.put("FALSE", "0"); + } + while(true) { String sqlOriginal = reader.readLine();