diff --git a/source/java/org/alfresco/repo/domain/schema/SchemaBootstrap.java b/source/java/org/alfresco/repo/domain/schema/SchemaBootstrap.java index de477ee0c3..8e079426d3 100644 --- a/source/java/org/alfresco/repo/domain/schema/SchemaBootstrap.java +++ b/source/java/org/alfresco/repo/domain/schema/SchemaBootstrap.java @@ -172,6 +172,7 @@ public class SchemaBootstrap extends AbstractLifecycleBean public static final int DEFAULT_LOCK_RETRY_WAIT_SECONDS = 5; public static final int DEFAULT_MAX_STRING_LENGTH = 1024; + public static final int DEFAULT_MAX_STRING_LENGTH_NDB = 400; private static volatile int maxStringLength = DEFAULT_MAX_STRING_LENGTH; private Dialect dialect; @@ -181,15 +182,17 @@ public class SchemaBootstrap extends AbstractLifecycleBean /** * @see #DEFAULT_MAX_STRING_LENGTH */ - private static final void setMaxStringLength(int length) + private static final void setMaxStringLength(int length, Dialect dialect) { - if (length < 1024) + int max = (dialect instanceof AlfrescoMySQLClusterNDBDialect ? DEFAULT_MAX_STRING_LENGTH_NDB : DEFAULT_MAX_STRING_LENGTH); + + if (length < max) { - throw new AlfrescoRuntimeException("The maximum string length must >= 1024 characters."); + throw new AlfrescoRuntimeException("The maximum string length must >= "+max+" characters."); } SchemaBootstrap.maxStringLength = length; } - + /** * @return Returns the maximum number of characters that a string field can be */ @@ -1490,7 +1493,7 @@ public class SchemaBootstrap extends AbstractLifecycleBean sql = sql.replaceAll("(?i) BIT ", " BOOLEAN "); sql = sql.replaceAll("(?i) BIT,", " BOOLEAN,"); - sql = sql.replaceAll("(?i) string_value text", " string_value VARCHAR(1024)"); + sql = sql.replaceAll("(?i) string_value text", " string_value VARCHAR("+DEFAULT_MAX_STRING_LENGTH_NDB+")"); sql = sql.replaceAll("(?i) VARCHAR(4000)", "TEXT(4000)"); } @@ -1646,18 +1649,18 @@ public class SchemaBootstrap extends AbstractLifecycleBean // serializable_value varbinary(8192), maxStringLength = SchemaBootstrap.DEFAULT_MAX_STRING_LENGTH; } + else if (dialect instanceof AlfrescoMySQLClusterNDBDialect) + { + // string_value varchar(400), + // serializable_value blob, + maxStringLength = SchemaBootstrap.DEFAULT_MAX_STRING_LENGTH_NDB; + } else if (dialect instanceof MySQLInnoDBDialect) { // string_value text, // serializable_value blob, maxStringLength = Integer.MAX_VALUE; } - else if (dialect instanceof AlfrescoMySQLClusterNDBDialect) - { - // string_value varchar(1024), - // serializable_value blob, - maxStringLength = SchemaBootstrap.DEFAULT_MAX_STRING_LENGTH; - } else if (dialect instanceof AlfrescoOracle9Dialect) { // string_value varchar2(1024 char), @@ -1670,13 +1673,14 @@ public class SchemaBootstrap extends AbstractLifecycleBean // serializable_value bytea, maxStringLength = SchemaBootstrap.DEFAULT_MAX_STRING_LENGTH; } - SchemaBootstrap.setMaxStringLength(maxStringLength); + + SchemaBootstrap.setMaxStringLength(maxStringLength, dialect); SerializableTypeHandler.setSerializableType(serializableType); // Now override the maximum string length if it was set directly if (maximumStringLength > 0) { - SchemaBootstrap.setMaxStringLength(maximumStringLength); + SchemaBootstrap.setMaxStringLength(maximumStringLength, dialect); } } diff --git a/source/java/org/alfresco/repo/domain/schema/script/ScriptExecutorImpl.java b/source/java/org/alfresco/repo/domain/schema/script/ScriptExecutorImpl.java index 190f74aeb8..82c47e1506 100644 --- a/source/java/org/alfresco/repo/domain/schema/script/ScriptExecutorImpl.java +++ b/source/java/org/alfresco/repo/domain/schema/script/ScriptExecutorImpl.java @@ -71,6 +71,7 @@ public class ScriptExecutorImpl implements ScriptExecutor private static final String ERR_DELIMITER_SET_BEFORE_SQL = "schema.update.err.delimiter_set_before_sql"; private static final String ERR_DELIMITER_INVALID = "schema.update.err.delimiter_invalid"; private static final int DEFAULT_MAX_STRING_LENGTH = 1024; + private static final int DEFAULT_MAX_STRING_LENGTH_NDB = 400; private static volatile int maxStringLength = DEFAULT_MAX_STRING_LENGTH; private Dialect dialect; private ResourcePatternResolver rpr = new PathMatchingResourcePatternResolver(this.getClass().getClassLoader()); @@ -550,7 +551,7 @@ public class ScriptExecutorImpl implements ScriptExecutor sql = sql.replaceAll("(?i) BIT ", " BOOLEAN "); sql = sql.replaceAll("(?i) BIT,", " BOOLEAN,"); - sql = sql.replaceAll("(?i) string_value text", " string_value VARCHAR(1024)"); + sql = sql.replaceAll("(?i) string_value text", " string_value VARCHAR("+DEFAULT_MAX_STRING_LENGTH_NDB+")"); sql = sql.replaceAll("(?i) VARCHAR(4000)", "TEXT(4000)"); } diff --git a/source/test-java/org/alfresco/repo/domain/audit/AuditDAOTest.java b/source/test-java/org/alfresco/repo/domain/audit/AuditDAOTest.java index 32e587a5ac..09f310de85 100644 --- a/source/test-java/org/alfresco/repo/domain/audit/AuditDAOTest.java +++ b/source/test-java/org/alfresco/repo/domain/audit/AuditDAOTest.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2014 Alfresco Software Limited. + * Copyright (C) 2005-2016 Alfresco Software Limited. * * This file is part of Alfresco * @@ -37,6 +37,7 @@ import org.alfresco.error.AlfrescoRuntimeException; import org.alfresco.repo.content.transform.AbstractContentTransformerTest; import org.alfresco.repo.domain.audit.AuditDAO.AuditApplicationInfo; import org.alfresco.repo.domain.contentdata.ContentDataDAO; +import org.alfresco.repo.domain.hibernate.dialect.AlfrescoMySQLClusterNDBDialect; import org.alfresco.repo.domain.propval.PropValGenerator; import org.alfresco.repo.domain.propval.PropertyValueDAO; import org.alfresco.repo.transaction.RetryingTransactionHelper; @@ -51,6 +52,7 @@ import org.alfresco.util.ApplicationContextHelper; import org.alfresco.util.GUID; import org.alfresco.util.Pair; import org.apache.commons.lang.mutable.MutableInt; +import org.hibernate.dialect.Dialect; import org.junit.experimental.categories.Category; import org.springframework.context.ConfigurableApplicationContext; @@ -542,6 +544,12 @@ public class AuditDAOTest extends TestCase */ public void testScriptCanDeleteOrphanedProps() throws Exception { + Dialect dialect = (Dialect) ctx.getBean("dialect"); + if (dialect instanceof AlfrescoMySQLClusterNDBDialect) + { + throw new Exception("TODO review this test case with NDB - note: throw exeception here else causes later tests to fail (when running via DomainTestSuite)"); + } + // single test scriptCanDeleteOrphanedPropsWork(false); } diff --git a/source/test-java/org/alfresco/repo/node/db/DbNodeServiceImplTest.java b/source/test-java/org/alfresco/repo/node/db/DbNodeServiceImplTest.java index 6927ba7496..ea4c10f059 100644 --- a/source/test-java/org/alfresco/repo/node/db/DbNodeServiceImplTest.java +++ b/source/test-java/org/alfresco/repo/node/db/DbNodeServiceImplTest.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2010 Alfresco Software Limited. + * Copyright (C) 2005-2016 Alfresco Software Limited. * * This file is part of Alfresco * @@ -30,6 +30,7 @@ import java.util.Set; import javax.transaction.UserTransaction; import org.alfresco.model.ContentModel; +import org.alfresco.repo.domain.hibernate.dialect.AlfrescoMySQLClusterNDBDialect; import org.alfresco.repo.domain.node.NodeDAO; import org.alfresco.repo.domain.node.NodeDAO.ChildAssocRefQueryCallback; import org.alfresco.repo.domain.node.Transaction; @@ -716,17 +717,17 @@ public class DbNodeServiceImplTest extends BaseNodeServiceTest * @see SchemaBootstrap#DEFAULT_MAX_STRING_LENGTH */ @SuppressWarnings("deprecation") - public void testNodeStringLengthWorker() throws Exception + public void testMySQLInnoDBNodeStringLengthWorker() throws Exception { setComplete(); endTransaction(); - // Skip of the dialect is not MySQL + // Skip of the dialect if not MySQL (also skip for MySQL Cluster NDB) Dialect dialect = (Dialect) applicationContext.getBean("dialect"); - if (!(dialect instanceof MySQLInnoDBDialect)) + if ((dialect instanceof AlfrescoMySQLClusterNDBDialect) || (! (dialect instanceof MySQLInnoDBDialect))) { return; -} + } SchemaBootstrap schemaBootstrap = (SchemaBootstrap) applicationContext.getBean("schemaBootstrap"); assertEquals("Expected max string length to be MAX", Integer.MAX_VALUE, SchemaBootstrap.getMaxStringLength()); @@ -751,7 +752,7 @@ public class DbNodeServiceImplTest extends BaseNodeServiceTest sb.append("A"); } final String longString = sb.toString(); - // Persist the property using the default MAX_VALUE so that it does into the string_value + // Persist the property using the default MAX_VALUE so that it goes into the string_value schemaBootstrap.setMaximumStringLength(Integer.MAX_VALUE); schemaBootstrap.onApplicationEvent(new ContextRefreshedEvent(applicationContext)); txnService.getRetryingTransactionHelper().doInTransaction(new RetryingTransactionCallback()