From e4e598234975830eb85623e4db0b4d3b2ceb7417 Mon Sep 17 00:00:00 2001 From: Morten Christensen Date: Thu, 27 Dec 2012 19:53:01 -0100 Subject: [PATCH] Removing sql server/ce specific brackets from repository queries as it was causing problems with MySql. Fixes regression bug from removing brackets from PrimaryKey columns. Columns are now passed and syntax specific brackets are added. Moving the MySql special case for updating User Id from one to zero. --- .../Migrations/Initial/BaseDataCreation.cs | 2 +- .../Persistence/PetaPocoExtensions.cs | 7 +++++++ .../Repositories/ContentRepository.cs | 18 +++++++++--------- .../Repositories/ContentTypeBaseRepository.cs | 12 ++++++------ .../Repositories/ContentTypeRepository.cs | 10 +++++----- .../DataTypeDefinitionRepository.cs | 6 +++--- .../Repositories/DictionaryRepository.cs | 4 ++-- .../Repositories/LanguageRepository.cs | 2 +- .../Repositories/MediaRepository.cs | 14 +++++++------- .../Repositories/MediaTypeRepository.cs | 6 +++--- .../Repositories/RelationRepository.cs | 2 +- .../Repositories/RelationTypeRepository.cs | 2 +- .../Repositories/TemplateRepository.cs | 8 ++++---- .../Persistence/Repositories/UserRepository.cs | 2 +- .../Repositories/UserTypeRepository.cs | 2 +- .../SqlSyntax/MySqlSyntaxProvider.cs | 4 +++- .../SqlSyntax/SqlCeSyntaxProvider.cs | 7 +++++-- .../SqlSyntax/SqlSyntaxProviderBase.cs | 4 +++- .../Persistence/SqlCeTableByTableTest.cs | 2 +- .../TestHelpers/BaseDatabaseFactoryTest.cs | 7 +++++-- 20 files changed, 69 insertions(+), 52 deletions(-) diff --git a/src/Umbraco.Core/Persistence/Migrations/Initial/BaseDataCreation.cs b/src/Umbraco.Core/Persistence/Migrations/Initial/BaseDataCreation.cs index dd0d237769..796f2b0b6e 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Initial/BaseDataCreation.cs +++ b/src/Umbraco.Core/Persistence/Migrations/Initial/BaseDataCreation.cs @@ -141,7 +141,7 @@ namespace Umbraco.Core.Persistence.Migrations.Initial private void CreateUmbracoUserData() { _database.Insert("umbracoUser", "id", false, new UserDto { Id = 0, Disabled = false, NoConsole = false, Type = 1, ContentStartId = -1, MediaStartId = -1, UserName = "Administrator", Login = "admin", Password = "default", Email = "", UserLanguage = "en", DefaultPermissions = null, DefaultToLiveEditing = false }); - _database.Update("SET id = @IdAfter WHERE id = @IdBefore AND userLogin = @Login", new { IdAfter = 0, IdBefore = 1, Login = "admin" }); + //_database.Update("SET id = @IdAfter WHERE id = @IdBefore AND userLogin = @Login", new { IdAfter = 0, IdBefore = 1, Login = "admin" }); } private void CreateUmbracoUserTypeData() diff --git a/src/Umbraco.Core/Persistence/PetaPocoExtensions.cs b/src/Umbraco.Core/Persistence/PetaPocoExtensions.cs index fba115a508..8243e47de5 100644 --- a/src/Umbraco.Core/Persistence/PetaPocoExtensions.cs +++ b/src/Umbraco.Core/Persistence/PetaPocoExtensions.cs @@ -1,6 +1,7 @@ using System; using System.Linq; using Umbraco.Core.Logging; +using Umbraco.Core.Models.Rdbms; using Umbraco.Core.Persistence.DatabaseModelDefinitions; using Umbraco.Core.Persistence.Migrations.Initial; using Umbraco.Core.Persistence.SqlSyntax; @@ -73,6 +74,12 @@ namespace Umbraco.Core.Persistence //Turn off identity insert if db provider is not mysql if (SyntaxConfig.SqlSyntaxProvider.SupportsIdentityInsert() && tableDefinition.Columns.Any(x => x.IsIdentity)) db.Execute(new Sql(string.Format("SET IDENTITY_INSERT {0} OFF;", SyntaxConfig.SqlSyntaxProvider.GetQuotedTableName(tableName)))); + + //Special case for MySql + if (ApplicationContext.Current.DatabaseContext.ProviderName.Contains("MySql")) + { + db.Update("SET id = @IdAfter WHERE id = @IdBefore AND userLogin = @Login", new { IdAfter = 0, IdBefore = 1, Login = "admin" }); + } } //Loop through foreignkey statements and execute sql diff --git a/src/Umbraco.Core/Persistence/Repositories/ContentRepository.cs b/src/Umbraco.Core/Persistence/Repositories/ContentRepository.cs index efdafa91d8..90c80f2f63 100644 --- a/src/Umbraco.Core/Persistence/Repositories/ContentRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/ContentRepository.cs @@ -113,16 +113,16 @@ namespace Umbraco.Core.Persistence.Repositories var sql = new Sql(); sql.Select(isCount ? "COUNT(*)" : "*") .From("cmsDocument") - .InnerJoin("cmsContentVersion").On("[cmsDocument].[versionId] = [cmsContentVersion].[VersionId]") - .InnerJoin("cmsContent").On("[cmsContentVersion].[ContentId] = [cmsContent].[nodeId]") - .InnerJoin("umbracoNode").On("[cmsContent].[nodeId] = [umbracoNode].[id]") - .Where("[umbracoNode].[nodeObjectType] = @NodeObjectType", new { NodeObjectType = NodeObjectTypeId }); + .InnerJoin("cmsContentVersion").On("cmsDocument.versionId = cmsContentVersion.VersionId") + .InnerJoin("cmsContent").On("cmsContentVersion.ContentId = cmsContent.nodeId") + .InnerJoin("umbracoNode").On("cmsContent.nodeId = umbracoNode.id") + .Where("umbracoNode.nodeObjectType = @NodeObjectType", new { NodeObjectType = NodeObjectTypeId }); return sql; } protected override string GetBaseWhereClause() { - return "[umbracoNode].[id] = @Id"; + return "umbracoNode.id = @Id"; } protected override IEnumerable GetDeleteClauses() @@ -408,7 +408,7 @@ namespace Umbraco.Core.Persistence.Repositories { var sql = GetBaseQuery(false); sql.Where(GetBaseWhereClause(), new { Id = id }); - sql.Where("[cmsContentVersion].[LanguageLocale] = @Language", new { Language = language }); + sql.Where("cmsContentVersion.LanguageLocale = @Language", new { Language = language }); sql.OrderByDescending(x => x.VersionDate); var dto = Database.Query(sql).FirstOrDefault(); @@ -426,9 +426,9 @@ namespace Umbraco.Core.Persistence.Repositories var propertySql = new Sql(); propertySql.Select("*"); propertySql.From("cmsPropertyData"); - propertySql.InnerJoin("cmsPropertyType ON ([cmsPropertyData].[propertytypeid] = [cmsPropertyType].[id])"); - propertySql.Where("[cmsPropertyData].[contentNodeId] = @Id", new { Id = id }); - propertySql.Where("[cmsPropertyData].[versionId] = @VersionId", new { VersionId = versionId }); + propertySql.InnerJoin("cmsPropertyType ON (cmsPropertyData.propertytypeid = cmsPropertyType.id)"); + propertySql.Where("cmsPropertyData.contentNodeId = @Id", new { Id = id }); + propertySql.Where("cmsPropertyData.versionId = @VersionId", new { VersionId = versionId }); var propertyDataDtos = Database.Fetch(propertySql); var propertyFactory = new PropertyFactory(contentType, versionId, id); diff --git a/src/Umbraco.Core/Persistence/Repositories/ContentTypeBaseRepository.cs b/src/Umbraco.Core/Persistence/Repositories/ContentTypeBaseRepository.cs index 0f7918b680..04abea1820 100644 --- a/src/Umbraco.Core/Persistence/Repositories/ContentTypeBaseRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/ContentTypeBaseRepository.cs @@ -37,8 +37,8 @@ namespace Umbraco.Core.Persistence.Repositories var sqlClause = new Sql(); sqlClause.Select("*"); sqlClause.From("cmsPropertyTypeGroup"); - sqlClause.RightJoin("cmsPropertyType ON [cmsPropertyTypeGroup].[id] = [cmsPropertyType].[propertyTypeGroupId]"); - sqlClause.InnerJoin("cmsDataType ON [cmsPropertyType].[dataTypeId] = [cmsDataType].[nodeId]"); + sqlClause.RightJoin("cmsPropertyType ON cmsPropertyTypeGroup.id = cmsPropertyType.propertyTypeGroupId"); + sqlClause.InnerJoin("cmsDataType ON cmsPropertyType.dataTypeId = cmsDataType.nodeId"); var translator = new SqlTranslator(sqlClause, query); var sql = translator.Translate(); @@ -213,7 +213,7 @@ namespace Umbraco.Core.Persistence.Repositories var allowedContentTypesSql = new Sql(); allowedContentTypesSql.Select("*"); allowedContentTypesSql.From("cmsContentTypeAllowedContentType"); - allowedContentTypesSql.Where("[cmsContentTypeAllowedContentType].[Id] = @Id", new { Id = id }); + allowedContentTypesSql.Where("cmsContentTypeAllowedContentType.Id = @Id", new { Id = id }); var allowedContentTypeDtos = Database.Fetch(allowedContentTypesSql); return allowedContentTypeDtos.Select(x => new ContentTypeSort { Id = new Lazy(() => x.AllowedId), SortOrder = x.SortOrder }).ToList(); @@ -224,9 +224,9 @@ namespace Umbraco.Core.Persistence.Repositories var propertySql = new Sql(); propertySql.Select("*"); propertySql.From("cmsPropertyTypeGroup"); - propertySql.RightJoin("cmsPropertyType ON [cmsPropertyTypeGroup].[id] = [cmsPropertyType].[propertyTypeGroupId]"); - propertySql.InnerJoin("cmsDataType ON [cmsPropertyType].[dataTypeId] = [cmsDataType].[nodeId]"); - propertySql.Where("[cmsPropertyType].[contentTypeId] = @Id", new { Id = id }); + propertySql.RightJoin("cmsPropertyType ON cmsPropertyTypeGroup.id = cmsPropertyType.propertyTypeGroupId"); + propertySql.InnerJoin("cmsDataType ON cmsPropertyType.dataTypeId = cmsDataType.nodeId"); + propertySql.Where("cmsPropertyType.contentTypeId = @Id", new { Id = id }); var dtos = Database.Fetch(new GroupPropertyTypeRelator().Map, propertySql); diff --git a/src/Umbraco.Core/Persistence/Repositories/ContentTypeRepository.cs b/src/Umbraco.Core/Persistence/Repositories/ContentTypeRepository.cs index 2984b5a43d..bb73c7c7d3 100644 --- a/src/Umbraco.Core/Persistence/Repositories/ContentTypeRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/ContentTypeRepository.cs @@ -118,16 +118,16 @@ namespace Umbraco.Core.Persistence.Repositories //TODO Investigate the proper usage of IsDefault on cmsDocumentType sql.Select(isCount ? "COUNT(*)" : "*"); sql.From("cmsDocumentType"); - sql.RightJoin("cmsContentType ON ([cmsContentType].[nodeId] = [cmsDocumentType].[contentTypeNodeId])"); - sql.InnerJoin("umbracoNode ON ([cmsContentType].[nodeId] = [umbracoNode].[id])"); - sql.Where("[umbracoNode].[nodeObjectType] = @NodeObjectType", new { NodeObjectType = NodeObjectTypeId }); - sql.Where("[cmsDocumentType].[IsDefault] = @IsDefault", new { IsDefault = true }); + sql.RightJoin("cmsContentType ON (cmsContentType.nodeId = cmsDocumentType.contentTypeNodeId)"); + sql.InnerJoin("umbracoNode ON (cmsContentType.nodeId = umbracoNode.id)"); + sql.Where("umbracoNode.nodeObjectType = @NodeObjectType", new { NodeObjectType = NodeObjectTypeId }); + sql.Where("cmsDocumentType.IsDefault = @IsDefault", new { IsDefault = true }); return sql; } protected override string GetBaseWhereClause() { - return "[umbracoNode].[id] = @Id"; + return "umbracoNode.id = @Id"; } protected override IEnumerable GetDeleteClauses() diff --git a/src/Umbraco.Core/Persistence/Repositories/DataTypeDefinitionRepository.cs b/src/Umbraco.Core/Persistence/Repositories/DataTypeDefinitionRepository.cs index 5ef72413be..ff42b191a7 100644 --- a/src/Umbraco.Core/Persistence/Repositories/DataTypeDefinitionRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/DataTypeDefinitionRepository.cs @@ -87,14 +87,14 @@ namespace Umbraco.Core.Persistence.Repositories var sql = new Sql(); sql.Select(isCount ? "COUNT(*)" : "*"); sql.From("cmsDataType"); - sql.InnerJoin("umbracoNode ON ([cmsDataType].[nodeId] = [umbracoNode].[id])"); - sql.Where("[umbracoNode].[nodeObjectType] = @NodeObjectType", new { NodeObjectType = NodeObjectTypeId }); + sql.InnerJoin("umbracoNode ON (cmsDataType.nodeId = umbracoNode.id)"); + sql.Where("umbracoNode.nodeObjectType = @NodeObjectType", new { NodeObjectType = NodeObjectTypeId }); return sql; } protected override string GetBaseWhereClause() { - return "[umbracoNode].[id] = @Id"; + return "umbracoNode.id = @Id"; } protected override IEnumerable GetDeleteClauses() diff --git a/src/Umbraco.Core/Persistence/Repositories/DictionaryRepository.cs b/src/Umbraco.Core/Persistence/Repositories/DictionaryRepository.cs index 1daf2cf2fe..499b79c918 100644 --- a/src/Umbraco.Core/Persistence/Repositories/DictionaryRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/DictionaryRepository.cs @@ -108,14 +108,14 @@ namespace Umbraco.Core.Persistence.Repositories { sql.Select("*"); sql.From("cmsDictionary"); - sql.InnerJoin("cmsLanguageText ON ([cmsDictionary].[id] = [cmsLanguageText].[UniqueId])"); + sql.InnerJoin("cmsLanguageText ON (cmsDictionary.id = cmsLanguageText.UniqueId)"); } return sql; } protected override string GetBaseWhereClause() { - return "[cmsDictionary].[pk] = @Id"; + return "cmsDictionary.pk = @Id"; } protected override IEnumerable GetDeleteClauses() diff --git a/src/Umbraco.Core/Persistence/Repositories/LanguageRepository.cs b/src/Umbraco.Core/Persistence/Repositories/LanguageRepository.cs index c215d08580..77448817be 100644 --- a/src/Umbraco.Core/Persistence/Repositories/LanguageRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/LanguageRepository.cs @@ -92,7 +92,7 @@ namespace Umbraco.Core.Persistence.Repositories protected override string GetBaseWhereClause() { - return "[umbracoLanguage].[id] = @Id"; + return "umbracoLanguage.id = @Id"; } protected override IEnumerable GetDeleteClauses() diff --git a/src/Umbraco.Core/Persistence/Repositories/MediaRepository.cs b/src/Umbraco.Core/Persistence/Repositories/MediaRepository.cs index 288ccd43e5..70726b7671 100644 --- a/src/Umbraco.Core/Persistence/Repositories/MediaRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/MediaRepository.cs @@ -97,15 +97,15 @@ namespace Umbraco.Core.Persistence.Repositories var sql = new Sql(); sql.Select(isCount ? "COUNT(*)" : "*"); sql.From("cmsContentVersion"); - sql.InnerJoin("cmsContent ON ([cmsContentVersion].[ContentId] = [cmsContent].[nodeId])"); - sql.InnerJoin("umbracoNode ON ([cmsContent].[nodeId] = [umbracoNode].[id])"); - sql.Where("[umbracoNode].[nodeObjectType] = @NodeObjectType", new { NodeObjectType = NodeObjectTypeId }); + sql.InnerJoin("cmsContent ON (cmsContentVersion.ContentId = cmsContent.nodeId)"); + sql.InnerJoin("umbracoNode ON (cmsContent.nodeId = umbracoNode.id)"); + sql.Where("umbracoNode.nodeObjectType = @NodeObjectType", new { NodeObjectType = NodeObjectTypeId }); return sql; } protected override string GetBaseWhereClause() { - return "[umbracoNode].[id] = @Id"; + return "umbracoNode.id = @Id"; } protected override IEnumerable GetDeleteClauses() @@ -294,9 +294,9 @@ namespace Umbraco.Core.Persistence.Repositories var propertySql = new Sql(); propertySql.Select("*"); propertySql.From("cmsPropertyData"); - propertySql.InnerJoin("cmsPropertyType ON ([cmsPropertyData].[propertytypeid] = [cmsPropertyType].[id])"); - propertySql.Where("[cmsPropertyData].[contentNodeId] = @Id", new { Id = id }); - propertySql.Where("[cmsPropertyData].[versionId] = @VersionId", new { VersionId = versionId }); + propertySql.InnerJoin("cmsPropertyType ON (cmsPropertyData.propertytypeid = cmsPropertyType.id)"); + propertySql.Where("cmsPropertyData.contentNodeId = @Id", new { Id = id }); + propertySql.Where("cmsPropertyData.versionId = @VersionId", new { VersionId = versionId }); var propertyDataDtos = Database.Fetch(propertySql); var propertyFactory = new PropertyFactory(contentType, versionId, id); diff --git a/src/Umbraco.Core/Persistence/Repositories/MediaTypeRepository.cs b/src/Umbraco.Core/Persistence/Repositories/MediaTypeRepository.cs index 50477a679e..51705e1adf 100644 --- a/src/Umbraco.Core/Persistence/Repositories/MediaTypeRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/MediaTypeRepository.cs @@ -106,14 +106,14 @@ namespace Umbraco.Core.Persistence.Repositories var sql = new Sql(); sql.Select(isCount ? "COUNT(*)" : "*"); sql.From("cmsContentType"); - sql.InnerJoin("umbracoNode ON ([cmsContentType].[nodeId] = [umbracoNode].[id])"); - sql.Where("[umbracoNode].[nodeObjectType] = @NodeObjectType", new { NodeObjectType = NodeObjectTypeId }); + sql.InnerJoin("umbracoNode ON (cmsContentType.nodeId = umbracoNode.id)"); + sql.Where("umbracoNode.nodeObjectType = @NodeObjectType", new { NodeObjectType = NodeObjectTypeId }); return sql; } protected override string GetBaseWhereClause() { - return "[umbracoNode].[id] = @Id"; + return "umbracoNode.id = @Id"; } protected override IEnumerable GetDeleteClauses() diff --git a/src/Umbraco.Core/Persistence/Repositories/RelationRepository.cs b/src/Umbraco.Core/Persistence/Repositories/RelationRepository.cs index 89f5510708..ec42e6dee2 100644 --- a/src/Umbraco.Core/Persistence/Repositories/RelationRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/RelationRepository.cs @@ -100,7 +100,7 @@ namespace Umbraco.Core.Persistence.Repositories protected override string GetBaseWhereClause() { - return "[umbracoRelation].[id] = @Id"; + return "umbracoRelation.id = @Id"; } protected override IEnumerable GetDeleteClauses() diff --git a/src/Umbraco.Core/Persistence/Repositories/RelationTypeRepository.cs b/src/Umbraco.Core/Persistence/Repositories/RelationTypeRepository.cs index e30e992861..bebfb7311b 100644 --- a/src/Umbraco.Core/Persistence/Repositories/RelationTypeRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/RelationTypeRepository.cs @@ -91,7 +91,7 @@ namespace Umbraco.Core.Persistence.Repositories protected override string GetBaseWhereClause() { - return "[umbracoRelationType].[id] = @Id"; + return "umbracoRelationType.id = @Id"; } protected override IEnumerable GetDeleteClauses() diff --git a/src/Umbraco.Core/Persistence/Repositories/TemplateRepository.cs b/src/Umbraco.Core/Persistence/Repositories/TemplateRepository.cs index fb8307d940..47d2b60c95 100644 --- a/src/Umbraco.Core/Persistence/Repositories/TemplateRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/TemplateRepository.cs @@ -132,14 +132,14 @@ namespace Umbraco.Core.Persistence.Repositories var sql = new Sql(); sql.Select(isCount ? "COUNT(*)" : "*"); sql.From("cmsTemplate"); - sql.InnerJoin("umbracoNode").On("[cmsTemplate].[nodeId] = [umbracoNode].[id]"); - sql.Where("[umbracoNode].[nodeObjectType] = @NodeObjectType", new { NodeObjectType = NodeObjectTypeId }); + sql.InnerJoin("umbracoNode").On("cmsTemplate.nodeId = umbracoNode.id"); + sql.Where("umbracoNode.nodeObjectType = @NodeObjectType", new { NodeObjectType = NodeObjectTypeId }); return sql; } protected override string GetBaseWhereClause() { - return "[umbracoNode].[id] = @Id"; + return "umbracoNode.id = @Id"; } protected override IEnumerable GetDeleteClauses() @@ -317,7 +317,7 @@ namespace Umbraco.Core.Persistence.Repositories public ITemplate Get(string alias) { var sql = GetBaseQuery(false); - sql.Where("[cmsTemplate].[alias] = @Alias", new { Alias = alias }); + sql.Where("cmsTemplate.alias = @Alias", new { Alias = alias }); var dto = Database.Fetch(sql).FirstOrDefault(); diff --git a/src/Umbraco.Core/Persistence/Repositories/UserRepository.cs b/src/Umbraco.Core/Persistence/Repositories/UserRepository.cs index bfe896e6b5..383394ae60 100644 --- a/src/Umbraco.Core/Persistence/Repositories/UserRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/UserRepository.cs @@ -95,7 +95,7 @@ namespace Umbraco.Core.Persistence.Repositories protected override string GetBaseWhereClause() { - return "[umbracoUser].[id] = @Id"; + return "umbracoUser.id = @Id"; } protected override IEnumerable GetDeleteClauses() diff --git a/src/Umbraco.Core/Persistence/Repositories/UserTypeRepository.cs b/src/Umbraco.Core/Persistence/Repositories/UserTypeRepository.cs index 3618ef89b0..98e3fc4e7e 100644 --- a/src/Umbraco.Core/Persistence/Repositories/UserTypeRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/UserTypeRepository.cs @@ -90,7 +90,7 @@ namespace Umbraco.Core.Persistence.Repositories protected override string GetBaseWhereClause() { - return "[umbracoUserType].[id] = @Id"; + return "umbracoUserType.id = @Id"; } protected override IEnumerable GetDeleteClauses() diff --git a/src/Umbraco.Core/Persistence/SqlSyntax/MySqlSyntaxProvider.cs b/src/Umbraco.Core/Persistence/SqlSyntax/MySqlSyntaxProvider.cs index 2f03003899..541100ae4d 100644 --- a/src/Umbraco.Core/Persistence/SqlSyntax/MySqlSyntaxProvider.cs +++ b/src/Umbraco.Core/Persistence/SqlSyntax/MySqlSyntaxProvider.cs @@ -95,7 +95,9 @@ namespace Umbraco.Core.Persistence.SqlSyntax { string columns = string.IsNullOrEmpty(columnDefinition.PrimaryKeyColumns) ? GetQuotedColumnName(columnDefinition.Name) - : columnDefinition.PrimaryKeyColumns; + : string.Join(", ", columnDefinition.PrimaryKeyColumns + .Split(new[] { ',', ' ' }, StringSplitOptions.RemoveEmptyEntries) + .Select(GetQuotedColumnName)); primaryKey = string.Format(", \nPRIMARY KEY {0} ({1})", columnDefinition.IsIndexed ? "CLUSTERED" : "NONCLUSTERED", columns); } diff --git a/src/Umbraco.Core/Persistence/SqlSyntax/SqlCeSyntaxProvider.cs b/src/Umbraco.Core/Persistence/SqlSyntax/SqlCeSyntaxProvider.cs index a4f2a9d7ce..28383a666e 100644 --- a/src/Umbraco.Core/Persistence/SqlSyntax/SqlCeSyntaxProvider.cs +++ b/src/Umbraco.Core/Persistence/SqlSyntax/SqlCeSyntaxProvider.cs @@ -1,4 +1,5 @@ -using System.Linq; +using System; +using System.Linq; using System.Text; using Umbraco.Core.Persistence.DatabaseAnnotations; using Umbraco.Core.Persistence.DatabaseModelDefinitions; @@ -100,7 +101,9 @@ namespace Umbraco.Core.Persistence.SqlSyntax string columns = string.IsNullOrEmpty(columnDefinition.PrimaryKeyColumns) ? GetQuotedColumnName(columnDefinition.Name) - : columnDefinition.PrimaryKeyColumns; + : string.Join(", ", columnDefinition.PrimaryKeyColumns + .Split(new[]{',', ' '}, StringSplitOptions.RemoveEmptyEntries) + .Select(GetQuotedColumnName)); return string.Format(CreateConstraint, GetQuotedTableName(table.Name), diff --git a/src/Umbraco.Core/Persistence/SqlSyntax/SqlSyntaxProviderBase.cs b/src/Umbraco.Core/Persistence/SqlSyntax/SqlSyntaxProviderBase.cs index e2e6cb3e9f..65cc4401d6 100644 --- a/src/Umbraco.Core/Persistence/SqlSyntax/SqlSyntaxProviderBase.cs +++ b/src/Umbraco.Core/Persistence/SqlSyntax/SqlSyntaxProviderBase.cs @@ -249,7 +249,9 @@ namespace Umbraco.Core.Persistence.SqlSyntax string columns = string.IsNullOrEmpty(columnDefinition.PrimaryKeyColumns) ? GetQuotedColumnName(columnDefinition.Name) - : columnDefinition.PrimaryKeyColumns; + : string.Join(", ", columnDefinition.PrimaryKeyColumns + .Split(new[] { ',', ' ' }, StringSplitOptions.RemoveEmptyEntries) + .Select(GetQuotedColumnName)); string primaryKeyPart = string.Concat("PRIMARY KEY", columnDefinition.IsIndexed ? " CLUSTERED" : " NONCLUSTERED"); diff --git a/src/Umbraco.Tests/Persistence/SqlCeTableByTableTest.cs b/src/Umbraco.Tests/Persistence/SqlCeTableByTableTest.cs index 1cd04b024e..d2dadc6879 100644 --- a/src/Umbraco.Tests/Persistence/SqlCeTableByTableTest.cs +++ b/src/Umbraco.Tests/Persistence/SqlCeTableByTableTest.cs @@ -53,7 +53,7 @@ namespace Umbraco.Tests.Persistence //assign the service context new ServiceContext(new PetaPocoUnitOfWorkProvider(), new FileUnitOfWorkProvider(), new PublishingStrategy())) { IsReady = true }; - SyntaxConfig.SqlSyntaxProvider = SqlCeSyntaxProvider.Instance; + SyntaxConfig.SqlSyntaxProvider = SqlCeSyntax.Provider; _database = new Database("Datasource=|DataDirectory|test.sdf", "System.Data.SqlServerCe.4.0"); diff --git a/src/Umbraco.Tests/TestHelpers/BaseDatabaseFactoryTest.cs b/src/Umbraco.Tests/TestHelpers/BaseDatabaseFactoryTest.cs index f21b02e14a..706781c12f 100644 --- a/src/Umbraco.Tests/TestHelpers/BaseDatabaseFactoryTest.cs +++ b/src/Umbraco.Tests/TestHelpers/BaseDatabaseFactoryTest.cs @@ -10,6 +10,7 @@ using Umbraco.Core; using Umbraco.Core.Configuration; using Umbraco.Core.ObjectResolution; using Umbraco.Core.Persistence; +using Umbraco.Core.Persistence.SqlSyntax; using Umbraco.Core.Persistence.UnitOfWork; using Umbraco.Core.Publishing; using Umbraco.Core.Services; @@ -76,8 +77,10 @@ namespace Umbraco.Tests.TestHelpers { DatabaseContext.Database.Dispose(); //reset the app context - ApplicationContext.ApplicationCache.ClearAllCache(); - + ApplicationContext.ApplicationCache.ClearAllCache(); + + SyntaxConfig.SqlSyntaxProvider = null; + //legacy API database connection close SqlCeContextGuardian.CloseBackgroundConnection();