diff --git a/src/Umbraco.Core/Persistence/Migrations/Initial/DatabaseSchemaCreation.cs b/src/Umbraco.Core/Persistence/Migrations/Initial/DatabaseSchemaCreation.cs index 4e2f60eb3c..9392c047bf 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Initial/DatabaseSchemaCreation.cs +++ b/src/Umbraco.Core/Persistence/Migrations/Initial/DatabaseSchemaCreation.cs @@ -1,4 +1,8 @@ -using Umbraco.Core.Models.Rdbms; +using System; +using System.Collections.Generic; +using System.Linq; +using Umbraco.Core.Events; +using Umbraco.Core.Models.Rdbms; namespace Umbraco.Core.Persistence.Migrations.Initial { @@ -7,13 +11,110 @@ namespace Umbraco.Core.Persistence.Migrations.Initial /// internal class DatabaseSchemaCreation { + #region Private Members private readonly Database _database; + private static readonly Dictionary OrderedTables = new Dictionary + { + {0, typeof (NodeDto)}, + {1, typeof (TemplateDto)}, + {2, typeof (ContentDto)}, + {3, typeof (ContentVersionDto)}, + {4, typeof (DocumentDto)}, + {5, typeof (ContentTypeDto)}, + {6, typeof (DocumentTypeDto)}, + {7, typeof (DataTypeDto)}, + {8, typeof (DataTypePreValueDto)}, + {9, typeof (DictionaryDto)}, + {10, typeof (LanguageTextDto)}, + {11, typeof (LanguageDto)}, + {12, typeof (DomainDto)}, + {13, typeof (LogDto)}, + {14, typeof (MacroDto)}, + {15, typeof (MacroPropertyTypeDto)}, + {16, typeof (MacroPropertyDto)}, + {17, typeof (MemberTypeDto)}, + {18, typeof (MemberDto)}, + {19, typeof (Member2MemberGroupDto)}, + {20, typeof (ContentXmlDto)}, + {21, typeof (PreviewXmlDto)}, + {22, typeof (PropertyTypeGroupDto)}, + {23, typeof (PropertyTypeDto)}, + {24, typeof (PropertyDataDto)}, + {25, typeof (RelationTypeDto)}, + {26, typeof (RelationDto)}, + {27, typeof (StylesheetDto)}, + {28, typeof (StylesheetPropertyDto)}, + {29, typeof (TagDto)}, + {30, typeof (TagRelationshipDto)}, + {31, typeof (UserLoginDto)}, + {32, typeof (UserTypeDto)}, + {33, typeof (UserDto)}, + {34, typeof (TaskTypeDto)}, + {35, typeof (TaskDto)}, + {36, typeof (ContentType2ContentTypeDto)}, + { + 37, + typeof (ContentTypeAllowedContentTypeDto) + }, + {38, typeof (User2AppDto)}, + {39, typeof (User2NodeNotifyDto)}, + {40, typeof (User2NodePermissionDto)} + }; + #endregion public DatabaseSchemaCreation(Database database) { _database = database; } + /// + /// Initialize the database by creating the umbraco db schema + /// + public void InitializeDatabaseSchema() + { + var e = new DatabaseCreationEventArgs(); + FireBeforeCreation(e); + + if (!e.Cancel) + { + foreach (var item in OrderedTables.OrderBy(x => x.Key)) + { + _database.CreateTable(false, item.Value); + } + } + + FireAfterCreation(e); + } + + /// + /// Validates the schema of the current database + /// + public DatabaseSchemaResult ValidateSchema() + { + var result = new DatabaseSchemaResult(); + + foreach (var item in OrderedTables.OrderBy(x => x.Key)) + { + var tableNameAttribute = item.Value.FirstAttribute(); + if (tableNameAttribute != null) + { + var tableExist = _database.TableExist(tableNameAttribute.Value); + if (tableExist) + { + result.Successes.Add(tableNameAttribute.Value, "Table exists"); + } + else + { + result.Errors.Add(tableNameAttribute.Value, "Table does not exist"); + } + } + } + + return result; + } + + #region Events + /// /// The save event handler /// @@ -51,83 +152,6 @@ namespace Umbraco.Core.Persistence.Migrations.Initial } } - /// - /// Initialize the database by creating the umbraco db schema - /// - public void InitializeDatabaseSchema() - { - var e = new DatabaseCreationEventArgs(); - FireBeforeCreation(e); - - if (!e.Cancel) - { - _database.CreateTable(); - - _database.CreateTable(); - - _database.CreateTable(); - _database.CreateTable(); - _database.CreateTable(); - - _database.CreateTable(); - _database.CreateTable(); - - //_database.CreateTable(); - //_database.CreateTable(); - - _database.CreateTable(); - _database.CreateTable(); - - _database.CreateTable(); - _database.CreateTable(); - - _database.CreateTable(); - _database.CreateTable(); - - _database.CreateTable(); - - _database.CreateTable(); - _database.CreateTable(); - _database.CreateTable(); - - _database.CreateTable(); - _database.CreateTable(); - _database.CreateTable(); - - _database.CreateTable(); - _database.CreateTable(); - - _database.CreateTable(); - _database.CreateTable(); - _database.CreateTable(); - - _database.CreateTable(); - _database.CreateTable(); - - _database.CreateTable(); - _database.CreateTable(); - - _database.CreateTable(); - _database.CreateTable(); - - _database.CreateTable(); - _database.CreateTable(); - _database.CreateTable(); - - _database.CreateTable(); - _database.CreateTable(); - - _database.CreateTable(); - _database.CreateTable(); - - _database.CreateTable(); - _database.CreateTable(); - _database.CreateTable(); - } - - FireAfterCreation(e); - } + #endregion } - - internal class DatabaseCreationEventArgs : System.ComponentModel.CancelEventArgs{} } \ No newline at end of file diff --git a/src/Umbraco.Core/Umbraco.Core.csproj b/src/Umbraco.Core/Umbraco.Core.csproj index 2b556f637f..0aeab69175 100644 --- a/src/Umbraco.Core/Umbraco.Core.csproj +++ b/src/Umbraco.Core/Umbraco.Core.csproj @@ -123,6 +123,7 @@ + @@ -265,6 +266,7 @@ +