From b3d8b4c53cb6654cbf5b5b8695d69a4cecfbd395 Mon Sep 17 00:00:00 2001 From: sitereactor Date: Fri, 19 Oct 2012 19:07:17 -0200 Subject: [PATCH] Refactoring syntax providers for db creation. Adding tests for sql, sql ce and mysql to ensure the creaion of tables and their dependencies/references. --- src/Umbraco.Core/Models/Rdbms/AppDto.cs | 2 +- .../Models/Rdbms/ContentTypeDto.cs | 4 +- src/Umbraco.Core/Models/Rdbms/DataTypeDto.cs | 2 +- .../Models/Rdbms/DataTypePreValueDto.cs | 4 +- .../Models/Rdbms/DictionaryDto.cs | 2 +- src/Umbraco.Core/Models/Rdbms/DocumentDto.cs | 6 +- src/Umbraco.Core/Models/Rdbms/LanguageDto.cs | 4 +- .../Models/Rdbms/LanguageTextDto.cs | 2 +- src/Umbraco.Core/Models/Rdbms/LogDto.cs | 4 +- .../Models/Rdbms/MacroPropertyDto.cs | 2 +- .../Models/Rdbms/MacroPropertyTypeDto.cs | 2 +- src/Umbraco.Core/Models/Rdbms/MemberDto.cs | 6 +- src/Umbraco.Core/Models/Rdbms/NodeDto.cs | 2 +- .../Models/Rdbms/PreviewXmlDto.cs | 2 +- .../Models/Rdbms/PropertyDataDto.cs | 4 +- .../Models/Rdbms/PropertyTypeDto.cs | 4 +- .../Models/Rdbms/PropertyTypeGroupDto.cs | 2 +- src/Umbraco.Core/Models/Rdbms/RelationDto.cs | 2 +- .../Models/Rdbms/RelationTypeDto.cs | 2 +- .../Models/Rdbms/StylesheetDto.cs | 4 +- .../Models/Rdbms/StylesheetPropertyDto.cs | 4 +- src/Umbraco.Core/Models/Rdbms/TagDto.cs | 4 +- src/Umbraco.Core/Models/Rdbms/TaskDto.cs | 2 +- src/Umbraco.Core/Models/Rdbms/TemplateDto.cs | 4 +- src/Umbraco.Core/Models/Rdbms/User2AppDto.cs | 2 +- .../Models/Rdbms/User2NodeNotifyDto.cs | 2 +- src/Umbraco.Core/Models/Rdbms/UserDto.cs | 8 +- src/Umbraco.Core/Models/Rdbms/UserTypeDto.cs | 4 +- .../DatabaseTypeAttribute.cs | 4 +- .../DatabaseAnnotations/DatabaseTypes.cs | 15 - .../DatabaseAnnotations/SpecialDbTypes.cs | 9 + .../ModelDefinitions/ColumnDefinition.cs | 4 +- .../ModelDefinitions/DefinitionFactory.cs | 4 +- .../SqlSyntax/MySqlSyntaxProvider.cs | 119 +++- .../SqlSyntax/SqlSyntaxProviderBase.cs | 49 +- src/Umbraco.Core/Umbraco.Core.csproj | 2 +- .../Persistence/BaseTableByTableTest.cs | 581 +++++++++++++++++ .../Persistence/DatabaseExtensionsTest.cs | 612 ------------------ .../Persistence/MySqlDatabaseCreationTest.cs | 2 +- .../Persistence/MySqlTableByTableTest.cs | 41 ++ .../Persistence/SqlCeTableByTableTest.cs | 55 ++ .../Persistence/SqlTableByTableTest.cs | 41 ++ src/Umbraco.Tests/Umbraco.Tests.csproj | 5 +- 43 files changed, 947 insertions(+), 688 deletions(-) delete mode 100644 src/Umbraco.Core/Persistence/DatabaseAnnotations/DatabaseTypes.cs create mode 100644 src/Umbraco.Core/Persistence/DatabaseAnnotations/SpecialDbTypes.cs create mode 100644 src/Umbraco.Tests/Persistence/BaseTableByTableTest.cs delete mode 100644 src/Umbraco.Tests/Persistence/DatabaseExtensionsTest.cs create mode 100644 src/Umbraco.Tests/Persistence/MySqlTableByTableTest.cs create mode 100644 src/Umbraco.Tests/Persistence/SqlCeTableByTableTest.cs create mode 100644 src/Umbraco.Tests/Persistence/SqlTableByTableTest.cs diff --git a/src/Umbraco.Core/Models/Rdbms/AppDto.cs b/src/Umbraco.Core/Models/Rdbms/AppDto.cs index 7ce8658c1b..45ee497654 100644 --- a/src/Umbraco.Core/Models/Rdbms/AppDto.cs +++ b/src/Umbraco.Core/Models/Rdbms/AppDto.cs @@ -10,7 +10,7 @@ namespace Umbraco.Core.Models.Rdbms { [Column("appAlias")] [PrimaryKeyColumn(AutoIncrement = false, Clustered = true)] - [DatabaseType(DatabaseTypes.NVARCHAR, Length = 50)] + [DatabaseType(SpecialDbTypes.NVARCHAR, Length = 50)] public string AppAlias { get; set; } [Column("appIcon")] diff --git a/src/Umbraco.Core/Models/Rdbms/ContentTypeDto.cs b/src/Umbraco.Core/Models/Rdbms/ContentTypeDto.cs index af5e554172..94d997e259 100644 --- a/src/Umbraco.Core/Models/Rdbms/ContentTypeDto.cs +++ b/src/Umbraco.Core/Models/Rdbms/ContentTypeDto.cs @@ -27,12 +27,12 @@ namespace Umbraco.Core.Models.Rdbms public string Icon { get; set; } [Column("thumbnail")] - [Constraint(Default = "'folder.png'")] + [Constraint(Default = "folder.png")] public string Thumbnail { get; set; } [Column("description")] [NullSetting(NullSetting = NullSettings.Null)] - [DatabaseType(DatabaseTypes.NVARCHAR, Length = 1500)] + [DatabaseType(SpecialDbTypes.NVARCHAR, Length = 1500)] public string Description { get; set; } [Column("isContainer")] diff --git a/src/Umbraco.Core/Models/Rdbms/DataTypeDto.cs b/src/Umbraco.Core/Models/Rdbms/DataTypeDto.cs index db077cec1c..752fec08e5 100644 --- a/src/Umbraco.Core/Models/Rdbms/DataTypeDto.cs +++ b/src/Umbraco.Core/Models/Rdbms/DataTypeDto.cs @@ -22,7 +22,7 @@ namespace Umbraco.Core.Models.Rdbms public Guid ControlId { get; set; } [Column("dbType")] - [DatabaseType(DatabaseTypes.NVARCHAR, Length = 50)]//NOTE Is set to [varchar] (50) in Sql Server script + [DatabaseType(SpecialDbTypes.NVARCHAR, Length = 50)]//NOTE Is set to [varchar] (50) in Sql Server script public string DbType { get; set; } [ResultColumn] diff --git a/src/Umbraco.Core/Models/Rdbms/DataTypePreValueDto.cs b/src/Umbraco.Core/Models/Rdbms/DataTypePreValueDto.cs index 3efc216004..17271ced7b 100644 --- a/src/Umbraco.Core/Models/Rdbms/DataTypePreValueDto.cs +++ b/src/Umbraco.Core/Models/Rdbms/DataTypePreValueDto.cs @@ -18,7 +18,7 @@ namespace Umbraco.Core.Models.Rdbms [Column("value")] [NullSetting(NullSetting = NullSettings.Null)] - [DatabaseType(DatabaseTypes.NVARCHAR, Length = 2500)] + [DatabaseType(SpecialDbTypes.NVARCHAR, Length = 2500)] public string Value { get; set; } [Column("sortorder")] @@ -26,7 +26,7 @@ namespace Umbraco.Core.Models.Rdbms [Column("alias")] [NullSetting(NullSetting = NullSettings.Null)] - [DatabaseType(DatabaseTypes.NVARCHAR, Length = 50)] + [DatabaseType(SpecialDbTypes.NVARCHAR, Length = 50)] public string Alias { get; set; } } } \ No newline at end of file diff --git a/src/Umbraco.Core/Models/Rdbms/DictionaryDto.cs b/src/Umbraco.Core/Models/Rdbms/DictionaryDto.cs index 95fdb3746e..9dcc99ed9c 100644 --- a/src/Umbraco.Core/Models/Rdbms/DictionaryDto.cs +++ b/src/Umbraco.Core/Models/Rdbms/DictionaryDto.cs @@ -22,7 +22,7 @@ namespace Umbraco.Core.Models.Rdbms public Guid Parent { get; set; } [Column("key")] - [DatabaseType(DatabaseTypes.NVARCHAR, Length = 1000)] + [DatabaseType(SpecialDbTypes.NVARCHAR, Length = 1000)] public string Key { get; set; } [ResultColumn] diff --git a/src/Umbraco.Core/Models/Rdbms/DocumentDto.cs b/src/Umbraco.Core/Models/Rdbms/DocumentDto.cs index 502c3eaba2..9b2fe35176 100644 --- a/src/Umbraco.Core/Models/Rdbms/DocumentDto.cs +++ b/src/Umbraco.Core/Models/Rdbms/DocumentDto.cs @@ -12,7 +12,7 @@ namespace Umbraco.Core.Models.Rdbms [Column("nodeId")] [ForeignKey(typeof(ContentDto))] [ForeignKey(typeof(NodeDto))] - [Index(IndexTypes.UniqueNonClustered, Name = "IX_cmsDocument", ForColumns = "[nodeId], [versionId]")] + [Index(IndexTypes.UniqueNonClustered, Name = "IX_cmsDocument", ForColumns = "nodeId, versionId")] public int NodeId { get; set; } [Column("published")] @@ -26,7 +26,7 @@ namespace Umbraco.Core.Models.Rdbms public Guid VersionId { get; set; } [Column("text")] - [DatabaseType(DatabaseTypes.NVARCHAR, Length = 255)] + [DatabaseType(SpecialDbTypes.NVARCHAR, Length = 255)] public string Text { get; set; } [Column("releaseDate")] @@ -48,7 +48,7 @@ namespace Umbraco.Core.Models.Rdbms [Column("alias")] [NullSetting(NullSetting = NullSettings.Null)] - [DatabaseType(DatabaseTypes.NVARCHAR, Length = 255)] + [DatabaseType(SpecialDbTypes.NVARCHAR, Length = 255)] public string Alias { get; set; } [Column("newest")] diff --git a/src/Umbraco.Core/Models/Rdbms/LanguageDto.cs b/src/Umbraco.Core/Models/Rdbms/LanguageDto.cs index 578732dc64..1c0f6e27e8 100644 --- a/src/Umbraco.Core/Models/Rdbms/LanguageDto.cs +++ b/src/Umbraco.Core/Models/Rdbms/LanguageDto.cs @@ -15,12 +15,12 @@ namespace Umbraco.Core.Models.Rdbms [Column("languageISOCode")] [Index(IndexTypes.UniqueNonClustered)] [NullSetting(NullSetting = NullSettings.Null)] - [DatabaseType(DatabaseTypes.NVARCHAR, Length = 10)] + [DatabaseType(SpecialDbTypes.NVARCHAR, Length = 10)] public string IsoCode { get; set; } [Column("languageCultureName")] [NullSetting(NullSetting = NullSettings.Null)] - [DatabaseType(DatabaseTypes.NVARCHAR, Length = 100)] + [DatabaseType(SpecialDbTypes.NVARCHAR, Length = 100)] public string CultureName { get; set; } } } \ No newline at end of file diff --git a/src/Umbraco.Core/Models/Rdbms/LanguageTextDto.cs b/src/Umbraco.Core/Models/Rdbms/LanguageTextDto.cs index 778c8ab0c6..a79cb25067 100644 --- a/src/Umbraco.Core/Models/Rdbms/LanguageTextDto.cs +++ b/src/Umbraco.Core/Models/Rdbms/LanguageTextDto.cs @@ -21,7 +21,7 @@ namespace Umbraco.Core.Models.Rdbms public Guid UniqueId { get; set; } [Column("value")] - [DatabaseType(DatabaseTypes.NVARCHAR, Length = 1000)] + [DatabaseType(SpecialDbTypes.NVARCHAR, Length = 1000)] public string Value { get; set; } } } \ No newline at end of file diff --git a/src/Umbraco.Core/Models/Rdbms/LogDto.cs b/src/Umbraco.Core/Models/Rdbms/LogDto.cs index 8b786bc4f2..ab257f7ada 100644 --- a/src/Umbraco.Core/Models/Rdbms/LogDto.cs +++ b/src/Umbraco.Core/Models/Rdbms/LogDto.cs @@ -25,12 +25,12 @@ namespace Umbraco.Core.Models.Rdbms public DateTime Datestamp { get; set; } [Column("logHeader")] - [DatabaseType(DatabaseTypes.NVARCHAR, Length = 50)] + [DatabaseType(SpecialDbTypes.NVARCHAR, Length = 50)] public string Header { get; set; } [Column("logComment")] [NullSetting(NullSetting = NullSettings.Null)] - [DatabaseType(DatabaseTypes.NVARCHAR, Length = 4000)] + [DatabaseType(SpecialDbTypes.NVARCHAR, Length = 4000)] public string Comment { get; set; } } } \ No newline at end of file diff --git a/src/Umbraco.Core/Models/Rdbms/MacroPropertyDto.cs b/src/Umbraco.Core/Models/Rdbms/MacroPropertyDto.cs index 32309c4983..2512832c9b 100644 --- a/src/Umbraco.Core/Models/Rdbms/MacroPropertyDto.cs +++ b/src/Umbraco.Core/Models/Rdbms/MacroPropertyDto.cs @@ -29,7 +29,7 @@ namespace Umbraco.Core.Models.Rdbms public byte SortOrder { get; set; } [Column("macroPropertyAlias")] - [DatabaseType(DatabaseTypes.NVARCHAR, Length = 50)] + [DatabaseType(SpecialDbTypes.NVARCHAR, Length = 50)] public string Alias { get; set; } [Column("macroPropertyName")] diff --git a/src/Umbraco.Core/Models/Rdbms/MacroPropertyTypeDto.cs b/src/Umbraco.Core/Models/Rdbms/MacroPropertyTypeDto.cs index c9a35801d9..24df806441 100644 --- a/src/Umbraco.Core/Models/Rdbms/MacroPropertyTypeDto.cs +++ b/src/Umbraco.Core/Models/Rdbms/MacroPropertyTypeDto.cs @@ -13,7 +13,7 @@ namespace Umbraco.Core.Models.Rdbms public short Id { get; set; } [Column("macroPropertyTypeAlias")] - [DatabaseType(DatabaseTypes.NVARCHAR, Length = 50)] + [DatabaseType(SpecialDbTypes.NVARCHAR, Length = 50)] [NullSetting(NullSetting = NullSettings.Null)] public string Alias { get; set; } diff --git a/src/Umbraco.Core/Models/Rdbms/MemberDto.cs b/src/Umbraco.Core/Models/Rdbms/MemberDto.cs index 83d94cea80..dfe24fd8ef 100644 --- a/src/Umbraco.Core/Models/Rdbms/MemberDto.cs +++ b/src/Umbraco.Core/Models/Rdbms/MemberDto.cs @@ -15,17 +15,17 @@ namespace Umbraco.Core.Models.Rdbms public int NodeId { get; set; } [Column("Email")] - [DatabaseType(DatabaseTypes.NVARCHAR, Length = 1000)] + [DatabaseType(SpecialDbTypes.NVARCHAR, Length = 1000)] [Constraint(Default = "''")] public string Email { get; set; } [Column("LoginName")] - [DatabaseType(DatabaseTypes.NVARCHAR, Length = 1000)] + [DatabaseType(SpecialDbTypes.NVARCHAR, Length = 1000)] [Constraint(Default = "''")] public string LoginName { get; set; } [Column("Password")] - [DatabaseType(DatabaseTypes.NVARCHAR, Length = 1000)] + [DatabaseType(SpecialDbTypes.NVARCHAR, Length = 1000)] [Constraint(Default = "''")] public string Password { get; set; } } diff --git a/src/Umbraco.Core/Models/Rdbms/NodeDto.cs b/src/Umbraco.Core/Models/Rdbms/NodeDto.cs index ddb697cd6c..152cdb99f0 100644 --- a/src/Umbraco.Core/Models/Rdbms/NodeDto.cs +++ b/src/Umbraco.Core/Models/Rdbms/NodeDto.cs @@ -35,7 +35,7 @@ namespace Umbraco.Core.Models.Rdbms public short Level { get; set; } [Column("path")] - [DatabaseType(DatabaseTypes.NVARCHAR, Length = 150)] + [DatabaseType(SpecialDbTypes.NVARCHAR, Length = 150)] public string Path { get; set; } [Column("sortOrder")] diff --git a/src/Umbraco.Core/Models/Rdbms/PreviewXmlDto.cs b/src/Umbraco.Core/Models/Rdbms/PreviewXmlDto.cs index 7f6d70624c..d6f99f6c17 100644 --- a/src/Umbraco.Core/Models/Rdbms/PreviewXmlDto.cs +++ b/src/Umbraco.Core/Models/Rdbms/PreviewXmlDto.cs @@ -22,7 +22,7 @@ namespace Umbraco.Core.Models.Rdbms public DateTime Timestamp { get; set; } [Column("xml")] - [DatabaseType(DatabaseTypes.NTEXT)] + [DatabaseType(SpecialDbTypes.NTEXT)] public string Xml { get; set; } } } \ No newline at end of file diff --git a/src/Umbraco.Core/Models/Rdbms/PropertyDataDto.cs b/src/Umbraco.Core/Models/Rdbms/PropertyDataDto.cs index 8d15d59c94..345e88ec8f 100644 --- a/src/Umbraco.Core/Models/Rdbms/PropertyDataDto.cs +++ b/src/Umbraco.Core/Models/Rdbms/PropertyDataDto.cs @@ -39,12 +39,12 @@ namespace Umbraco.Core.Models.Rdbms [Column("dataNvarchar")] [NullSetting(NullSetting = NullSettings.Null)] - [DatabaseType(DatabaseTypes.NVARCHAR, Length = 500)] + [DatabaseType(SpecialDbTypes.NVARCHAR, Length = 500)] public string VarChar { get; set; } [Column("dataNtext")] [NullSetting(NullSetting = NullSettings.Null)] - [DatabaseType(DatabaseTypes.NTEXT)] + [DatabaseType(SpecialDbTypes.NTEXT)] public string Text { get; set; } [ResultColumn] diff --git a/src/Umbraco.Core/Models/Rdbms/PropertyTypeDto.cs b/src/Umbraco.Core/Models/Rdbms/PropertyTypeDto.cs index 206baf2cda..4567470bc0 100644 --- a/src/Umbraco.Core/Models/Rdbms/PropertyTypeDto.cs +++ b/src/Umbraco.Core/Models/Rdbms/PropertyTypeDto.cs @@ -34,7 +34,7 @@ namespace Umbraco.Core.Models.Rdbms [Column("helpText")] [NullSetting(NullSetting = NullSettings.Null)] - [DatabaseType(DatabaseTypes.NVARCHAR, Length = 1000)] + [DatabaseType(SpecialDbTypes.NVARCHAR, Length = 1000)] public string HelpText { get; set; } [Column("sortOrder")] @@ -51,7 +51,7 @@ namespace Umbraco.Core.Models.Rdbms [Column("Description")] [NullSetting(NullSetting = NullSettings.Null)] - [DatabaseType(DatabaseTypes.NVARCHAR, Length = 2000)] + [DatabaseType(SpecialDbTypes.NVARCHAR, Length = 2000)] public string Description { get; set; } [ResultColumn] diff --git a/src/Umbraco.Core/Models/Rdbms/PropertyTypeGroupDto.cs b/src/Umbraco.Core/Models/Rdbms/PropertyTypeGroupDto.cs index 8c8a799fa5..6a70e665e8 100644 --- a/src/Umbraco.Core/Models/Rdbms/PropertyTypeGroupDto.cs +++ b/src/Umbraco.Core/Models/Rdbms/PropertyTypeGroupDto.cs @@ -15,7 +15,7 @@ namespace Umbraco.Core.Models.Rdbms [Column("parentGroupId")] [NullSetting(NullSetting = NullSettings.Null)] - [Constraint(Default = "NULL")] + //[Constraint(Default = "NULL")] [ForeignKey(typeof(PropertyTypeGroupDto))] public int? ParentGroupId { get; set; } diff --git a/src/Umbraco.Core/Models/Rdbms/RelationDto.cs b/src/Umbraco.Core/Models/Rdbms/RelationDto.cs index b1917d7ab4..a89d6df575 100644 --- a/src/Umbraco.Core/Models/Rdbms/RelationDto.cs +++ b/src/Umbraco.Core/Models/Rdbms/RelationDto.cs @@ -30,7 +30,7 @@ namespace Umbraco.Core.Models.Rdbms public DateTime Datetime { get; set; } [Column("comment")] - [DatabaseType(DatabaseTypes.NVARCHAR, Length = 1000)] + [DatabaseType(SpecialDbTypes.NVARCHAR, Length = 1000)] public string Comment { get; set; } } } \ No newline at end of file diff --git a/src/Umbraco.Core/Models/Rdbms/RelationTypeDto.cs b/src/Umbraco.Core/Models/Rdbms/RelationTypeDto.cs index 93c7b0a96e..c70cea9fae 100644 --- a/src/Umbraco.Core/Models/Rdbms/RelationTypeDto.cs +++ b/src/Umbraco.Core/Models/Rdbms/RelationTypeDto.cs @@ -27,7 +27,7 @@ namespace Umbraco.Core.Models.Rdbms [Column("alias")] [NullSetting(NullSetting = NullSettings.Null)] - [DatabaseType(DatabaseTypes.NVARCHAR, Length = 100)] + [DatabaseType(SpecialDbTypes.NVARCHAR, Length = 100)] public string Alias { get; set; } } } \ No newline at end of file diff --git a/src/Umbraco.Core/Models/Rdbms/StylesheetDto.cs b/src/Umbraco.Core/Models/Rdbms/StylesheetDto.cs index 49b75dedad..f1801b3912 100644 --- a/src/Umbraco.Core/Models/Rdbms/StylesheetDto.cs +++ b/src/Umbraco.Core/Models/Rdbms/StylesheetDto.cs @@ -14,11 +14,11 @@ namespace Umbraco.Core.Models.Rdbms public int NodeId { get; set; } [Column("filename")] - [DatabaseType(DatabaseTypes.NVARCHAR, Length = 100)] + [DatabaseType(SpecialDbTypes.NVARCHAR, Length = 100)] public string Filename { get; set; } [Column("content")] - [DatabaseType(DatabaseTypes.NTEXT)] + [DatabaseType(SpecialDbTypes.NTEXT)] [NullSetting(NullSetting = NullSettings.Null)] public string Content { get; set; } } diff --git a/src/Umbraco.Core/Models/Rdbms/StylesheetPropertyDto.cs b/src/Umbraco.Core/Models/Rdbms/StylesheetPropertyDto.cs index d4e1481f02..898bc7e138 100644 --- a/src/Umbraco.Core/Models/Rdbms/StylesheetPropertyDto.cs +++ b/src/Umbraco.Core/Models/Rdbms/StylesheetPropertyDto.cs @@ -18,12 +18,12 @@ namespace Umbraco.Core.Models.Rdbms [Column("stylesheetPropertyAlias")] [NullSetting(NullSetting = NullSettings.Null)] - [DatabaseType(DatabaseTypes.NVARCHAR, Length = 50)] + [DatabaseType(SpecialDbTypes.NVARCHAR, Length = 50)] public string Alias { get; set; } [Column("stylesheetPropertyValue")] [NullSetting(NullSetting = NullSettings.Null)] - [DatabaseType(DatabaseTypes.NVARCHAR, Length = 400)] + [DatabaseType(SpecialDbTypes.NVARCHAR, Length = 400)] public string Value { get; set; } } } \ No newline at end of file diff --git a/src/Umbraco.Core/Models/Rdbms/TagDto.cs b/src/Umbraco.Core/Models/Rdbms/TagDto.cs index 2a51efd78b..1550ffc3cc 100644 --- a/src/Umbraco.Core/Models/Rdbms/TagDto.cs +++ b/src/Umbraco.Core/Models/Rdbms/TagDto.cs @@ -14,7 +14,7 @@ namespace Umbraco.Core.Models.Rdbms [Column("tag")] [NullSetting(NullSetting = NullSettings.Null)] - [DatabaseType(DatabaseTypes.NVARCHAR, Length = 200)]//NOTE Is set to [varchar] (200) in Sql Server script + [DatabaseType(SpecialDbTypes.NVARCHAR, Length = 200)]//NOTE Is set to [varchar] (200) in Sql Server script public string Tag { get; set; } [Column("ParentId")] @@ -23,7 +23,7 @@ namespace Umbraco.Core.Models.Rdbms [Column("group")] [NullSetting(NullSetting = NullSettings.Null)] - [DatabaseType(DatabaseTypes.NVARCHAR, Length = 100)]//NOTE Is set to [varchar] (100) in Sql Server script + [DatabaseType(SpecialDbTypes.NVARCHAR, Length = 100)]//NOTE Is set to [varchar] (100) in Sql Server script public string Group { get; set; } } } \ No newline at end of file diff --git a/src/Umbraco.Core/Models/Rdbms/TaskDto.cs b/src/Umbraco.Core/Models/Rdbms/TaskDto.cs index 2fa75d8cf2..585f0b5757 100644 --- a/src/Umbraco.Core/Models/Rdbms/TaskDto.cs +++ b/src/Umbraco.Core/Models/Rdbms/TaskDto.cs @@ -39,7 +39,7 @@ namespace Umbraco.Core.Models.Rdbms [Column("Comment")] [NullSetting(NullSetting = NullSettings.Null)] - [DatabaseType(DatabaseTypes.NVARCHAR, Length = 500)] + [DatabaseType(SpecialDbTypes.NVARCHAR, Length = 500)] public string Comment { get; set; } } } \ No newline at end of file diff --git a/src/Umbraco.Core/Models/Rdbms/TemplateDto.cs b/src/Umbraco.Core/Models/Rdbms/TemplateDto.cs index fdf8f08196..cee904097c 100644 --- a/src/Umbraco.Core/Models/Rdbms/TemplateDto.cs +++ b/src/Umbraco.Core/Models/Rdbms/TemplateDto.cs @@ -23,12 +23,12 @@ namespace Umbraco.Core.Models.Rdbms public int? Master { get; set; } [Column("alias")] - [DatabaseType(DatabaseTypes.NVARCHAR, Length = 100)] + [DatabaseType(SpecialDbTypes.NVARCHAR, Length = 100)] [NullSetting(NullSetting = NullSettings.Null)] public string Alias { get; set; } [Column("design")] - [DatabaseType(DatabaseTypes.NTEXT)] + [DatabaseType(SpecialDbTypes.NTEXT)] public string Design { get; set; } } } \ No newline at end of file diff --git a/src/Umbraco.Core/Models/Rdbms/User2AppDto.cs b/src/Umbraco.Core/Models/Rdbms/User2AppDto.cs index 1650b22c35..64e2e39d07 100644 --- a/src/Umbraco.Core/Models/Rdbms/User2AppDto.cs +++ b/src/Umbraco.Core/Models/Rdbms/User2AppDto.cs @@ -14,7 +14,7 @@ namespace Umbraco.Core.Models.Rdbms public int UserId { get; set; } [Column("app")] - [DatabaseType(DatabaseTypes.NVARCHAR, Length = 50)] + [DatabaseType(SpecialDbTypes.NVARCHAR, Length = 50)] public string AppAlias { get; set; } } } \ No newline at end of file diff --git a/src/Umbraco.Core/Models/Rdbms/User2NodeNotifyDto.cs b/src/Umbraco.Core/Models/Rdbms/User2NodeNotifyDto.cs index 81203fad6f..30202b5202 100644 --- a/src/Umbraco.Core/Models/Rdbms/User2NodeNotifyDto.cs +++ b/src/Umbraco.Core/Models/Rdbms/User2NodeNotifyDto.cs @@ -18,7 +18,7 @@ namespace Umbraco.Core.Models.Rdbms public int NodeId { get; set; } [Column("action")] - [DatabaseType(DatabaseTypes.NCHAR, Length = 1)] + [DatabaseType(SpecialDbTypes.NCHAR, Length = 1)] public string Action { get; set; } } } \ No newline at end of file diff --git a/src/Umbraco.Core/Models/Rdbms/UserDto.cs b/src/Umbraco.Core/Models/Rdbms/UserDto.cs index d29ddf1a64..1e054eb819 100644 --- a/src/Umbraco.Core/Models/Rdbms/UserDto.cs +++ b/src/Umbraco.Core/Models/Rdbms/UserDto.cs @@ -35,12 +35,12 @@ namespace Umbraco.Core.Models.Rdbms public string UserName { get; set; } [Column("userLogin")] - [DatabaseType(DatabaseTypes.NVARCHAR, Length = 125)] + [DatabaseType(SpecialDbTypes.NVARCHAR, Length = 125)] [Index(IndexTypes.NonClustered)] public string Login { get; set; } [Column("userPassword")] - [DatabaseType(DatabaseTypes.NVARCHAR, Length = 125)] + [DatabaseType(SpecialDbTypes.NVARCHAR, Length = 125)] public string Password { get; set; } [Column("userEmail")] @@ -48,12 +48,12 @@ namespace Umbraco.Core.Models.Rdbms [Column("userDefaultPermissions")] [NullSetting(NullSetting = NullSettings.Null)] - [DatabaseType(DatabaseTypes.NVARCHAR, Length = 50)] + [DatabaseType(SpecialDbTypes.NVARCHAR, Length = 50)] public string DefaultPermissions { get; set; } [Column("userLanguage")] [NullSetting(NullSetting = NullSettings.Null)] - [DatabaseType(DatabaseTypes.NVARCHAR, Length = 10)] + [DatabaseType(SpecialDbTypes.NVARCHAR, Length = 10)] public string UserLanguage { get; set; } [Column("defaultToLiveEditing")] diff --git a/src/Umbraco.Core/Models/Rdbms/UserTypeDto.cs b/src/Umbraco.Core/Models/Rdbms/UserTypeDto.cs index 60bb09b019..3c46e92fdd 100644 --- a/src/Umbraco.Core/Models/Rdbms/UserTypeDto.cs +++ b/src/Umbraco.Core/Models/Rdbms/UserTypeDto.cs @@ -13,7 +13,7 @@ namespace Umbraco.Core.Models.Rdbms public short Id { get; set; } [Column("userTypeAlias")] - [DatabaseType(DatabaseTypes.NVARCHAR, Length = 50)] + [DatabaseType(SpecialDbTypes.NVARCHAR, Length = 50)] [NullSetting(NullSetting = NullSettings.Null)] public string Alias { get; set; } @@ -21,7 +21,7 @@ namespace Umbraco.Core.Models.Rdbms public string Name { get; set; } [Column("userTypeDefaultPermissions")] - [DatabaseType(DatabaseTypes.NVARCHAR, Length = 50)] + [DatabaseType(SpecialDbTypes.NVARCHAR, Length = 50)] [NullSetting(NullSetting = NullSettings.Null)] public string DefaultPermissions { get; set; } } diff --git a/src/Umbraco.Core/Persistence/DatabaseAnnotations/DatabaseTypeAttribute.cs b/src/Umbraco.Core/Persistence/DatabaseAnnotations/DatabaseTypeAttribute.cs index 1c012b3853..cd40b91b8c 100644 --- a/src/Umbraco.Core/Persistence/DatabaseAnnotations/DatabaseTypeAttribute.cs +++ b/src/Umbraco.Core/Persistence/DatabaseAnnotations/DatabaseTypeAttribute.cs @@ -5,12 +5,12 @@ namespace Umbraco.Core.Persistence.DatabaseAnnotations [AttributeUsage(AttributeTargets.Property)] public class DatabaseTypeAttribute : Attribute { - public DatabaseTypeAttribute(DatabaseTypes databaseType) + public DatabaseTypeAttribute(SpecialDbTypes databaseType) { DatabaseType = databaseType; } - public DatabaseTypes DatabaseType { get; private set; } + public SpecialDbTypes DatabaseType { get; set; } public int Length { get; set; } } } \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/DatabaseAnnotations/DatabaseTypes.cs b/src/Umbraco.Core/Persistence/DatabaseAnnotations/DatabaseTypes.cs deleted file mode 100644 index be8608081d..0000000000 --- a/src/Umbraco.Core/Persistence/DatabaseAnnotations/DatabaseTypes.cs +++ /dev/null @@ -1,15 +0,0 @@ -namespace Umbraco.Core.Persistence.DatabaseAnnotations -{ - public enum DatabaseTypes - { - INTEGER, - SMALLINTEGER, - TINYINTEGER, - UNIQUEIDENTIFIER, - DATETIME, - NTEXT, - NVARCHAR, - BOOL, - NCHAR - } -} \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/DatabaseAnnotations/SpecialDbTypes.cs b/src/Umbraco.Core/Persistence/DatabaseAnnotations/SpecialDbTypes.cs new file mode 100644 index 0000000000..136983efb3 --- /dev/null +++ b/src/Umbraco.Core/Persistence/DatabaseAnnotations/SpecialDbTypes.cs @@ -0,0 +1,9 @@ +namespace Umbraco.Core.Persistence.DatabaseAnnotations +{ + public enum SpecialDbTypes + { + NTEXT, + NVARCHAR, + NCHAR + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/SqlSyntax/ModelDefinitions/ColumnDefinition.cs b/src/Umbraco.Core/Persistence/SqlSyntax/ModelDefinitions/ColumnDefinition.cs index 344b88ae17..a44e1d68d9 100644 --- a/src/Umbraco.Core/Persistence/SqlSyntax/ModelDefinitions/ColumnDefinition.cs +++ b/src/Umbraco.Core/Persistence/SqlSyntax/ModelDefinitions/ColumnDefinition.cs @@ -1,4 +1,5 @@ using System; +using Umbraco.Core.Persistence.DatabaseAnnotations; namespace Umbraco.Core.Persistence.SqlSyntax.ModelDefinitions { @@ -7,7 +8,8 @@ namespace Umbraco.Core.Persistence.SqlSyntax.ModelDefinitions public string ColumnName { get; set; } public Type PropertyType { get; set; } - public string DbType { get; set; } + public bool HasSpecialDbType { get; set; } + public SpecialDbTypes DbType { get; set; } public int? DbTypeLength { get; set; } public bool IsNullable { get; set; } diff --git a/src/Umbraco.Core/Persistence/SqlSyntax/ModelDefinitions/DefinitionFactory.cs b/src/Umbraco.Core/Persistence/SqlSyntax/ModelDefinitions/DefinitionFactory.cs index 42acad43ea..8bcfa12b4d 100644 --- a/src/Umbraco.Core/Persistence/SqlSyntax/ModelDefinitions/DefinitionFactory.cs +++ b/src/Umbraco.Core/Persistence/SqlSyntax/ModelDefinitions/DefinitionFactory.cs @@ -34,7 +34,9 @@ namespace Umbraco.Core.Persistence.SqlSyntax.ModelDefinitions var databaseTypeAttribute = propertyInfo.FirstAttribute(); if (databaseTypeAttribute != null) { - columnDefinition.DbType = databaseTypeAttribute.DatabaseType.ToString(); + columnDefinition.HasSpecialDbType = true; + columnDefinition.DbType = databaseTypeAttribute.DatabaseType; + if (databaseTypeAttribute.Length > 0) columnDefinition.DbTypeLength = databaseTypeAttribute.Length; } diff --git a/src/Umbraco.Core/Persistence/SqlSyntax/MySqlSyntaxProvider.cs b/src/Umbraco.Core/Persistence/SqlSyntax/MySqlSyntaxProvider.cs index c7061ab043..a8cd1bc0c4 100644 --- a/src/Umbraco.Core/Persistence/SqlSyntax/MySqlSyntaxProvider.cs +++ b/src/Umbraco.Core/Persistence/SqlSyntax/MySqlSyntaxProvider.cs @@ -1,4 +1,7 @@ -using Umbraco.Core.Persistence.SqlSyntax.ModelDefinitions; +using System.Collections.Generic; +using System.Text; +using Umbraco.Core.Persistence.DatabaseAnnotations; +using Umbraco.Core.Persistence.SqlSyntax.ModelDefinitions; namespace Umbraco.Core.Persistence.SqlSyntax { @@ -13,13 +16,16 @@ namespace Umbraco.Core.Persistence.SqlSyntax private MySqlSyntaxProvider() { + DefaultStringLength = 255; + StringLengthColumnDefinitionFormat = StringLengthUnicodeColumnDefinitionFormat; + StringColumnDefinition = string.Format(StringLengthColumnDefinitionFormat, DefaultStringLength); + AutoIncrementDefinition = "AUTO_INCREMENT"; IntColumnDefinition = "int(11)"; BoolColumnDefinition = "tinyint(1)"; TimeColumnDefinition = "time"; DecimalColumnDefinition = "decimal(38,6)"; GuidColumnDefinition = "char(32)"; - DefaultStringLength = 255; InitColumnTypeMap(); @@ -41,6 +47,115 @@ namespace Umbraco.Core.Persistence.SqlSyntax return string.Format("`{0}`", name); } + public override string GetSpecialDbType(SpecialDbTypes dbTypes) + { + if (dbTypes == SpecialDbTypes.NCHAR) + { + return "CHAR"; + } + else if (dbTypes == SpecialDbTypes.NTEXT) + return "LONGTEXT"; + + return "NVARCHAR"; + } + + public override string GetConstraintDefinition(ColumnDefinition column, string tableName) + { + var sql = new StringBuilder(); + + if (column.ConstraintDefaultValue.Equals("getdate()")) + { + sql.Append(" DEFAULT CURRENT_TIMESTAMP"); + } + else + { + sql.AppendFormat(DefaultValueFormat, column.ConstraintDefaultValue); + } + + /*sql.AppendFormat(DefaultValueFormat, + column.ConstraintDefaultValue.Equals("getdate()") + ? "CURRENT_TIMESTAMP" + : column.ConstraintDefaultValue);*/ + + return sql.ToString(); + } + + public override string GetColumnDefinition(ColumnDefinition column, string tableName) + { + string dbTypeDefinition; + if (column.HasSpecialDbType) + { + if (column.DbTypeLength.HasValue) + { + dbTypeDefinition = string.Format("{0}({1})", + GetSpecialDbType(column.DbType), + column.DbTypeLength.Value); + } + else + { + dbTypeDefinition = GetSpecialDbType(column.DbType); + } + } + else if (column.PropertyType == typeof(string)) + { + dbTypeDefinition = string.Format(StringLengthColumnDefinitionFormat, column.DbTypeLength.GetValueOrDefault(DefaultStringLength)); + } + else + { + if (!DbTypeMap.ColumnTypeMap.TryGetValue(column.PropertyType, out dbTypeDefinition)) + { + dbTypeDefinition = ""; + } + } + + var sql = new StringBuilder(); + sql.AppendFormat("{0} {1}", GetQuotedColumnName(column.ColumnName), dbTypeDefinition); + + if (column.IsPrimaryKeyIdentityColumn) + { + sql.Append(" NOT NULL PRIMARY KEY ").Append(AutoIncrementDefinition); + } + else + { + sql.Append(column.IsNullable ? " NULL" : " NOT NULL"); + } + + if (column.HasConstraint) + { + sql.Append(GetConstraintDefinition(column, tableName)); + sql = sql.Replace("DATETIME", "TIMESTAMP"); + } + + return sql.ToString(); + } + + public override string GetPrimaryKeyStatement(ColumnDefinition column, string tableName) + { + return string.Empty; + } + + public override List ToCreateIndexStatements(TableDefinition table) + { + var indexes = new List(); + + foreach (var index in table.IndexDefinitions) + { + string name = string.IsNullOrEmpty(index.IndexName) + ? string.Format("IX_{0}_{1}", table.TableName, index.IndexForColumn) + : index.IndexName; + + string columns = string.IsNullOrEmpty(index.ColumnNames) + ? GetQuotedColumnName(index.IndexForColumn) + : index.ColumnNames; + + indexes.Add(string.Format("CREATE INDEX {0} ON {1} ({2}); \n", + GetQuotedName(name), + GetQuotedTableName(table.TableName), + columns)); + } + return indexes; + } + public override bool DoesTableExist(Database db, string tableName) { var result = diff --git a/src/Umbraco.Core/Persistence/SqlSyntax/SqlSyntaxProviderBase.cs b/src/Umbraco.Core/Persistence/SqlSyntax/SqlSyntaxProviderBase.cs index 556fde56fb..a1c8ca9b86 100644 --- a/src/Umbraco.Core/Persistence/SqlSyntax/SqlSyntaxProviderBase.cs +++ b/src/Umbraco.Core/Persistence/SqlSyntax/SqlSyntaxProviderBase.cs @@ -22,6 +22,8 @@ namespace Umbraco.Core.Persistence.SqlSyntax string GetColumnDefinition(ColumnDefinition column, string tableName); string GetPrimaryKeyStatement(ColumnDefinition column, string tableName); string ToCreatePrimaryKeyStatement(TableDefinition table); + string GetSpecialDbType(SpecialDbTypes dbTypes); + string GetConstraintDefinition(ColumnDefinition column, string tableName); } internal abstract class SqlSyntaxProviderBase : ISqlSyntaxProvider @@ -110,6 +112,11 @@ namespace Umbraco.Core.Persistence.SqlSyntax return string.Format("\"{0}\"", name); } + public virtual string GetQuotedValue(string value) + { + return string.Format("'{0}'", value); + } + public virtual string GetIndexType(IndexTypes indexTypes) { string indexType; @@ -127,14 +134,33 @@ namespace Umbraco.Core.Persistence.SqlSyntax return indexType; } + public virtual string GetSpecialDbType(SpecialDbTypes dbTypes) + { + if (dbTypes == SpecialDbTypes.NCHAR) + { + return "NCHAR"; + } + else if (dbTypes == SpecialDbTypes.NTEXT) + return "NTEXT"; + + return "NVARCHAR"; + } + public virtual string GetColumnDefinition(ColumnDefinition column, string tableName) { string dbTypeDefinition; - if(!string.IsNullOrEmpty(column.DbType)) + if (column.HasSpecialDbType) { - dbTypeDefinition = column.DbType;//Translate if (column.DbTypeLength.HasValue) - dbTypeDefinition = string.Format("{0}({1})", column.DbType, column.DbTypeLength.Value); + { + dbTypeDefinition = string.Format("{0}({1})", + GetSpecialDbType(column.DbType), + column.DbTypeLength.Value); + } + else + { + dbTypeDefinition = GetSpecialDbType(column.DbType); + } } else if (column.PropertyType == typeof(string)) { @@ -162,14 +188,25 @@ namespace Umbraco.Core.Persistence.SqlSyntax if(column.HasConstraint) { - sql.AppendFormat(" CONSTRAINT {0}", + sql.Append(GetConstraintDefinition(column, tableName)); + } + + return sql.ToString(); + } + + public virtual string GetConstraintDefinition(ColumnDefinition column, string tableName) + { + var sql = new StringBuilder(); + sql.AppendFormat(" CONSTRAINT {0}", string.IsNullOrEmpty(column.ConstraintName) ? GetQuotedName(string.Format("DF_{0}_{1}", tableName, column.ColumnName)) : column.ConstraintName); - sql.AppendFormat(DefaultValueFormat, column.ConstraintDefaultValue); - } + string value = column.PropertyType == typeof (string) + ? GetQuotedValue(column.ConstraintDefaultValue) + : column.ConstraintDefaultValue; + sql.AppendFormat(DefaultValueFormat, value); return sql.ToString(); } diff --git a/src/Umbraco.Core/Umbraco.Core.csproj b/src/Umbraco.Core/Umbraco.Core.csproj index b7952a6ff9..838020a824 100644 --- a/src/Umbraco.Core/Umbraco.Core.csproj +++ b/src/Umbraco.Core/Umbraco.Core.csproj @@ -106,7 +106,7 @@ - + diff --git a/src/Umbraco.Tests/Persistence/BaseTableByTableTest.cs b/src/Umbraco.Tests/Persistence/BaseTableByTableTest.cs new file mode 100644 index 0000000000..d82fba1ba7 --- /dev/null +++ b/src/Umbraco.Tests/Persistence/BaseTableByTableTest.cs @@ -0,0 +1,581 @@ +using NUnit.Framework; +using Umbraco.Core.Models.Rdbms; +using Umbraco.Core.Persistence; + +namespace Umbraco.Tests.Persistence +{ + [TestFixture] + public abstract class BaseTableByTableTest + { + [SetUp] + public abstract void Initialize(); + + [TearDown] + public abstract void TearDown(); + + public abstract Database Database { get; } + + [Test] + public void Can_Create_umbracoNode_Table() + { + using (Transaction transaction = Database.GetTransaction()) + { + Database.CreateTable(); + + //transaction.Complete(); + } + } + + [Test] + public void Can_Create_umbracoApp_Table() + { + using (Transaction transaction = Database.GetTransaction()) + { + Database.CreateTable(); + + //transaction.Complete(); + } + } + + [Test] + public void Can_Create_umbracoAppTree_Table() + { + + using (Transaction transaction = Database.GetTransaction()) + { + Database.CreateTable(); + + //transaction.Complete(); + } + } + + [Test] + public void Can_Create_cmsContentType2ContentType_Table() + { + + using (Transaction transaction = Database.GetTransaction()) + { + Database.CreateTable(); + + //transaction.Complete(); + } + } + + [Test] + public void Can_Create_cmsContentTypeAllowedContentType_Table() + { + + using (Transaction transaction = Database.GetTransaction()) + { + Database.CreateTable(); + Database.CreateTable(); + Database.CreateTable(); + + //transaction.Complete(); + } + } + + [Test] + public void Can_Create_cmsContentType_Table() + { + + using (Transaction transaction = Database.GetTransaction()) + { + Database.CreateTable(); + Database.CreateTable(); + + //transaction.Complete(); + } + } + + [Test] + public void Can_Create_cmsContentVersion_Table() + { + + using (Transaction transaction = Database.GetTransaction()) + { + Database.CreateTable(); + Database.CreateTable(); + Database.CreateTable(); + + //transaction.Complete(); + } + } + + [Test] + public void Can_Create_cmsContentXml_Table() + { + + using (Transaction transaction = Database.GetTransaction()) + { + Database.CreateTable(); + Database.CreateTable(); + Database.CreateTable(); + + //transaction.Complete(); + } + } + + [Test] + public void Can_Create_cmsDataType_Table() + { + + using (Transaction transaction = Database.GetTransaction()) + { + Database.CreateTable(); + Database.CreateTable(); + + //transaction.Complete(); + } + } + + [Test] + public void Can_Create_cmsDataTypePreValues_Table() + { + + using (Transaction transaction = Database.GetTransaction()) + { + Database.CreateTable(); + Database.CreateTable(); + Database.CreateTable(); + + //transaction.Complete(); + } + } + + [Test] + public void Can_Create_cmsDictionary_Table() + { + + using (Transaction transaction = Database.GetTransaction()) + { + Database.CreateTable(); + + //transaction.Complete(); + } + } + + [Test] + public void Can_Create_cmsLanguageText_Table() + { + + using (Transaction transaction = Database.GetTransaction()) + { + Database.CreateTable(); + Database.CreateTable(); + + //transaction.Complete(); + } + } + + [Test] + public void Can_Create_cmsTemplate_Table() + { + + using (Transaction transaction = Database.GetTransaction()) + { + Database.CreateTable(); + Database.CreateTable(); + + //transaction.Complete(); + } + } + + [Test] + public void Can_Create_cmsDocument_Table() + { + + using (Transaction transaction = Database.GetTransaction()) + { + Database.CreateTable(); + Database.CreateTable(); + Database.CreateTable(); + Database.CreateTable(); + + //transaction.Complete(); + } + } + + [Test] + public void Can_Create_cmsDocumentType_Table() + { + + using (Transaction transaction = Database.GetTransaction()) + { + Database.CreateTable(); + Database.CreateTable(); + Database.CreateTable(); + Database.CreateTable(); + + //transaction.Complete(); + } + } + + [Test] + public void Can_Create_umbracoDomains_Table() + { + + using (Transaction transaction = Database.GetTransaction()) + { + Database.CreateTable(); + Database.CreateTable(); + + //transaction.Complete(); + } + } + + [Test] + public void Can_Create_umbracoLanguage_Table() + { + + using (Transaction transaction = Database.GetTransaction()) + { + Database.CreateTable(); + + //transaction.Complete(); + } + } + + [Test] + public void Can_Create_umbracoLog_Table() + { + + using (Transaction transaction = Database.GetTransaction()) + { + Database.CreateTable(); + + //transaction.Complete(); + } + } + + [Test] + public void Can_Create_cmsMacro_Table() + { + + using (Transaction transaction = Database.GetTransaction()) + { + Database.CreateTable(); + + //transaction.Complete(); + } + } + + [Test] + public void Can_Create_cmsMacroPropertyType_Table() + { + + using (Transaction transaction = Database.GetTransaction()) + { + Database.CreateTable(); + + //transaction.Complete(); + } + } + + [Test] + public void Can_Create_cmsMacroProperty_Table() + { + + using (Transaction transaction = Database.GetTransaction()) + { + Database.CreateTable(); + Database.CreateTable(); + Database.CreateTable(); + + //transaction.Complete(); + } + } + + [Test] + public void Can_Create_cmsMember_Table() + { + + using (Transaction transaction = Database.GetTransaction()) + { + Database.CreateTable(); + Database.CreateTable(); + Database.CreateTable(); + + //transaction.Complete(); + } + } + + [Test] + public void Can_Create_cmsMember2MemberGroup_Table() + { + + using (Transaction transaction = Database.GetTransaction()) + { + Database.CreateTable(); + Database.CreateTable(); + Database.CreateTable(); + Database.CreateTable(); + + //transaction.Complete(); + } + } + + [Test] + public void Can_Create_cmsMemberType_Table() + { + + using (Transaction transaction = Database.GetTransaction()) + { + Database.CreateTable(); + Database.CreateTable(); + Database.CreateTable(); + + //transaction.Complete(); + } + } + + [Test] + public void Can_Create_cmsPreviewXml_Table() + { + + using (Transaction transaction = Database.GetTransaction()) + { + Database.CreateTable(); + Database.CreateTable(); + Database.CreateTable(); + Database.CreateTable(); + + //transaction.Complete(); + } + } + + [Test] + public void Can_Create_cmsPropertyData_Table() + { + + using (Transaction transaction = Database.GetTransaction()) + { + Database.CreateTable(); + Database.CreateTable(); + Database.CreateTable(); + Database.CreateTable(); + Database.CreateTable(); + Database.CreateTable(); + + //transaction.Complete(); + } + } + + [Test] + public void Can_Create_cmsPropertyType_Table() + { + + using (Transaction transaction = Database.GetTransaction()) + { + Database.CreateTable(); + Database.CreateTable(); + Database.CreateTable(); + Database.CreateTable(); + Database.CreateTable(); + + //transaction.Complete(); + } + } + + [Test] + public void Can_Create_cmsPropertyTypeGroup_Table() + { + + using (Transaction transaction = Database.GetTransaction()) + { + Database.CreateTable(); + Database.CreateTable(); + Database.CreateTable(); + + //transaction.Complete(); + } + } + + [Test] + public void Can_Create_umbracoRelation_Table() + { + + using (Transaction transaction = Database.GetTransaction()) + { + Database.CreateTable(); + Database.CreateTable(); + Database.CreateTable(); + + //transaction.Complete(); + } + } + + [Test] + public void Can_Create_umbracoRelationType_Table() + { + + using (Transaction transaction = Database.GetTransaction()) + { + Database.CreateTable(); + + //transaction.Complete(); + } + } + + [Test] + public void Can_Create_cmsStylesheet_Table() + { + + using (Transaction transaction = Database.GetTransaction()) + { + Database.CreateTable(); + Database.CreateTable(); + + //transaction.Complete(); + } + } + + [Test] + public void Can_Create_cmsStylesheetProperty_Table() + { + + using (Transaction transaction = Database.GetTransaction()) + { + Database.CreateTable(); + Database.CreateTable(); + + //transaction.Complete(); + } + } + + [Test] + public void Can_Create_cmsTags_Table() + { + + using (Transaction transaction = Database.GetTransaction()) + { + Database.CreateTable(); + + //transaction.Complete(); + } + } + + [Test] + public void Can_Create_cmsTagRelationship_Table() + { + + using (Transaction transaction = Database.GetTransaction()) + { + Database.CreateTable(); + Database.CreateTable(); + Database.CreateTable(); + + //transaction.Complete(); + } + } + + [Test] + public void Can_Create_cmsTask_Table() + { + + using (Transaction transaction = Database.GetTransaction()) + { + Database.CreateTable(); + Database.CreateTable(); + Database.CreateTable(); + Database.CreateTable(); + Database.CreateTable(); + + //transaction.Complete(); + } + } + + [Test] + public void Can_Create_cmsTaskType_Table() + { + + using (Transaction transaction = Database.GetTransaction()) + { + Database.CreateTable(); + + //transaction.Complete(); + } + } + + [Test] + public void Can_Create_umbracoUserLogins_Table() + { + + using (Transaction transaction = Database.GetTransaction()) + { + Database.CreateTable(); + + //transaction.Complete(); + } + } + + [Test] + public void Can_Create_umbracoUser_Table() + { + + using (Transaction transaction = Database.GetTransaction()) + { + Database.CreateTable(); + Database.CreateTable(); + + //transaction.Complete(); + } + } + + [Test] + public void Can_Create_umbracoUserType_Table() + { + + using (Transaction transaction = Database.GetTransaction()) + { + Database.CreateTable(); + + //transaction.Complete(); + } + } + + [Test] + public void Can_Create_umbracoUser2app_Table() + { + + using (Transaction transaction = Database.GetTransaction()) + { + Database.CreateTable(); + Database.CreateTable(); + Database.CreateTable(); + + //transaction.Complete(); + } + } + + [Test] + public void Can_Create_umbracoUser2NodeNotify_Table() + { + + using (Transaction transaction = Database.GetTransaction()) + { + Database.CreateTable(); + Database.CreateTable(); + Database.CreateTable(); + Database.CreateTable(); + + //transaction.Complete(); + } + } + + [Test] + public void Can_Create_umbracoUser2NodePermission_Table() + { + + using (Transaction transaction = Database.GetTransaction()) + { + Database.CreateTable(); + Database.CreateTable(); + Database.CreateTable(); + Database.CreateTable(); + + //transaction.Complete(); + } + } + } +} \ No newline at end of file diff --git a/src/Umbraco.Tests/Persistence/DatabaseExtensionsTest.cs b/src/Umbraco.Tests/Persistence/DatabaseExtensionsTest.cs deleted file mode 100644 index b3c3df86ae..0000000000 --- a/src/Umbraco.Tests/Persistence/DatabaseExtensionsTest.cs +++ /dev/null @@ -1,612 +0,0 @@ -using System; -using System.Configuration; -using System.Data.SqlServerCe; -using System.IO; -using NUnit.Framework; -using Umbraco.Core.Models.Rdbms; -using Umbraco.Core.Persistence; -using Umbraco.Core.Persistence.SqlSyntax; -using Umbraco.Tests.TestHelpers; - -namespace Umbraco.Tests.Persistence -{ - /// - /// Test with basic setup of an Sql CE database, which runs tests for the creation of all tables - /// with their referenced dependencies. The creation isn't committed to the database or asserted, but - /// the tests will fail if the creation isn't possible. - /// - [TestFixture] - public class DatabaseExtensionsTest - { - [SetUp] - public virtual void Initialize() - { - string path = TestHelper.CurrentAssemblyDirectory; - AppDomain.CurrentDomain.SetData("DataDirectory", path); - - //Delete database file before continueing - string filePath = string.Concat(path, "\\test.sdf"); - if(File.Exists(filePath)) - { - File.Delete(filePath); - } - - //Get the connectionstring settings from config - var settings = ConfigurationManager.ConnectionStrings["umbracoDbDsn"]; - - //Create the Sql CE database - var engine = new SqlCeEngine(settings.ConnectionString); - engine.CreateDatabase(); - - SyntaxConfig.SqlSyntaxProvider = SqlCeSyntaxProvider.Instance; - - //Create the umbraco database - //DatabaseFactory.Current.Database.Initialize(); - } - - [Test] - public void Can_Create_umbracoNode_Table() - { - var factory = DatabaseFactory.Current; - using(Transaction transaction = factory.Database.GetTransaction()) - { - factory.Database.CreateTable(); - - //transaction.Complete(); - } - } - - [Test] - public void Can_Create_umbracoApp_Table() - { - var factory = DatabaseFactory.Current; - using (Transaction transaction = factory.Database.GetTransaction()) - { - factory.Database.CreateTable(); - - //transaction.Complete(); - } - } - - [Test] - public void Can_Create_umbracoAppTree_Table() - { - var factory = DatabaseFactory.Current; - using (Transaction transaction = factory.Database.GetTransaction()) - { - factory.Database.CreateTable(); - - //transaction.Complete(); - } - } - - [Test] - public void Can_Create_cmsContentType2ContentType_Table() - { - var factory = DatabaseFactory.Current; - using (Transaction transaction = factory.Database.GetTransaction()) - { - factory.Database.CreateTable(); - - //transaction.Complete(); - } - } - - [Test] - public void Can_Create_cmsContentTypeAllowedContentType_Table() - { - var factory = DatabaseFactory.Current; - using (Transaction transaction = factory.Database.GetTransaction()) - { - factory.Database.CreateTable(); - factory.Database.CreateTable(); - factory.Database.CreateTable(); - - //transaction.Complete(); - } - } - - [Test] - public void Can_Create_cmsContentType_Table() - { - var factory = DatabaseFactory.Current; - using (Transaction transaction = factory.Database.GetTransaction()) - { - factory.Database.CreateTable(); - factory.Database.CreateTable(); - - //transaction.Complete(); - } - } - - [Test] - public void Can_Create_cmsContentVersion_Table() - { - var factory = DatabaseFactory.Current; - using (Transaction transaction = factory.Database.GetTransaction()) - { - factory.Database.CreateTable(); - factory.Database.CreateTable(); - factory.Database.CreateTable(); - - //transaction.Complete(); - } - } - - [Test] - public void Can_Create_cmsContentXml_Table() - { - var factory = DatabaseFactory.Current; - using (Transaction transaction = factory.Database.GetTransaction()) - { - factory.Database.CreateTable(); - factory.Database.CreateTable(); - factory.Database.CreateTable(); - - //transaction.Complete(); - } - } - - [Test] - public void Can_Create_cmsDataType_Table() - { - var factory = DatabaseFactory.Current; - using (Transaction transaction = factory.Database.GetTransaction()) - { - factory.Database.CreateTable(); - factory.Database.CreateTable(); - - //transaction.Complete(); - } - } - - [Test] - public void Can_Create_cmsDataTypePreValues_Table() - { - var factory = DatabaseFactory.Current; - using (Transaction transaction = factory.Database.GetTransaction()) - { - factory.Database.CreateTable(); - factory.Database.CreateTable(); - factory.Database.CreateTable(); - - //transaction.Complete(); - } - } - - [Test] - public void Can_Create_cmsDictionary_Table() - { - var factory = DatabaseFactory.Current; - using (Transaction transaction = factory.Database.GetTransaction()) - { - factory.Database.CreateTable(); - - //transaction.Complete(); - } - } - - [Test] - public void Can_Create_cmsLanguageText_Table() - { - var factory = DatabaseFactory.Current; - using (Transaction transaction = factory.Database.GetTransaction()) - { - factory.Database.CreateTable(); - factory.Database.CreateTable(); - - //transaction.Complete(); - } - } - - [Test] - public void Can_Create_cmsTemplate_Table() - { - var factory = DatabaseFactory.Current; - using (Transaction transaction = factory.Database.GetTransaction()) - { - factory.Database.CreateTable(); - factory.Database.CreateTable(); - - //transaction.Complete(); - } - } - - [Test] - public void Can_Create_cmsDocument_Table() - { - var factory = DatabaseFactory.Current; - using (Transaction transaction = factory.Database.GetTransaction()) - { - factory.Database.CreateTable(); - factory.Database.CreateTable(); - factory.Database.CreateTable(); - factory.Database.CreateTable(); - - //transaction.Complete(); - } - } - - [Test] - public void Can_Create_cmsDocumentType_Table() - { - var factory = DatabaseFactory.Current; - using (Transaction transaction = factory.Database.GetTransaction()) - { - factory.Database.CreateTable(); - factory.Database.CreateTable(); - factory.Database.CreateTable(); - factory.Database.CreateTable(); - - //transaction.Complete(); - } - } - - [Test] - public void Can_Create_umbracoDomains_Table() - { - var factory = DatabaseFactory.Current; - using (Transaction transaction = factory.Database.GetTransaction()) - { - factory.Database.CreateTable(); - factory.Database.CreateTable(); - - //transaction.Complete(); - } - } - - [Test] - public void Can_Create_umbracoLanguage_Table() - { - var factory = DatabaseFactory.Current; - using (Transaction transaction = factory.Database.GetTransaction()) - { - factory.Database.CreateTable(); - - //transaction.Complete(); - } - } - - [Test] - public void Can_Create_umbracoLog_Table() - { - var factory = DatabaseFactory.Current; - using (Transaction transaction = factory.Database.GetTransaction()) - { - factory.Database.CreateTable(); - - //transaction.Complete(); - } - } - - [Test] - public void Can_Create_cmsMacro_Table() - { - var factory = DatabaseFactory.Current; - using (Transaction transaction = factory.Database.GetTransaction()) - { - factory.Database.CreateTable(); - - //transaction.Complete(); - } - } - - [Test] - public void Can_Create_cmsMacroPropertyType_Table() - { - var factory = DatabaseFactory.Current; - using (Transaction transaction = factory.Database.GetTransaction()) - { - factory.Database.CreateTable(); - - //transaction.Complete(); - } - } - - [Test] - public void Can_Create_cmsMacroProperty_Table() - { - var factory = DatabaseFactory.Current; - using (Transaction transaction = factory.Database.GetTransaction()) - { - factory.Database.CreateTable(); - factory.Database.CreateTable(); - factory.Database.CreateTable(); - - //transaction.Complete(); - } - } - - [Test] - public void Can_Create_cmsMember_Table() - { - var factory = DatabaseFactory.Current; - using (Transaction transaction = factory.Database.GetTransaction()) - { - factory.Database.CreateTable(); - factory.Database.CreateTable(); - factory.Database.CreateTable(); - - //transaction.Complete(); - } - } - - [Test] - public void Can_Create_cmsMember2MemberGroup_Table() - { - var factory = DatabaseFactory.Current; - using (Transaction transaction = factory.Database.GetTransaction()) - { - factory.Database.CreateTable(); - factory.Database.CreateTable(); - factory.Database.CreateTable(); - factory.Database.CreateTable(); - - //transaction.Complete(); - } - } - - [Test] - public void Can_Create_cmsMemberType_Table() - { - var factory = DatabaseFactory.Current; - using (Transaction transaction = factory.Database.GetTransaction()) - { - factory.Database.CreateTable(); - factory.Database.CreateTable(); - factory.Database.CreateTable(); - - //transaction.Complete(); - } - } - - [Test] - public void Can_Create_cmsPreviewXml_Table() - { - var factory = DatabaseFactory.Current; - using (Transaction transaction = factory.Database.GetTransaction()) - { - factory.Database.CreateTable(); - factory.Database.CreateTable(); - factory.Database.CreateTable(); - factory.Database.CreateTable(); - - //transaction.Complete(); - } - } - - [Test] - public void Can_Create_cmsPropertyData_Table() - { - var factory = DatabaseFactory.Current; - using (Transaction transaction = factory.Database.GetTransaction()) - { - factory.Database.CreateTable(); - factory.Database.CreateTable(); - factory.Database.CreateTable(); - factory.Database.CreateTable(); - factory.Database.CreateTable(); - factory.Database.CreateTable(); - - //transaction.Complete(); - } - } - - [Test] - public void Can_Create_cmsPropertyType_Table() - { - var factory = DatabaseFactory.Current; - using (Transaction transaction = factory.Database.GetTransaction()) - { - factory.Database.CreateTable(); - factory.Database.CreateTable(); - factory.Database.CreateTable(); - factory.Database.CreateTable(); - factory.Database.CreateTable(); - - //transaction.Complete(); - } - } - - [Test] - public void Can_Create_cmsPropertyTypeGroup_Table() - { - var factory = DatabaseFactory.Current; - using (Transaction transaction = factory.Database.GetTransaction()) - { - factory.Database.CreateTable(); - factory.Database.CreateTable(); - factory.Database.CreateTable(); - - //transaction.Complete(); - } - } - - [Test] - public void Can_Create_umbracoRelation_Table() - { - var factory = DatabaseFactory.Current; - using (Transaction transaction = factory.Database.GetTransaction()) - { - factory.Database.CreateTable(); - factory.Database.CreateTable(); - factory.Database.CreateTable(); - - //transaction.Complete(); - } - } - - [Test] - public void Can_Create_umbracoRelationType_Table() - { - var factory = DatabaseFactory.Current; - using (Transaction transaction = factory.Database.GetTransaction()) - { - factory.Database.CreateTable(); - - //transaction.Complete(); - } - } - - [Test] - public void Can_Create_cmsStylesheet_Table() - { - var factory = DatabaseFactory.Current; - using (Transaction transaction = factory.Database.GetTransaction()) - { - factory.Database.CreateTable(); - factory.Database.CreateTable(); - - //transaction.Complete(); - } - } - - [Test] - public void Can_Create_cmsStylesheetProperty_Table() - { - var factory = DatabaseFactory.Current; - using (Transaction transaction = factory.Database.GetTransaction()) - { - factory.Database.CreateTable(); - factory.Database.CreateTable(); - - //transaction.Complete(); - } - } - - [Test] - public void Can_Create_cmsTags_Table() - { - var factory = DatabaseFactory.Current; - using (Transaction transaction = factory.Database.GetTransaction()) - { - factory.Database.CreateTable(); - - //transaction.Complete(); - } - } - - [Test] - public void Can_Create_cmsTagRelationship_Table() - { - var factory = DatabaseFactory.Current; - using (Transaction transaction = factory.Database.GetTransaction()) - { - factory.Database.CreateTable(); - factory.Database.CreateTable(); - factory.Database.CreateTable(); - - //transaction.Complete(); - } - } - - [Test] - public void Can_Create_cmsTask_Table() - { - var factory = DatabaseFactory.Current; - using (Transaction transaction = factory.Database.GetTransaction()) - { - factory.Database.CreateTable(); - factory.Database.CreateTable(); - factory.Database.CreateTable(); - factory.Database.CreateTable(); - factory.Database.CreateTable(); - - //transaction.Complete(); - } - } - - [Test] - public void Can_Create_cmsTaskType_Table() - { - var factory = DatabaseFactory.Current; - using (Transaction transaction = factory.Database.GetTransaction()) - { - factory.Database.CreateTable(); - - //transaction.Complete(); - } - } - - [Test] - public void Can_Create_umbracoUserLogins_Table() - { - var factory = DatabaseFactory.Current; - using (Transaction transaction = factory.Database.GetTransaction()) - { - factory.Database.CreateTable(); - - //transaction.Complete(); - } - } - - [Test] - public void Can_Create_umbracoUser_Table() - { - var factory = DatabaseFactory.Current; - using (Transaction transaction = factory.Database.GetTransaction()) - { - factory.Database.CreateTable(); - factory.Database.CreateTable(); - - //transaction.Complete(); - } - } - - [Test] - public void Can_Create_umbracoUserType_Table() - { - var factory = DatabaseFactory.Current; - using (Transaction transaction = factory.Database.GetTransaction()) - { - factory.Database.CreateTable(); - - //transaction.Complete(); - } - } - - [Test] - public void Can_Create_umbracoUser2app_Table() - { - var factory = DatabaseFactory.Current; - using (Transaction transaction = factory.Database.GetTransaction()) - { - factory.Database.CreateTable(); - factory.Database.CreateTable(); - factory.Database.CreateTable(); - - //transaction.Complete(); - } - } - - [Test] - public void Can_Create_umbracoUser2NodeNotify_Table() - { - var factory = DatabaseFactory.Current; - using (Transaction transaction = factory.Database.GetTransaction()) - { - factory.Database.CreateTable(); - factory.Database.CreateTable(); - factory.Database.CreateTable(); - factory.Database.CreateTable(); - - //transaction.Complete(); - } - } - - [Test] - public void Can_Create_umbracoUser2NodePermission_Table() - { - var factory = DatabaseFactory.Current; - using (Transaction transaction = factory.Database.GetTransaction()) - { - factory.Database.CreateTable(); - factory.Database.CreateTable(); - factory.Database.CreateTable(); - factory.Database.CreateTable(); - - //transaction.Complete(); - } - } - } -} \ No newline at end of file diff --git a/src/Umbraco.Tests/Persistence/MySqlDatabaseCreationTest.cs b/src/Umbraco.Tests/Persistence/MySqlDatabaseCreationTest.cs index e8847e276e..77dda6f559 100644 --- a/src/Umbraco.Tests/Persistence/MySqlDatabaseCreationTest.cs +++ b/src/Umbraco.Tests/Persistence/MySqlDatabaseCreationTest.cs @@ -12,7 +12,7 @@ namespace Umbraco.Tests.Persistence public override string ConnectionString { - get { return "Server = 192.168.1.5; Database = testDb; Uid = umbraco; Pwd = umbraco"; } + get { return "Server = 192.168.1.108; Database = testDb; Uid = umbraco; Pwd = umbraco"; } } public override string ProviderName diff --git a/src/Umbraco.Tests/Persistence/MySqlTableByTableTest.cs b/src/Umbraco.Tests/Persistence/MySqlTableByTableTest.cs new file mode 100644 index 0000000000..ed7eae4621 --- /dev/null +++ b/src/Umbraco.Tests/Persistence/MySqlTableByTableTest.cs @@ -0,0 +1,41 @@ +using System; +using NUnit.Framework; +using Umbraco.Core.Persistence; +using Umbraco.Core.Persistence.SqlSyntax; +using Umbraco.Tests.TestHelpers; + +namespace Umbraco.Tests.Persistence +{ + [TestFixture, NUnit.Framework.Ignore] + public class MySqlTableByTableTest : BaseTableByTableTest + { + private Database _database; + + #region Overrides of BaseTableByTableTest + + [SetUp] + public override void Initialize() + { + string path = TestHelper.CurrentAssemblyDirectory; + AppDomain.CurrentDomain.SetData("DataDirectory", path); + + SyntaxConfig.SqlSyntaxProvider = MySqlSyntaxProvider.Instance; + + _database = new Database("Server = 192.168.1.108; Database = testDb; Uid = umbraco; Pwd = umbraco", + "MySql.Data.MySqlClient"); + } + + [TearDown] + public override void TearDown() + { + AppDomain.CurrentDomain.SetData("DataDirectory", null); + } + + public override Database Database + { + get { return _database; } + } + + #endregion + } +} \ No newline at end of file diff --git a/src/Umbraco.Tests/Persistence/SqlCeTableByTableTest.cs b/src/Umbraco.Tests/Persistence/SqlCeTableByTableTest.cs new file mode 100644 index 0000000000..a7d2892afa --- /dev/null +++ b/src/Umbraco.Tests/Persistence/SqlCeTableByTableTest.cs @@ -0,0 +1,55 @@ +using System; +using System.Configuration; +using System.Data.SqlServerCe; +using System.IO; +using NUnit.Framework; +using Umbraco.Core.Persistence; +using Umbraco.Core.Persistence.SqlSyntax; +using Umbraco.Tests.TestHelpers; + +namespace Umbraco.Tests.Persistence +{ + [TestFixture] + public class SqlCeTableByTableTest : BaseTableByTableTest + { + private Database _database; + + #region Overrides of BaseTableByTableTest + + [SetUp] + public override void Initialize() + { + string path = TestHelper.CurrentAssemblyDirectory; + AppDomain.CurrentDomain.SetData("DataDirectory", path); + + //Delete database file before continueing + string filePath = string.Concat(path, "\\test.sdf"); + if (File.Exists(filePath)) + { + File.Delete(filePath); + } + + //Create the Sql CE database + var engine = new SqlCeEngine("Datasource=|DataDirectory|test.sdf"); + engine.CreateDatabase(); + + SyntaxConfig.SqlSyntaxProvider = SqlCeSyntaxProvider.Instance; + + _database = new Database("Datasource=|DataDirectory|test.sdf", + "System.Data.SqlServerCe.4.0"); + } + + [TearDown] + public override void TearDown() + { + AppDomain.CurrentDomain.SetData("DataDirectory", null); + } + + public override Database Database + { + get { return _database; } + } + + #endregion + } +} \ No newline at end of file diff --git a/src/Umbraco.Tests/Persistence/SqlTableByTableTest.cs b/src/Umbraco.Tests/Persistence/SqlTableByTableTest.cs new file mode 100644 index 0000000000..df298b70f2 --- /dev/null +++ b/src/Umbraco.Tests/Persistence/SqlTableByTableTest.cs @@ -0,0 +1,41 @@ +using System; +using NUnit.Framework; +using Umbraco.Core.Persistence; +using Umbraco.Core.Persistence.SqlSyntax; +using Umbraco.Tests.TestHelpers; + +namespace Umbraco.Tests.Persistence +{ + [TestFixture, NUnit.Framework.Ignore] + public class SqlTableByTableTest : BaseTableByTableTest + { + private Database _database; + + #region Overrides of BaseTableByTableTest + + [SetUp] + public override void Initialize() + { + string path = TestHelper.CurrentAssemblyDirectory; + AppDomain.CurrentDomain.SetData("DataDirectory", path); + + SyntaxConfig.SqlSyntaxProvider = SqlServerSyntaxProvider.Instance; + + _database = new Database(@"server=.\SQLEXPRESS;database=EmptyForTest;user id=umbraco;password=umbraco", + "System.Data.SqlClient"); + } + + [TearDown] + public override void TearDown() + { + AppDomain.CurrentDomain.SetData("DataDirectory", null); + } + + public override Database Database + { + get { return _database; } + } + + #endregion + } +} \ No newline at end of file diff --git a/src/Umbraco.Tests/Umbraco.Tests.csproj b/src/Umbraco.Tests/Umbraco.Tests.csproj index d31dcafd55..027292b7f6 100644 --- a/src/Umbraco.Tests/Umbraco.Tests.csproj +++ b/src/Umbraco.Tests/Umbraco.Tests.csproj @@ -94,10 +94,13 @@ - + + + +