diff --git a/src/Umbraco.Compat7/Core/Persistence/Migrations/MigrationResolver.cs b/src/Umbraco.Compat7/Core/Persistence/Migrations/MigrationResolver.cs index 1997b9be8d..37b451d3b8 100644 --- a/src/Umbraco.Compat7/Core/Persistence/Migrations/MigrationResolver.cs +++ b/src/Umbraco.Compat7/Core/Persistence/Migrations/MigrationResolver.cs @@ -2,6 +2,7 @@ using Umbraco.Core.ObjectResolution; using CoreCurrent = Umbraco.Core.Composing.Current; using LightInject; +using Umbraco.Core.Migrations; // ReSharper disable once CheckNamespace namespace Umbraco.Core.Persistence.Migrations diff --git a/src/Umbraco.Core/Components/CompositionExtensions.cs b/src/Umbraco.Core/Components/CompositionExtensions.cs index f3764e13f9..49af5b9b3a 100644 --- a/src/Umbraco.Core/Components/CompositionExtensions.cs +++ b/src/Umbraco.Core/Components/CompositionExtensions.cs @@ -4,9 +4,9 @@ using LightInject; using Umbraco.Core.Cache; using Umbraco.Core.Dictionary; using Umbraco.Core.Composing; +using Umbraco.Core.Migrations; using Umbraco.Core.Models.PublishedContent; using Umbraco.Core.Persistence.Mappers; -using Umbraco.Core.Persistence.Migrations; using Umbraco.Core.PropertyEditors; using Umbraco.Core.Strings; using Umbraco.Core.Sync; diff --git a/src/Umbraco.Core/CoreRuntimeComponent.cs b/src/Umbraco.Core/CoreRuntimeComponent.cs index 070b4abfc0..81505c66d2 100644 --- a/src/Umbraco.Core/CoreRuntimeComponent.cs +++ b/src/Umbraco.Core/CoreRuntimeComponent.cs @@ -13,9 +13,10 @@ using Umbraco.Core.Composing.CompositionRoots; using Umbraco.Core.IO; using Umbraco.Core.Logging; using Umbraco.Core.Manifest; +using Umbraco.Core.Migrations; +using Umbraco.Core.Migrations.Install; using Umbraco.Core.Models.PublishedContent; using Umbraco.Core.Persistence; -using Umbraco.Core.Persistence.Migrations; using Umbraco.Core.PropertyEditors; using Umbraco.Core.Scoping; using Umbraco.Core.Services; diff --git a/src/Umbraco.Core/Events/MigrationEventArgs.cs b/src/Umbraco.Core/Events/MigrationEventArgs.cs index 34f97d7550..4c698d9837 100644 --- a/src/Umbraco.Core/Events/MigrationEventArgs.cs +++ b/src/Umbraco.Core/Events/MigrationEventArgs.cs @@ -3,7 +3,7 @@ using System.Collections.Generic; using System.ComponentModel; using Semver; using Umbraco.Core.Configuration; -using Umbraco.Core.Persistence.Migrations; +using Umbraco.Core.Migrations; namespace Umbraco.Core.Events { diff --git a/src/Umbraco.Core/Persistence/Migrations/DataLossException.cs b/src/Umbraco.Core/Migrations/DataLossException.cs similarity index 90% rename from src/Umbraco.Core/Persistence/Migrations/DataLossException.cs rename to src/Umbraco.Core/Migrations/DataLossException.cs index 4a9c526f45..6ff332f626 100644 --- a/src/Umbraco.Core/Persistence/Migrations/DataLossException.cs +++ b/src/Umbraco.Core/Migrations/DataLossException.cs @@ -1,6 +1,6 @@ using System; -namespace Umbraco.Core.Persistence.Migrations +namespace Umbraco.Core.Migrations { /// /// Used if a migration has executed but the whole process has failed and cannot be rolled back diff --git a/src/Umbraco.Core/Migrations/ILocalMigration.cs b/src/Umbraco.Core/Migrations/ILocalMigration.cs new file mode 100644 index 0000000000..a4670cb390 --- /dev/null +++ b/src/Umbraco.Core/Migrations/ILocalMigration.cs @@ -0,0 +1,18 @@ +using Umbraco.Core.Migrations.Syntax.Alter; +using Umbraco.Core.Migrations.Syntax.Create; +using Umbraco.Core.Migrations.Syntax.Delete; +using Umbraco.Core.Migrations.Syntax.Execute; +using Umbraco.Core.Migrations.Syntax.Update; + +namespace Umbraco.Core.Migrations +{ + public interface ILocalMigration + { + IExecuteBuilder Execute { get; } + IDeleteBuilder Delete { get; } + IUpdateBuilder Update { get; } + IAlterSyntaxBuilder Alter { get; } + ICreateBuilder Create { get; } + string GetSql(); + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/IMigration.cs b/src/Umbraco.Core/Migrations/IMigration.cs similarity index 79% rename from src/Umbraco.Core/Persistence/Migrations/IMigration.cs rename to src/Umbraco.Core/Migrations/IMigration.cs index 1afa732aed..e50a295a72 100644 --- a/src/Umbraco.Core/Persistence/Migrations/IMigration.cs +++ b/src/Umbraco.Core/Migrations/IMigration.cs @@ -1,13 +1,13 @@ -using Umbraco.Core.Composing; - -namespace Umbraco.Core.Persistence.Migrations -{ - /// - /// Marker interface for database migrations - /// - public interface IMigration : IDiscoverable - { - void Up(); - void Down(); - } -} +using Umbraco.Core.Composing; + +namespace Umbraco.Core.Migrations +{ + /// + /// Marker interface for database migrations + /// + public interface IMigration : IDiscoverable + { + void Up(); + void Down(); + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/IMigrationCollectionBuilder.cs b/src/Umbraco.Core/Migrations/IMigrationCollectionBuilder.cs similarity index 79% rename from src/Umbraco.Core/Persistence/Migrations/IMigrationCollectionBuilder.cs rename to src/Umbraco.Core/Migrations/IMigrationCollectionBuilder.cs index b1c20f0e80..3b2c322c71 100644 --- a/src/Umbraco.Core/Persistence/Migrations/IMigrationCollectionBuilder.cs +++ b/src/Umbraco.Core/Migrations/IMigrationCollectionBuilder.cs @@ -1,4 +1,4 @@ -namespace Umbraco.Core.Persistence.Migrations +namespace Umbraco.Core.Migrations { // exists so the builder can be mocked in tests public interface IMigrationCollectionBuilder diff --git a/src/Umbraco.Core/Persistence/Migrations/IMigrationContext.cs b/src/Umbraco.Core/Migrations/IMigrationContext.cs similarity index 84% rename from src/Umbraco.Core/Persistence/Migrations/IMigrationContext.cs rename to src/Umbraco.Core/Migrations/IMigrationContext.cs index 620dc8ae03..e555fbce89 100644 --- a/src/Umbraco.Core/Persistence/Migrations/IMigrationContext.cs +++ b/src/Umbraco.Core/Migrations/IMigrationContext.cs @@ -1,18 +1,19 @@ -using System.Collections.Generic; -using Umbraco.Core.Logging; - -namespace Umbraco.Core.Persistence.Migrations -{ - public interface IMigrationContext - { - IUmbracoDatabase Database { get; } - - ICollection Expressions { get; set; } - - ILogger Logger { get; } - - ILocalMigration GetLocalMigration(); - - ISqlContext SqlContext { get; } - } -} +using System.Collections.Generic; +using Umbraco.Core.Logging; +using Umbraco.Core.Persistence; + +namespace Umbraco.Core.Migrations +{ + public interface IMigrationContext + { + IUmbracoDatabase Database { get; } + + ICollection Expressions { get; set; } + + ILogger Logger { get; } + + ILocalMigration GetLocalMigration(); + + ISqlContext SqlContext { get; } + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/IMigrationExpression.cs b/src/Umbraco.Core/Migrations/IMigrationExpression.cs similarity index 76% rename from src/Umbraco.Core/Persistence/Migrations/IMigrationExpression.cs rename to src/Umbraco.Core/Migrations/IMigrationExpression.cs index 30c1df4e75..e4265d9190 100644 --- a/src/Umbraco.Core/Persistence/Migrations/IMigrationExpression.cs +++ b/src/Umbraco.Core/Migrations/IMigrationExpression.cs @@ -1,10 +1,10 @@ -namespace Umbraco.Core.Persistence.Migrations -{ - /// - /// Marker interface for migration expressions - /// - public interface IMigrationExpression - { - string Process(IMigrationContext context); - } -} +namespace Umbraco.Core.Migrations +{ + /// + /// Marker interface for migration expressions + /// + public interface IMigrationExpression + { + string Process(IMigrationContext context); + } +} diff --git a/src/Umbraco.Core/DatabaseBuilder.cs b/src/Umbraco.Core/Migrations/Install/DatabaseBuilder.cs similarity index 98% rename from src/Umbraco.Core/DatabaseBuilder.cs rename to src/Umbraco.Core/Migrations/Install/DatabaseBuilder.cs index 9f4c864b22..f2391c15ef 100644 --- a/src/Umbraco.Core/DatabaseBuilder.cs +++ b/src/Umbraco.Core/Migrations/Install/DatabaseBuilder.cs @@ -10,13 +10,11 @@ using Umbraco.Core.Exceptions; using Umbraco.Core.IO; using Umbraco.Core.Logging; using Umbraco.Core.Persistence; -using Umbraco.Core.Persistence.Migrations; -using Umbraco.Core.Persistence.Migrations.Initial; using Umbraco.Core.Persistence.SqlSyntax; using Umbraco.Core.Scoping; using Umbraco.Core.Services; -namespace Umbraco.Core +namespace Umbraco.Core.Migrations.Install { /// /// Supports building and configuring the database. @@ -412,7 +410,7 @@ namespace Umbraco.Core return _databaseSchemaValidationResult; var database = scope.Database; - var dbSchema = new DatabaseSchemaCreation(database, _logger); + var dbSchema = new DatabaseSchemaCreator(database, _logger); _databaseSchemaValidationResult = dbSchema.ValidateSchema(); scope.Complete(); return _databaseSchemaValidationResult; @@ -467,8 +465,11 @@ namespace Umbraco.Core //If Configuration Status is empty and the determined version is "empty" its a new install - otherwise upgrade the existing if (string.IsNullOrEmpty(GlobalSettings.ConfigurationStatus) && installedSchemaVersion.Equals(new Version(0, 0, 0))) { - var helper = new DatabaseSchemaHelper(database, _logger); - helper.CreateDatabaseSchema(_runtime, _migrationEntryService, true); + if (_runtime.Level == RuntimeLevel.Run) + throw new Exception("Umbraco is already configured!"); + + var creator = new DatabaseSchemaCreator(database, _logger); + creator.InitializeDatabaseSchema(); message = message + "

Installation completed!

"; diff --git a/src/Umbraco.Core/Persistence/Migrations/Initial/BaseDataCreation.cs b/src/Umbraco.Core/Migrations/Install/DatabaseDataCreator.cs similarity index 98% rename from src/Umbraco.Core/Persistence/Migrations/Initial/BaseDataCreation.cs rename to src/Umbraco.Core/Migrations/Install/DatabaseDataCreator.cs index 2f93313556..fde99b392d 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Initial/BaseDataCreation.cs +++ b/src/Umbraco.Core/Migrations/Install/DatabaseDataCreator.cs @@ -1,317 +1,317 @@ -using System; -using NPoco; -using Umbraco.Core.Configuration; -using Umbraco.Core.Logging; -using Umbraco.Core.Models; -using Umbraco.Core.Models.Rdbms; - -namespace Umbraco.Core.Persistence.Migrations.Initial -{ - /// - /// Represents the initial data creation by running Insert for the base data. - /// - internal class BaseDataCreation - { - private readonly IDatabase _database; - private readonly ILogger _logger; - - public BaseDataCreation(IDatabase database, ILogger logger) - { - _database = database; - _logger = logger; - } - - /// - /// Initialize the base data creation by inserting the data foundation for umbraco - /// specific to a table - /// - /// Name of the table to create base data for - public void InitializeBaseData(string tableName) - { - _logger.Info($"Creating data in table {tableName}"); - - if (tableName.Equals(Constants.DatabaseSchema.Tables.Node)) - CreateNodeData(); - - if (tableName.Equals(Constants.DatabaseSchema.Tables.Lock)) - CreateLockData(); - - if (tableName.Equals(Constants.DatabaseSchema.Tables.ContentType)) - CreateContentTypeData(); - - if (tableName.Equals(Constants.DatabaseSchema.Tables.User)) - CreateUserData(); - - if (tableName.Equals(Constants.DatabaseSchema.Tables.UserGroup)) - CreateUserGroupData(); - - if (tableName.Equals(Constants.DatabaseSchema.Tables.User2UserGroup)) - CreateUser2UserGroupData(); - - if (tableName.Equals(Constants.DatabaseSchema.Tables.UserGroup2App)) - CreateUserGroup2AppData(); - - if (tableName.Equals(Constants.DatabaseSchema.Tables.PropertyTypeGroup)) - CreatePropertyTypeGroupData(); - - if (tableName.Equals(Constants.DatabaseSchema.Tables.PropertyType)) - CreatePropertyTypeData(); - - if (tableName.Equals(Constants.DatabaseSchema.Tables.Language)) - CreateLanguageData(); - - if (tableName.Equals(Constants.DatabaseSchema.Tables.ContentChildType)) - CreateContentChildTypeData(); - - if (tableName.Equals(Constants.DatabaseSchema.Tables.DataType)) - CreateDataTypeData(); - - if (tableName.Equals(Constants.DatabaseSchema.Tables.DataTypePreValue)) - CreateDataTypePreValueData(); - - if (tableName.Equals(Constants.DatabaseSchema.Tables.RelationType)) - CreateRelationTypeData(); - - if (tableName.Equals(Constants.DatabaseSchema.Tables.TaskType)) - CreateTaskTypeData(); - - if (tableName.Equals(Constants.DatabaseSchema.Tables.Migration)) - CreateMigrationData(); - - _logger.Info($"Done creating table {tableName} data."); - } - - private void CreateNodeData() - { - _database.Insert(Constants.DatabaseSchema.Tables.Node, "id", false, new NodeDto { NodeId = -1, Trashed = false, ParentId = -1, UserId = 0, Level = 0, Path = "-1", SortOrder = 0, UniqueId = new Guid("916724a5-173d-4619-b97e-b9de133dd6f5"), Text = "SYSTEM DATA: umbraco master root", NodeObjectType = Constants.ObjectTypes.SystemRoot, CreateDate = DateTime.Now }); - _database.Insert(Constants.DatabaseSchema.Tables.Node, "id", false, new NodeDto { NodeId = -20, Trashed = false, ParentId = -1, UserId = 0, Level = 0, Path = "-1,-20", SortOrder = 0, UniqueId = new Guid("0F582A79-1E41-4CF0-BFA0-76340651891A"), Text = "Recycle Bin", NodeObjectType = Constants.ObjectTypes.ContentRecycleBin, CreateDate = DateTime.Now }); - _database.Insert(Constants.DatabaseSchema.Tables.Node, "id", false, new NodeDto { NodeId = -21, Trashed = false, ParentId = -1, UserId = 0, Level = 0, Path = "-1,-21", SortOrder = 0, UniqueId = new Guid("BF7C7CBC-952F-4518-97A2-69E9C7B33842"), Text = "Recycle Bin", NodeObjectType = Constants.ObjectTypes.MediaRecycleBin, CreateDate = DateTime.Now }); - _database.Insert(Constants.DatabaseSchema.Tables.Node, "id", false, new NodeDto { NodeId = -92, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,-92", SortOrder = 35, UniqueId = new Guid("f0bc4bfb-b499-40d6-ba86-058885a5178c"), Text = "Label", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.Now }); - _database.Insert(Constants.DatabaseSchema.Tables.Node, "id", false, new NodeDto { NodeId = -90, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,-90", SortOrder = 34, UniqueId = new Guid("84c6b441-31df-4ffe-b67e-67d5bc3ae65a"), Text = "Upload", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.Now }); - _database.Insert(Constants.DatabaseSchema.Tables.Node, "id", false, new NodeDto { NodeId = -89, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,-89", SortOrder = 33, UniqueId = new Guid("c6bac0dd-4ab9-45b1-8e30-e4b619ee5da3"), Text = "Textarea", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.Now }); - _database.Insert(Constants.DatabaseSchema.Tables.Node, "id", false, new NodeDto { NodeId = -88, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,-88", SortOrder = 32, UniqueId = new Guid("0cc0eba1-9960-42c9-bf9b-60e150b429ae"), Text = "Textstring", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.Now }); - _database.Insert(Constants.DatabaseSchema.Tables.Node, "id", false, new NodeDto { NodeId = -87, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,-87", SortOrder = 4, UniqueId = new Guid("ca90c950-0aff-4e72-b976-a30b1ac57dad"), Text = "Richtext editor", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.Now }); - _database.Insert(Constants.DatabaseSchema.Tables.Node, "id", false, new NodeDto { NodeId = -51, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,-51", SortOrder = 2, UniqueId = new Guid("2e6d3631-066e-44b8-aec4-96f09099b2b5"), Text = "Numeric", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.Now }); - _database.Insert(Constants.DatabaseSchema.Tables.Node, "id", false, new NodeDto { NodeId = -49, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,-49", SortOrder = 2, UniqueId = new Guid("92897bc6-a5f3-4ffe-ae27-f2e7e33dda49"), Text = "True/false", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.Now }); - _database.Insert(Constants.DatabaseSchema.Tables.Node, "id", false, new NodeDto { NodeId = -43, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,-43", SortOrder = 2, UniqueId = new Guid("fbaf13a8-4036-41f2-93a3-974f678c312a"), Text = "Checkbox list", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.Now }); - _database.Insert(Constants.DatabaseSchema.Tables.Node, "id", false, new NodeDto { NodeId = -42, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,-42", SortOrder = 2, UniqueId = new Guid("0b6a45e7-44ba-430d-9da5-4e46060b9e03"), Text = "Dropdown", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.Now }); - _database.Insert(Constants.DatabaseSchema.Tables.Node, "id", false, new NodeDto { NodeId = -41, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,-41", SortOrder = 2, UniqueId = new Guid("5046194e-4237-453c-a547-15db3a07c4e1"), Text = "Date Picker", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.Now }); - _database.Insert(Constants.DatabaseSchema.Tables.Node, "id", false, new NodeDto { NodeId = -40, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,-40", SortOrder = 2, UniqueId = new Guid("bb5f57c9-ce2b-4bb9-b697-4caca783a805"), Text = "Radiobox", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.Now }); - _database.Insert(Constants.DatabaseSchema.Tables.Node, "id", false, new NodeDto { NodeId = -39, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,-39", SortOrder = 2, UniqueId = new Guid("f38f0ac7-1d27-439c-9f3f-089cd8825a53"), Text = "Dropdown multiple", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.Now }); - _database.Insert(Constants.DatabaseSchema.Tables.Node, "id", false, new NodeDto { NodeId = -37, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,-37", SortOrder = 2, UniqueId = new Guid("0225af17-b302-49cb-9176-b9f35cab9c17"), Text = "Approved Color", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.Now }); - _database.Insert(Constants.DatabaseSchema.Tables.Node, "id", false, new NodeDto { NodeId = -36, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,-36", SortOrder = 2, UniqueId = new Guid("e4d66c0f-b935-4200-81f0-025f7256b89a"), Text = "Date Picker with time", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.Now }); - _database.Insert(Constants.DatabaseSchema.Tables.Node, "id", false, new NodeDto { NodeId = Constants.DataTypes.DefaultContentListView, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,-95", SortOrder = 2, UniqueId = new Guid("C0808DD3-8133-4E4B-8CE8-E2BEA84A96A4"), Text = Constants.Conventions.DataTypes.ListViewPrefix + "Content", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.Now }); - _database.Insert(Constants.DatabaseSchema.Tables.Node, "id", false, new NodeDto { NodeId = Constants.DataTypes.DefaultMediaListView, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,-96", SortOrder = 2, UniqueId = new Guid("3A0156C4-3B8C-4803-BDC1-6871FAA83FFF"), Text = Constants.Conventions.DataTypes.ListViewPrefix + "Media", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.Now }); - _database.Insert(Constants.DatabaseSchema.Tables.Node, "id", false, new NodeDto { NodeId = Constants.DataTypes.DefaultMembersListView, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,-97", SortOrder = 2, UniqueId = new Guid("AA2C52A0-CE87-4E65-A47C-7DF09358585D"), Text = Constants.Conventions.DataTypes.ListViewPrefix + "Members", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.Now }); - _database.Insert(Constants.DatabaseSchema.Tables.Node, "id", false, new NodeDto { NodeId = 1031, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,1031", SortOrder = 2, UniqueId = new Guid("f38bd2d7-65d0-48e6-95dc-87ce06ec2d3d"), Text = Constants.Conventions.MediaTypes.Folder, NodeObjectType = Constants.ObjectTypes.MediaType, CreateDate = DateTime.Now }); - _database.Insert(Constants.DatabaseSchema.Tables.Node, "id", false, new NodeDto { NodeId = 1032, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,1032", SortOrder = 2, UniqueId = new Guid("cc07b313-0843-4aa8-bbda-871c8da728c8"), Text = Constants.Conventions.MediaTypes.Image, NodeObjectType = Constants.ObjectTypes.MediaType, CreateDate = DateTime.Now }); - _database.Insert(Constants.DatabaseSchema.Tables.Node, "id", false, new NodeDto { NodeId = 1033, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,1033", SortOrder = 2, UniqueId = new Guid("4c52d8ab-54e6-40cd-999c-7a5f24903e4d"), Text = Constants.Conventions.MediaTypes.File, NodeObjectType = Constants.ObjectTypes.MediaType, CreateDate = DateTime.Now }); - _database.Insert(Constants.DatabaseSchema.Tables.Node, "id", false, new NodeDto { NodeId = 1041, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,1041", SortOrder = 2, UniqueId = new Guid("b6b73142-b9c1-4bf8-a16d-e1c23320b549"), Text = "Tags", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.Now }); - _database.Insert(Constants.DatabaseSchema.Tables.Node, "id", false, new NodeDto { NodeId = 1043, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,1043", SortOrder = 2, UniqueId = new Guid("1df9f033-e6d4-451f-b8d2-e0cbc50a836f"), Text = "Image Cropper", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.Now }); - _database.Insert(Constants.DatabaseSchema.Tables.Node, "id", false, new NodeDto { NodeId = 1044, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,1044", SortOrder = 0, UniqueId = new Guid("d59be02f-1df9-4228-aa1e-01917d806cda"), Text = Constants.Conventions.MemberTypes.DefaultAlias, NodeObjectType = Constants.ObjectTypes.MemberType, CreateDate = DateTime.Now }); - - //New UDI pickers with newer Ids - _database.Insert(Constants.DatabaseSchema.Tables.Node, "id", false, new NodeDto { NodeId = 1046, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,1046", SortOrder = 2, UniqueId = new Guid("FD1E0DA5-5606-4862-B679-5D0CF3A52A59"), Text = "Content Picker", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.Now }); - _database.Insert(Constants.DatabaseSchema.Tables.Node, "id", false, new NodeDto { NodeId = 1047, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,1047", SortOrder = 2, UniqueId = new Guid("1EA2E01F-EBD8-4CE1-8D71-6B1149E63548"), Text = "Member Picker", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.Now }); - _database.Insert(Constants.DatabaseSchema.Tables.Node, "id", false, new NodeDto { NodeId = 1048, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,1048", SortOrder = 2, UniqueId = new Guid("135D60E0-64D9-49ED-AB08-893C9BA44AE5"), Text = "Media Picker", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.Now }); - _database.Insert(Constants.DatabaseSchema.Tables.Node, "id", false, new NodeDto { NodeId = 1049, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,1049", SortOrder = 2, UniqueId = new Guid("9DBBCBBB-2327-434A-B355-AF1B84E5010A"), Text = "Multiple Media Picker", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.Now }); - _database.Insert(Constants.DatabaseSchema.Tables.Node, "id", false, new NodeDto { NodeId = 1050, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,1050", SortOrder = 2, UniqueId = new Guid("B4E3535A-1753-47E2-8568-602CF8CFEE6F"), Text = "Related Links", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.Now }); - - //TODO: We're not creating these for 7.0 - //_database.Insert(Constants.DatabaseSchema.Tables.Node, "id", false, new NodeDto { NodeId = 1039, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,1039", SortOrder = 2, UniqueId = new Guid("06f349a9-c949-4b6a-8660-59c10451af42"), Text = "Ultimate Picker", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.Now }); - //_database.Insert(Constants.DatabaseSchema.Tables.Node, "id", false, new NodeDto { NodeId = 1038, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,1038", SortOrder = 2, UniqueId = new Guid("1251c96c-185c-4e9b-93f4-b48205573cbd"), Text = "Simple Editor", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.Now }); - //_database.Insert(Constants.DatabaseSchema.Tables.Node, "id", false, new NodeDto { NodeId = 1042, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,1042", SortOrder = 2, UniqueId = new Guid("0a452bd5-83f9-4bc3-8403-1286e13fb77e"), Text = "Macro Container", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.Now }); - } - - private void CreateLockData() - { - // all lock objects - _database.Insert(Constants.DatabaseSchema.Tables.Lock, "id", false, new LockDto { Id = Constants.Locks.Servers, Name = "Servers" }); - _database.Insert(Constants.DatabaseSchema.Tables.Lock, "id", false, new LockDto { Id = Constants.Locks.ContentTypes, Name = "ContentTypes" }); - _database.Insert(Constants.DatabaseSchema.Tables.Lock, "id", false, new LockDto { Id = Constants.Locks.ContentTree, Name = "ContentTree" }); - _database.Insert(Constants.DatabaseSchema.Tables.Lock, "id", false, new LockDto { Id = Constants.Locks.MediaTypes, Name = "MediaTypes" }); - _database.Insert(Constants.DatabaseSchema.Tables.Lock, "id", false, new LockDto { Id = Constants.Locks.MediaTree, Name = "MediaTree" }); - _database.Insert(Constants.DatabaseSchema.Tables.Lock, "id", false, new LockDto { Id = Constants.Locks.MemberTypes, Name = "MemberTypes" }); - _database.Insert(Constants.DatabaseSchema.Tables.Lock, "id", false, new LockDto { Id = Constants.Locks.MemberTree, Name = "MemberTree" }); - _database.Insert(Constants.DatabaseSchema.Tables.Lock, "id", false, new LockDto { Id = Constants.Locks.Domains, Name = "Domains" }); - } - - private void CreateContentTypeData() - { - _database.Insert(Constants.DatabaseSchema.Tables.ContentType, "pk", false, new ContentTypeDto { PrimaryKey = 532, NodeId = 1031, Alias = Constants.Conventions.MediaTypes.Folder, Icon = "icon-folder", Thumbnail = "icon-folder", IsContainer = false, AllowAtRoot = true, Variations = (byte) ContentVariation.InvariantNeutral }); - _database.Insert(Constants.DatabaseSchema.Tables.ContentType, "pk", false, new ContentTypeDto { PrimaryKey = 533, NodeId = 1032, Alias = Constants.Conventions.MediaTypes.Image, Icon = "icon-picture", Thumbnail = "icon-picture", AllowAtRoot = true, Variations = (byte) ContentVariation.InvariantNeutral }); - _database.Insert(Constants.DatabaseSchema.Tables.ContentType, "pk", false, new ContentTypeDto { PrimaryKey = 534, NodeId = 1033, Alias = Constants.Conventions.MediaTypes.File, Icon = "icon-document", Thumbnail = "icon-document", AllowAtRoot = true, Variations = (byte) ContentVariation.InvariantNeutral }); - _database.Insert(Constants.DatabaseSchema.Tables.ContentType, "pk", false, new ContentTypeDto { PrimaryKey = 531, NodeId = 1044, Alias = Constants.Conventions.MemberTypes.DefaultAlias, Icon = "icon-user", Thumbnail = "icon-user", Variations = (byte) ContentVariation.InvariantNeutral }); - } - - private void CreateUserData() - { - _database.Insert(Constants.DatabaseSchema.Tables.User, "id", false, new UserDto { Id = 0, Disabled = false, NoConsole = false, UserName = "Administrator", Login = "admin", Password = "default", Email = "", UserLanguage = "en-US", CreateDate = DateTime.Now, UpdateDate = DateTime.Now }); - } - - private void CreateUserGroupData() - { - _database.Insert(Constants.DatabaseSchema.Tables.UserGroup, "id", false, new UserGroupDto { Id = 1, StartMediaId = -1, StartContentId = -1, Alias = Constants.Security.AdminGroupAlias, Name = "Administrators", DefaultPermissions = "CADMOSKTPIURZ:5F7ï", CreateDate = DateTime.Now, UpdateDate = DateTime.Now, Icon = "icon-medal" }); - _database.Insert(Constants.DatabaseSchema.Tables.UserGroup, "id", false, new UserGroupDto { Id = 2, StartMediaId = -1, StartContentId = -1, Alias = "writer", Name = "Writers", DefaultPermissions = "CAH:F", CreateDate = DateTime.Now, UpdateDate = DateTime.Now, Icon = "icon-edit" }); - _database.Insert(Constants.DatabaseSchema.Tables.UserGroup, "id", false, new UserGroupDto { Id = 3, StartMediaId = -1, StartContentId = -1, Alias = "editor", Name = "Editors", DefaultPermissions = "CADMOSKTPUZ:5Fï", CreateDate = DateTime.Now, UpdateDate = DateTime.Now, Icon = "icon-tools" }); - _database.Insert(Constants.DatabaseSchema.Tables.UserGroup, "id", false, new UserGroupDto { Id = 4, StartMediaId = -1, StartContentId = -1, Alias = Constants.Security.TranslatorGroupAlias, Name = "Translators", DefaultPermissions = "AF", CreateDate = DateTime.Now, UpdateDate = DateTime.Now, Icon = "icon-globe" }); - } - - private void CreateUser2UserGroupData() - { - _database.Insert(new User2UserGroupDto { UserGroupId = 1, UserId = 0 }); - } - - private void CreateUserGroup2AppData() - { - _database.Insert(new UserGroup2AppDto { UserGroupId = 1, AppAlias = Constants.Applications.Content }); - _database.Insert(new UserGroup2AppDto { UserGroupId = 1, AppAlias = Constants.Applications.Developer }); - _database.Insert(new UserGroup2AppDto { UserGroupId = 1, AppAlias = Constants.Applications.Media }); - _database.Insert(new UserGroup2AppDto { UserGroupId = 1, AppAlias = Constants.Applications.Members }); - _database.Insert(new UserGroup2AppDto { UserGroupId = 1, AppAlias = Constants.Applications.Settings }); - _database.Insert(new UserGroup2AppDto { UserGroupId = 1, AppAlias = Constants.Applications.Users }); - _database.Insert(new UserGroup2AppDto { UserGroupId = 1, AppAlias = Constants.Applications.Forms }); - - _database.Insert(new UserGroup2AppDto { UserGroupId = 2, AppAlias = Constants.Applications.Content }); - - _database.Insert(new UserGroup2AppDto { UserGroupId = 3, AppAlias = Constants.Applications.Content }); - _database.Insert(new UserGroup2AppDto { UserGroupId = 3, AppAlias = Constants.Applications.Media }); - _database.Insert(new UserGroup2AppDto { UserGroupId = 3, AppAlias = Constants.Applications.Forms }); - - _database.Insert(new UserGroup2AppDto { UserGroupId = 4, AppAlias = Constants.Applications.Translation }); - } - - private void CreatePropertyTypeGroupData() - { - _database.Insert(Constants.DatabaseSchema.Tables.PropertyTypeGroup, "id", false, new PropertyTypeGroupDto { Id = 3, ContentTypeNodeId = 1032, Text = "Image", SortOrder = 1, UniqueId = new Guid(Constants.PropertyTypeGroups.Image) }); - _database.Insert(Constants.DatabaseSchema.Tables.PropertyTypeGroup, "id", false, new PropertyTypeGroupDto { Id = 4, ContentTypeNodeId = 1033, Text = "File", SortOrder = 1, UniqueId = new Guid(Constants.PropertyTypeGroups.File) }); - _database.Insert(Constants.DatabaseSchema.Tables.PropertyTypeGroup, "id", false, new PropertyTypeGroupDto { Id = 5, ContentTypeNodeId = 1031, Text = "Contents", SortOrder = 1, UniqueId = new Guid(Constants.PropertyTypeGroups.Contents) }); - //membership property group - _database.Insert(Constants.DatabaseSchema.Tables.PropertyTypeGroup, "id", false, new PropertyTypeGroupDto { Id = 11, ContentTypeNodeId = 1044, Text = "Membership", SortOrder = 1, UniqueId = new Guid(Constants.PropertyTypeGroups.Membership) }); - } - - private void CreatePropertyTypeData() - { - _database.Insert(Constants.DatabaseSchema.Tables.PropertyType, "id", false, new PropertyTypeDto { Id = 6, UniqueId = 6.ToGuid(), DataTypeId = 1043, ContentTypeId = 1032, PropertyTypeGroupId = 3, Alias = Constants.Conventions.Media.File, Name = "Upload image", SortOrder = 0, Mandatory = false, ValidationRegExp = null, Description = null, Variations = (byte) ContentVariation.InvariantNeutral }); - _database.Insert(Constants.DatabaseSchema.Tables.PropertyType, "id", false, new PropertyTypeDto { Id = 7, UniqueId = 7.ToGuid(), DataTypeId = -92, ContentTypeId = 1032, PropertyTypeGroupId = 3, Alias = Constants.Conventions.Media.Width, Name = "Width", SortOrder = 0, Mandatory = false, ValidationRegExp = null, Description = null, Variations = (byte) ContentVariation.InvariantNeutral }); - _database.Insert(Constants.DatabaseSchema.Tables.PropertyType, "id", false, new PropertyTypeDto { Id = 8, UniqueId = 8.ToGuid(), DataTypeId = -92, ContentTypeId = 1032, PropertyTypeGroupId = 3, Alias = Constants.Conventions.Media.Height, Name = "Height", SortOrder = 0, Mandatory = false, ValidationRegExp = null, Description = null, Variations = (byte) ContentVariation.InvariantNeutral }); - _database.Insert(Constants.DatabaseSchema.Tables.PropertyType, "id", false, new PropertyTypeDto { Id = 9, UniqueId = 9.ToGuid(), DataTypeId = -92, ContentTypeId = 1032, PropertyTypeGroupId = 3, Alias = Constants.Conventions.Media.Bytes, Name = "Size", SortOrder = 0, Mandatory = false, ValidationRegExp = null, Description = null, Variations = (byte) ContentVariation.InvariantNeutral }); - _database.Insert(Constants.DatabaseSchema.Tables.PropertyType, "id", false, new PropertyTypeDto { Id = 10, UniqueId = 10.ToGuid(), DataTypeId = -92, ContentTypeId = 1032, PropertyTypeGroupId = 3, Alias = Constants.Conventions.Media.Extension, Name = "Type", SortOrder = 0, Mandatory = false, ValidationRegExp = null, Description = null, Variations = (byte) ContentVariation.InvariantNeutral }); - _database.Insert(Constants.DatabaseSchema.Tables.PropertyType, "id", false, new PropertyTypeDto { Id = 24, UniqueId = 24.ToGuid(), DataTypeId = -90, ContentTypeId = 1033, PropertyTypeGroupId = 4, Alias = Constants.Conventions.Media.File, Name = "Upload file", SortOrder = 0, Mandatory = false, ValidationRegExp = null, Description = null, Variations = (byte) ContentVariation.InvariantNeutral }); - _database.Insert(Constants.DatabaseSchema.Tables.PropertyType, "id", false, new PropertyTypeDto { Id = 25, UniqueId = 25.ToGuid(), DataTypeId = -92, ContentTypeId = 1033, PropertyTypeGroupId = 4, Alias = Constants.Conventions.Media.Extension, Name = "Type", SortOrder = 0, Mandatory = false, ValidationRegExp = null, Description = null, Variations = (byte) ContentVariation.InvariantNeutral }); - _database.Insert(Constants.DatabaseSchema.Tables.PropertyType, "id", false, new PropertyTypeDto { Id = 26, UniqueId = 26.ToGuid(), DataTypeId = -92, ContentTypeId = 1033, PropertyTypeGroupId = 4, Alias = Constants.Conventions.Media.Bytes, Name = "Size", SortOrder = 0, Mandatory = false, ValidationRegExp = null, Description = null, Variations = (byte) ContentVariation.InvariantNeutral }); - _database.Insert(Constants.DatabaseSchema.Tables.PropertyType, "id", false, new PropertyTypeDto { Id = 27, UniqueId = 27.ToGuid(), DataTypeId = Constants.DataTypes.DefaultMediaListView, ContentTypeId = 1031, PropertyTypeGroupId = 5, Alias = "contents", Name = "Contents:", SortOrder = 0, Mandatory = false, ValidationRegExp = null, Description = null, Variations = (byte) ContentVariation.InvariantNeutral }); - //membership property types - _database.Insert(Constants.DatabaseSchema.Tables.PropertyType, "id", false, new PropertyTypeDto { Id = 28, UniqueId = 28.ToGuid(), DataTypeId = -89, ContentTypeId = 1044, PropertyTypeGroupId = 11, Alias = Constants.Conventions.Member.Comments, Name = Constants.Conventions.Member.CommentsLabel, SortOrder = 0, Mandatory = false, ValidationRegExp = null, Description = null, Variations = (byte) ContentVariation.InvariantNeutral }); - _database.Insert(Constants.DatabaseSchema.Tables.PropertyType, "id", false, new PropertyTypeDto { Id = 29, UniqueId = 29.ToGuid(), DataTypeId = -92, ContentTypeId = 1044, PropertyTypeGroupId = 11, Alias = Constants.Conventions.Member.FailedPasswordAttempts, Name = Constants.Conventions.Member.FailedPasswordAttemptsLabel, SortOrder = 1, Mandatory = false, ValidationRegExp = null, Description = null, Variations = (byte) ContentVariation.InvariantNeutral }); - _database.Insert(Constants.DatabaseSchema.Tables.PropertyType, "id", false, new PropertyTypeDto { Id = 30, UniqueId = 30.ToGuid(), DataTypeId = -49, ContentTypeId = 1044, PropertyTypeGroupId = 11, Alias = Constants.Conventions.Member.IsApproved, Name = Constants.Conventions.Member.IsApprovedLabel, SortOrder = 2, Mandatory = false, ValidationRegExp = null, Description = null, Variations = (byte) ContentVariation.InvariantNeutral }); - _database.Insert(Constants.DatabaseSchema.Tables.PropertyType, "id", false, new PropertyTypeDto { Id = 31, UniqueId = 31.ToGuid(), DataTypeId = -49, ContentTypeId = 1044, PropertyTypeGroupId = 11, Alias = Constants.Conventions.Member.IsLockedOut, Name = Constants.Conventions.Member.IsLockedOutLabel, SortOrder = 3, Mandatory = false, ValidationRegExp = null, Description = null, Variations = (byte) ContentVariation.InvariantNeutral }); - _database.Insert(Constants.DatabaseSchema.Tables.PropertyType, "id", false, new PropertyTypeDto { Id = 32, UniqueId = 32.ToGuid(), DataTypeId = -92, ContentTypeId = 1044, PropertyTypeGroupId = 11, Alias = Constants.Conventions.Member.LastLockoutDate, Name = Constants.Conventions.Member.LastLockoutDateLabel, SortOrder = 4, Mandatory = false, ValidationRegExp = null, Description = null, Variations = (byte) ContentVariation.InvariantNeutral }); - _database.Insert(Constants.DatabaseSchema.Tables.PropertyType, "id", false, new PropertyTypeDto { Id = 33, UniqueId = 33.ToGuid(), DataTypeId = -92, ContentTypeId = 1044, PropertyTypeGroupId = 11, Alias = Constants.Conventions.Member.LastLoginDate, Name = Constants.Conventions.Member.LastLoginDateLabel, SortOrder = 5, Mandatory = false, ValidationRegExp = null, Description = null, Variations = (byte) ContentVariation.InvariantNeutral }); - _database.Insert(Constants.DatabaseSchema.Tables.PropertyType, "id", false, new PropertyTypeDto { Id = 34, UniqueId = 34.ToGuid(), DataTypeId = -92, ContentTypeId = 1044, PropertyTypeGroupId = 11, Alias = Constants.Conventions.Member.LastPasswordChangeDate, Name = Constants.Conventions.Member.LastPasswordChangeDateLabel, SortOrder = 6, Mandatory = false, ValidationRegExp = null, Description = null, Variations = (byte) ContentVariation.InvariantNeutral }); - - } - - private void CreateLanguageData() - { - _database.Insert(Constants.DatabaseSchema.Tables.Language, "id", false, new LanguageDto { Id = 1, IsoCode = "en-US", CultureName = "en-US" }); - } - - private void CreateContentChildTypeData() - { - _database.Insert(Constants.DatabaseSchema.Tables.ContentChildType, "Id", false, new ContentTypeAllowedContentTypeDto { Id = 1031, AllowedId = 1031 }); - _database.Insert(Constants.DatabaseSchema.Tables.ContentChildType, "Id", false, new ContentTypeAllowedContentTypeDto { Id = 1031, AllowedId = 1032 }); - _database.Insert(Constants.DatabaseSchema.Tables.ContentChildType, "Id", false, new ContentTypeAllowedContentTypeDto { Id = 1031, AllowedId = 1033 }); - } - - private void CreateDataTypeData() - { - //TODO Check which of the DataTypeIds below doesn't exist in umbracoNode, which results in a foreign key constraint errors. - _database.Insert(Constants.DatabaseSchema.Tables.DataType, "pk", false, new DataTypeDto { PrimaryKey = 1, DataTypeId = -49, PropertyEditorAlias = Constants.PropertyEditors.TrueFalseAlias, DbType = "Integer" }); - _database.Insert(Constants.DatabaseSchema.Tables.DataType, "pk", false, new DataTypeDto { PrimaryKey = 2, DataTypeId = -51, PropertyEditorAlias = Constants.PropertyEditors.IntegerAlias, DbType = "Integer" }); - _database.Insert(Constants.DatabaseSchema.Tables.DataType, "pk", false, new DataTypeDto { PrimaryKey = 3, DataTypeId = -87, PropertyEditorAlias = Constants.PropertyEditors.TinyMCEAlias, DbType = "Ntext" }); - _database.Insert(Constants.DatabaseSchema.Tables.DataType, "pk", false, new DataTypeDto { PrimaryKey = 4, DataTypeId = -88, PropertyEditorAlias = Constants.PropertyEditors.TextboxAlias, DbType = "Nvarchar" }); - _database.Insert(Constants.DatabaseSchema.Tables.DataType, "pk", false, new DataTypeDto { PrimaryKey = 5, DataTypeId = -89, PropertyEditorAlias = Constants.PropertyEditors.TextboxMultipleAlias, DbType = "Ntext" }); - _database.Insert(Constants.DatabaseSchema.Tables.DataType, "pk", false, new DataTypeDto { PrimaryKey = 6, DataTypeId = -90, PropertyEditorAlias = Constants.PropertyEditors.UploadFieldAlias, DbType = "Nvarchar" }); - _database.Insert(Constants.DatabaseSchema.Tables.DataType, "pk", false, new DataTypeDto { PrimaryKey = 7, DataTypeId = -92, PropertyEditorAlias = Constants.PropertyEditors.NoEditAlias, DbType = "Nvarchar" }); - _database.Insert(Constants.DatabaseSchema.Tables.DataType, "pk", false, new DataTypeDto { PrimaryKey = 8, DataTypeId = -36, PropertyEditorAlias = Constants.PropertyEditors.DateTimeAlias, DbType = "Date" }); - _database.Insert(Constants.DatabaseSchema.Tables.DataType, "pk", false, new DataTypeDto { PrimaryKey = 9, DataTypeId = -37, PropertyEditorAlias = Constants.PropertyEditors.ColorPickerAlias, DbType = "Nvarchar" }); - _database.Insert(Constants.DatabaseSchema.Tables.DataType, "pk", false, new DataTypeDto { PrimaryKey = 11, DataTypeId = -39, PropertyEditorAlias = Constants.PropertyEditors.DropDownListMultipleAlias, DbType = "Nvarchar" }); - _database.Insert(Constants.DatabaseSchema.Tables.DataType, "pk", false, new DataTypeDto { PrimaryKey = 12, DataTypeId = -40, PropertyEditorAlias = Constants.PropertyEditors.RadioButtonListAlias, DbType = "Nvarchar" }); - _database.Insert(Constants.DatabaseSchema.Tables.DataType, "pk", false, new DataTypeDto { PrimaryKey = 13, DataTypeId = -41, PropertyEditorAlias = Constants.PropertyEditors.DateAlias, DbType = "Date" }); - _database.Insert(Constants.DatabaseSchema.Tables.DataType, "pk", false, new DataTypeDto { PrimaryKey = 14, DataTypeId = -42, PropertyEditorAlias = Constants.PropertyEditors.DropDownListAlias, DbType = "Integer" }); - _database.Insert(Constants.DatabaseSchema.Tables.DataType, "pk", false, new DataTypeDto { PrimaryKey = 15, DataTypeId = -43, PropertyEditorAlias = Constants.PropertyEditors.CheckBoxListAlias, DbType = "Nvarchar" }); - _database.Insert(Constants.DatabaseSchema.Tables.DataType, "pk", false, new DataTypeDto { PrimaryKey = 22, DataTypeId = 1041, PropertyEditorAlias = Constants.PropertyEditors.TagsAlias, DbType = "Ntext" }); - _database.Insert(Constants.DatabaseSchema.Tables.DataType, "pk", false, new DataTypeDto { PrimaryKey = 24, DataTypeId = 1043, PropertyEditorAlias = Constants.PropertyEditors.ImageCropperAlias, DbType = "Ntext" }); - _database.Insert(Constants.DatabaseSchema.Tables.DataType, "pk", false, new DataTypeDto { PrimaryKey = -26, DataTypeId = Constants.DataTypes.DefaultContentListView, PropertyEditorAlias = Constants.PropertyEditors.ListViewAlias, DbType = "Nvarchar" }); - _database.Insert(Constants.DatabaseSchema.Tables.DataType, "pk", false, new DataTypeDto { PrimaryKey = -27, DataTypeId = Constants.DataTypes.DefaultMediaListView, PropertyEditorAlias = Constants.PropertyEditors.ListViewAlias, DbType = "Nvarchar" }); - _database.Insert(Constants.DatabaseSchema.Tables.DataType, "pk", false, new DataTypeDto { PrimaryKey = -28, DataTypeId = Constants.DataTypes.DefaultMembersListView, PropertyEditorAlias = Constants.PropertyEditors.ListViewAlias, DbType = "Nvarchar" }); - - //New UDI pickers with newer Ids - _database.Insert(Constants.DatabaseSchema.Tables.DataType, "pk", false, new DataTypeDto { PrimaryKey = 26, DataTypeId = 1046, PropertyEditorAlias = Constants.PropertyEditors.ContentPicker2Alias, DbType = "Nvarchar" }); - _database.Insert(Constants.DatabaseSchema.Tables.DataType, "pk", false, new DataTypeDto { PrimaryKey = 27, DataTypeId = 1047, PropertyEditorAlias = Constants.PropertyEditors.MemberPicker2Alias, DbType = "Nvarchar" }); - _database.Insert(Constants.DatabaseSchema.Tables.DataType, "pk", false, new DataTypeDto { PrimaryKey = 28, DataTypeId = 1048, PropertyEditorAlias = Constants.PropertyEditors.MediaPicker2Alias, DbType = "Ntext" }); - _database.Insert(Constants.DatabaseSchema.Tables.DataType, "pk", false, new DataTypeDto { PrimaryKey = 29, DataTypeId = 1049, PropertyEditorAlias = Constants.PropertyEditors.MediaPicker2Alias, DbType = "Ntext" }); - _database.Insert(Constants.DatabaseSchema.Tables.DataType, "pk", false, new DataTypeDto { PrimaryKey = 30, DataTypeId = 1050, PropertyEditorAlias = Constants.PropertyEditors.RelatedLinks2Alias, DbType = "Ntext" }); - - //TODO: We're not creating these for 7.0 - //_database.Insert(Constants.DatabaseSchema.Tables.DataType, "pk", false, new DataTypeDto { PrimaryKey = 19, DataTypeId = 1038, PropertyEditorAlias = Constants.PropertyEditors.MarkdownEditorAlias, DbType = "Ntext" }); - //_database.Insert(Constants.DatabaseSchema.Tables.DataType, "pk", false, new DataTypeDto { PrimaryKey = 20, DataTypeId = 1039, PropertyEditorAlias = Constants.PropertyEditors.UltimatePickerAlias, DbType = "Ntext" }); - //_database.Insert(Constants.DatabaseSchema.Tables.DataType, "pk", false, new DataTypeDto { PrimaryKey = 23, DataTypeId = 1042, PropertyEditorAlias = Constants.PropertyEditors.MacroContainerAlias, DbType = "Ntext" }); - } - - private void CreateDataTypePreValueData() - { - _database.Insert(Constants.DatabaseSchema.Tables.DataTypePreValue, "id", false, new DataTypePreValueDto { Id = 3, Alias = "", SortOrder = 0, DataTypeNodeId = -87, Value = ",code,undo,redo,cut,copy,mcepasteword,stylepicker,bold,italic,bullist,numlist,outdent,indent,mcelink,unlink,mceinsertanchor,mceimage,umbracomacro,mceinserttable,umbracoembed,mcecharmap,|1|1,2,3,|0|500,400|1049,|true|" }); - _database.Insert(Constants.DatabaseSchema.Tables.DataTypePreValue, "id", false, new DataTypePreValueDto { Id = 4, Alias = "group", SortOrder = 0, DataTypeNodeId = 1041, Value = "default" }); - - //defaults for the member list - _database.Insert(Constants.DatabaseSchema.Tables.DataTypePreValue, "id", false, new DataTypePreValueDto { Id = -1, Alias = "pageSize", SortOrder = 1, DataTypeNodeId = Constants.DataTypes.DefaultMembersListView, Value = "10" }); - _database.Insert(Constants.DatabaseSchema.Tables.DataTypePreValue, "id", false, new DataTypePreValueDto { Id = -2, Alias = "orderBy", SortOrder = 2, DataTypeNodeId = Constants.DataTypes.DefaultMembersListView, Value = "username" }); - _database.Insert(Constants.DatabaseSchema.Tables.DataTypePreValue, "id", false, new DataTypePreValueDto { Id = -3, Alias = "orderDirection", SortOrder = 3, DataTypeNodeId = Constants.DataTypes.DefaultMembersListView, Value = "asc" }); - _database.Insert(Constants.DatabaseSchema.Tables.DataTypePreValue, "id", false, new DataTypePreValueDto { Id = -4, Alias = "includeProperties", SortOrder = 4, DataTypeNodeId = Constants.DataTypes.DefaultMembersListView, Value = "[{\"alias\":\"username\",\"isSystem\":1},{\"alias\":\"email\",\"isSystem\":1},{\"alias\":\"updateDate\",\"header\":\"Last edited\",\"isSystem\":1}]" }); - - //layouts for the list view - var cardLayout = "{\"name\": \"Grid\",\"path\": \"views/propertyeditors/listview/layouts/grid/grid.html\", \"icon\": \"icon-thumbnails-small\", \"isSystem\": 1, \"selected\": true}"; - var listLayout = "{\"name\": \"List\",\"path\": \"views/propertyeditors/listview/layouts/list/list.html\",\"icon\": \"icon-list\", \"isSystem\": 1,\"selected\": true}"; - - //defaults for the media list - _database.Insert(Constants.DatabaseSchema.Tables.DataTypePreValue, "id", false, new DataTypePreValueDto { Id = -5, Alias = "pageSize", SortOrder = 1, DataTypeNodeId = Constants.DataTypes.DefaultMediaListView, Value = "100" }); - _database.Insert(Constants.DatabaseSchema.Tables.DataTypePreValue, "id", false, new DataTypePreValueDto { Id = -6, Alias = "orderBy", SortOrder = 2, DataTypeNodeId = Constants.DataTypes.DefaultMediaListView, Value = "updateDate" }); - _database.Insert(Constants.DatabaseSchema.Tables.DataTypePreValue, "id", false, new DataTypePreValueDto { Id = -7, Alias = "orderDirection", SortOrder = 3, DataTypeNodeId = Constants.DataTypes.DefaultMediaListView, Value = "desc" }); - _database.Insert(Constants.DatabaseSchema.Tables.DataTypePreValue, "id", false, new DataTypePreValueDto { Id = -8, Alias = "layouts", SortOrder = 4, DataTypeNodeId = Constants.DataTypes.DefaultMediaListView, Value = "[" + cardLayout + "," + listLayout + "]" }); - _database.Insert(Constants.DatabaseSchema.Tables.DataTypePreValue, "id", false, new DataTypePreValueDto { Id = -9, Alias = "includeProperties", SortOrder = 5, DataTypeNodeId = Constants.DataTypes.DefaultMediaListView, Value = "[{\"alias\":\"updateDate\",\"header\":\"Last edited\",\"isSystem\":1},{\"alias\":\"owner\",\"header\":\"Updated by\",\"isSystem\":1}]" }); - - //default's for MultipleMediaPickerAlias picker - _database.Insert(Constants.DatabaseSchema.Tables.DataTypePreValue, "id", false, new DataTypePreValueDto { Id = 6, Alias = "multiPicker", SortOrder = 0, DataTypeNodeId = 1049, Value = "1" }); - } - - private void CreateRelationTypeData() - { - var relationType = new RelationTypeDto { Id = 1, Alias = Constants.Conventions.RelationTypes.RelateDocumentOnCopyAlias, ChildObjectType = Constants.ObjectTypes.Document, ParentObjectType = Constants.ObjectTypes.Document, Dual = true, Name = Constants.Conventions.RelationTypes.RelateDocumentOnCopyName }; - relationType.UniqueId = (relationType.Alias + "____" + relationType.Name).ToGuid(); - _database.Insert(Constants.DatabaseSchema.Tables.RelationType, "id", false, relationType); - relationType = new RelationTypeDto { Id = 2, Alias = Constants.Conventions.RelationTypes.RelateParentDocumentOnDeleteAlias, ChildObjectType = Constants.ObjectTypes.Document, ParentObjectType = Constants.ObjectTypes.Document, Dual = false, Name = Constants.Conventions.RelationTypes.RelateParentDocumentOnDeleteName }; - relationType.UniqueId = (relationType.Alias + "____" + relationType.Name).ToGuid(); - _database.Insert(Constants.DatabaseSchema.Tables.RelationType, "id", false, relationType); - } - - private void CreateTaskTypeData() - { - _database.Insert(Constants.DatabaseSchema.Tables.TaskType, "id", false, new TaskTypeDto { Id = 1, Alias = "toTranslate" }); - } - - private void CreateMigrationData() - { - var dto = new MigrationDto - { - Id = 1, - Name = Constants.System.UmbracoMigrationName, - Version = UmbracoVersion.SemanticVersion.ToString(), - CreateDate = DateTime.Now - }; - - _database.Insert(Constants.DatabaseSchema.Tables.Migration, "pk", false, dto); - } - } -} +using System; +using NPoco; +using Umbraco.Core.Configuration; +using Umbraco.Core.Logging; +using Umbraco.Core.Models; +using Umbraco.Core.Models.Rdbms; + +namespace Umbraco.Core.Migrations.Install +{ + /// + /// Creates the initial database data during install. + /// + internal class DatabaseDataCreator + { + private readonly IDatabase _database; + private readonly ILogger _logger; + + public DatabaseDataCreator(IDatabase database, ILogger logger) + { + _database = database; + _logger = logger; + } + + /// + /// Initialize the base data creation by inserting the data foundation for umbraco + /// specific to a table + /// + /// Name of the table to create base data for + public void InitializeBaseData(string tableName) + { + _logger.Info($"Creating data in table {tableName}"); + + if (tableName.Equals(Constants.DatabaseSchema.Tables.Node)) + CreateNodeData(); + + if (tableName.Equals(Constants.DatabaseSchema.Tables.Lock)) + CreateLockData(); + + if (tableName.Equals(Constants.DatabaseSchema.Tables.ContentType)) + CreateContentTypeData(); + + if (tableName.Equals(Constants.DatabaseSchema.Tables.User)) + CreateUserData(); + + if (tableName.Equals(Constants.DatabaseSchema.Tables.UserGroup)) + CreateUserGroupData(); + + if (tableName.Equals(Constants.DatabaseSchema.Tables.User2UserGroup)) + CreateUser2UserGroupData(); + + if (tableName.Equals(Constants.DatabaseSchema.Tables.UserGroup2App)) + CreateUserGroup2AppData(); + + if (tableName.Equals(Constants.DatabaseSchema.Tables.PropertyTypeGroup)) + CreatePropertyTypeGroupData(); + + if (tableName.Equals(Constants.DatabaseSchema.Tables.PropertyType)) + CreatePropertyTypeData(); + + if (tableName.Equals(Constants.DatabaseSchema.Tables.Language)) + CreateLanguageData(); + + if (tableName.Equals(Constants.DatabaseSchema.Tables.ContentChildType)) + CreateContentChildTypeData(); + + if (tableName.Equals(Constants.DatabaseSchema.Tables.DataType)) + CreateDataTypeData(); + + if (tableName.Equals(Constants.DatabaseSchema.Tables.DataTypePreValue)) + CreateDataTypePreValueData(); + + if (tableName.Equals(Constants.DatabaseSchema.Tables.RelationType)) + CreateRelationTypeData(); + + if (tableName.Equals(Constants.DatabaseSchema.Tables.TaskType)) + CreateTaskTypeData(); + + if (tableName.Equals(Constants.DatabaseSchema.Tables.Migration)) + CreateMigrationData(); + + _logger.Info($"Done creating table {tableName} data."); + } + + private void CreateNodeData() + { + _database.Insert(Constants.DatabaseSchema.Tables.Node, "id", false, new NodeDto { NodeId = -1, Trashed = false, ParentId = -1, UserId = 0, Level = 0, Path = "-1", SortOrder = 0, UniqueId = new Guid("916724a5-173d-4619-b97e-b9de133dd6f5"), Text = "SYSTEM DATA: umbraco master root", NodeObjectType = Constants.ObjectTypes.SystemRoot, CreateDate = DateTime.Now }); + _database.Insert(Constants.DatabaseSchema.Tables.Node, "id", false, new NodeDto { NodeId = -20, Trashed = false, ParentId = -1, UserId = 0, Level = 0, Path = "-1,-20", SortOrder = 0, UniqueId = new Guid("0F582A79-1E41-4CF0-BFA0-76340651891A"), Text = "Recycle Bin", NodeObjectType = Constants.ObjectTypes.ContentRecycleBin, CreateDate = DateTime.Now }); + _database.Insert(Constants.DatabaseSchema.Tables.Node, "id", false, new NodeDto { NodeId = -21, Trashed = false, ParentId = -1, UserId = 0, Level = 0, Path = "-1,-21", SortOrder = 0, UniqueId = new Guid("BF7C7CBC-952F-4518-97A2-69E9C7B33842"), Text = "Recycle Bin", NodeObjectType = Constants.ObjectTypes.MediaRecycleBin, CreateDate = DateTime.Now }); + _database.Insert(Constants.DatabaseSchema.Tables.Node, "id", false, new NodeDto { NodeId = -92, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,-92", SortOrder = 35, UniqueId = new Guid("f0bc4bfb-b499-40d6-ba86-058885a5178c"), Text = "Label", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.Now }); + _database.Insert(Constants.DatabaseSchema.Tables.Node, "id", false, new NodeDto { NodeId = -90, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,-90", SortOrder = 34, UniqueId = new Guid("84c6b441-31df-4ffe-b67e-67d5bc3ae65a"), Text = "Upload", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.Now }); + _database.Insert(Constants.DatabaseSchema.Tables.Node, "id", false, new NodeDto { NodeId = -89, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,-89", SortOrder = 33, UniqueId = new Guid("c6bac0dd-4ab9-45b1-8e30-e4b619ee5da3"), Text = "Textarea", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.Now }); + _database.Insert(Constants.DatabaseSchema.Tables.Node, "id", false, new NodeDto { NodeId = -88, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,-88", SortOrder = 32, UniqueId = new Guid("0cc0eba1-9960-42c9-bf9b-60e150b429ae"), Text = "Textstring", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.Now }); + _database.Insert(Constants.DatabaseSchema.Tables.Node, "id", false, new NodeDto { NodeId = -87, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,-87", SortOrder = 4, UniqueId = new Guid("ca90c950-0aff-4e72-b976-a30b1ac57dad"), Text = "Richtext editor", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.Now }); + _database.Insert(Constants.DatabaseSchema.Tables.Node, "id", false, new NodeDto { NodeId = -51, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,-51", SortOrder = 2, UniqueId = new Guid("2e6d3631-066e-44b8-aec4-96f09099b2b5"), Text = "Numeric", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.Now }); + _database.Insert(Constants.DatabaseSchema.Tables.Node, "id", false, new NodeDto { NodeId = -49, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,-49", SortOrder = 2, UniqueId = new Guid("92897bc6-a5f3-4ffe-ae27-f2e7e33dda49"), Text = "True/false", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.Now }); + _database.Insert(Constants.DatabaseSchema.Tables.Node, "id", false, new NodeDto { NodeId = -43, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,-43", SortOrder = 2, UniqueId = new Guid("fbaf13a8-4036-41f2-93a3-974f678c312a"), Text = "Checkbox list", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.Now }); + _database.Insert(Constants.DatabaseSchema.Tables.Node, "id", false, new NodeDto { NodeId = -42, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,-42", SortOrder = 2, UniqueId = new Guid("0b6a45e7-44ba-430d-9da5-4e46060b9e03"), Text = "Dropdown", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.Now }); + _database.Insert(Constants.DatabaseSchema.Tables.Node, "id", false, new NodeDto { NodeId = -41, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,-41", SortOrder = 2, UniqueId = new Guid("5046194e-4237-453c-a547-15db3a07c4e1"), Text = "Date Picker", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.Now }); + _database.Insert(Constants.DatabaseSchema.Tables.Node, "id", false, new NodeDto { NodeId = -40, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,-40", SortOrder = 2, UniqueId = new Guid("bb5f57c9-ce2b-4bb9-b697-4caca783a805"), Text = "Radiobox", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.Now }); + _database.Insert(Constants.DatabaseSchema.Tables.Node, "id", false, new NodeDto { NodeId = -39, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,-39", SortOrder = 2, UniqueId = new Guid("f38f0ac7-1d27-439c-9f3f-089cd8825a53"), Text = "Dropdown multiple", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.Now }); + _database.Insert(Constants.DatabaseSchema.Tables.Node, "id", false, new NodeDto { NodeId = -37, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,-37", SortOrder = 2, UniqueId = new Guid("0225af17-b302-49cb-9176-b9f35cab9c17"), Text = "Approved Color", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.Now }); + _database.Insert(Constants.DatabaseSchema.Tables.Node, "id", false, new NodeDto { NodeId = -36, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,-36", SortOrder = 2, UniqueId = new Guid("e4d66c0f-b935-4200-81f0-025f7256b89a"), Text = "Date Picker with time", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.Now }); + _database.Insert(Constants.DatabaseSchema.Tables.Node, "id", false, new NodeDto { NodeId = Constants.DataTypes.DefaultContentListView, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,-95", SortOrder = 2, UniqueId = new Guid("C0808DD3-8133-4E4B-8CE8-E2BEA84A96A4"), Text = Constants.Conventions.DataTypes.ListViewPrefix + "Content", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.Now }); + _database.Insert(Constants.DatabaseSchema.Tables.Node, "id", false, new NodeDto { NodeId = Constants.DataTypes.DefaultMediaListView, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,-96", SortOrder = 2, UniqueId = new Guid("3A0156C4-3B8C-4803-BDC1-6871FAA83FFF"), Text = Constants.Conventions.DataTypes.ListViewPrefix + "Media", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.Now }); + _database.Insert(Constants.DatabaseSchema.Tables.Node, "id", false, new NodeDto { NodeId = Constants.DataTypes.DefaultMembersListView, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,-97", SortOrder = 2, UniqueId = new Guid("AA2C52A0-CE87-4E65-A47C-7DF09358585D"), Text = Constants.Conventions.DataTypes.ListViewPrefix + "Members", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.Now }); + _database.Insert(Constants.DatabaseSchema.Tables.Node, "id", false, new NodeDto { NodeId = 1031, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,1031", SortOrder = 2, UniqueId = new Guid("f38bd2d7-65d0-48e6-95dc-87ce06ec2d3d"), Text = Constants.Conventions.MediaTypes.Folder, NodeObjectType = Constants.ObjectTypes.MediaType, CreateDate = DateTime.Now }); + _database.Insert(Constants.DatabaseSchema.Tables.Node, "id", false, new NodeDto { NodeId = 1032, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,1032", SortOrder = 2, UniqueId = new Guid("cc07b313-0843-4aa8-bbda-871c8da728c8"), Text = Constants.Conventions.MediaTypes.Image, NodeObjectType = Constants.ObjectTypes.MediaType, CreateDate = DateTime.Now }); + _database.Insert(Constants.DatabaseSchema.Tables.Node, "id", false, new NodeDto { NodeId = 1033, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,1033", SortOrder = 2, UniqueId = new Guid("4c52d8ab-54e6-40cd-999c-7a5f24903e4d"), Text = Constants.Conventions.MediaTypes.File, NodeObjectType = Constants.ObjectTypes.MediaType, CreateDate = DateTime.Now }); + _database.Insert(Constants.DatabaseSchema.Tables.Node, "id", false, new NodeDto { NodeId = 1041, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,1041", SortOrder = 2, UniqueId = new Guid("b6b73142-b9c1-4bf8-a16d-e1c23320b549"), Text = "Tags", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.Now }); + _database.Insert(Constants.DatabaseSchema.Tables.Node, "id", false, new NodeDto { NodeId = 1043, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,1043", SortOrder = 2, UniqueId = new Guid("1df9f033-e6d4-451f-b8d2-e0cbc50a836f"), Text = "Image Cropper", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.Now }); + _database.Insert(Constants.DatabaseSchema.Tables.Node, "id", false, new NodeDto { NodeId = 1044, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,1044", SortOrder = 0, UniqueId = new Guid("d59be02f-1df9-4228-aa1e-01917d806cda"), Text = Constants.Conventions.MemberTypes.DefaultAlias, NodeObjectType = Constants.ObjectTypes.MemberType, CreateDate = DateTime.Now }); + + //New UDI pickers with newer Ids + _database.Insert(Constants.DatabaseSchema.Tables.Node, "id", false, new NodeDto { NodeId = 1046, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,1046", SortOrder = 2, UniqueId = new Guid("FD1E0DA5-5606-4862-B679-5D0CF3A52A59"), Text = "Content Picker", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.Now }); + _database.Insert(Constants.DatabaseSchema.Tables.Node, "id", false, new NodeDto { NodeId = 1047, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,1047", SortOrder = 2, UniqueId = new Guid("1EA2E01F-EBD8-4CE1-8D71-6B1149E63548"), Text = "Member Picker", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.Now }); + _database.Insert(Constants.DatabaseSchema.Tables.Node, "id", false, new NodeDto { NodeId = 1048, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,1048", SortOrder = 2, UniqueId = new Guid("135D60E0-64D9-49ED-AB08-893C9BA44AE5"), Text = "Media Picker", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.Now }); + _database.Insert(Constants.DatabaseSchema.Tables.Node, "id", false, new NodeDto { NodeId = 1049, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,1049", SortOrder = 2, UniqueId = new Guid("9DBBCBBB-2327-434A-B355-AF1B84E5010A"), Text = "Multiple Media Picker", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.Now }); + _database.Insert(Constants.DatabaseSchema.Tables.Node, "id", false, new NodeDto { NodeId = 1050, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,1050", SortOrder = 2, UniqueId = new Guid("B4E3535A-1753-47E2-8568-602CF8CFEE6F"), Text = "Related Links", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.Now }); + + //TODO: We're not creating these for 7.0 + //_database.Insert(Constants.DatabaseSchema.Tables.Node, "id", false, new NodeDto { NodeId = 1039, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,1039", SortOrder = 2, UniqueId = new Guid("06f349a9-c949-4b6a-8660-59c10451af42"), Text = "Ultimate Picker", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.Now }); + //_database.Insert(Constants.DatabaseSchema.Tables.Node, "id", false, new NodeDto { NodeId = 1038, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,1038", SortOrder = 2, UniqueId = new Guid("1251c96c-185c-4e9b-93f4-b48205573cbd"), Text = "Simple Editor", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.Now }); + //_database.Insert(Constants.DatabaseSchema.Tables.Node, "id", false, new NodeDto { NodeId = 1042, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,1042", SortOrder = 2, UniqueId = new Guid("0a452bd5-83f9-4bc3-8403-1286e13fb77e"), Text = "Macro Container", NodeObjectType = Constants.ObjectTypes.DataType, CreateDate = DateTime.Now }); + } + + private void CreateLockData() + { + // all lock objects + _database.Insert(Constants.DatabaseSchema.Tables.Lock, "id", false, new LockDto { Id = Constants.Locks.Servers, Name = "Servers" }); + _database.Insert(Constants.DatabaseSchema.Tables.Lock, "id", false, new LockDto { Id = Constants.Locks.ContentTypes, Name = "ContentTypes" }); + _database.Insert(Constants.DatabaseSchema.Tables.Lock, "id", false, new LockDto { Id = Constants.Locks.ContentTree, Name = "ContentTree" }); + _database.Insert(Constants.DatabaseSchema.Tables.Lock, "id", false, new LockDto { Id = Constants.Locks.MediaTypes, Name = "MediaTypes" }); + _database.Insert(Constants.DatabaseSchema.Tables.Lock, "id", false, new LockDto { Id = Constants.Locks.MediaTree, Name = "MediaTree" }); + _database.Insert(Constants.DatabaseSchema.Tables.Lock, "id", false, new LockDto { Id = Constants.Locks.MemberTypes, Name = "MemberTypes" }); + _database.Insert(Constants.DatabaseSchema.Tables.Lock, "id", false, new LockDto { Id = Constants.Locks.MemberTree, Name = "MemberTree" }); + _database.Insert(Constants.DatabaseSchema.Tables.Lock, "id", false, new LockDto { Id = Constants.Locks.Domains, Name = "Domains" }); + } + + private void CreateContentTypeData() + { + _database.Insert(Constants.DatabaseSchema.Tables.ContentType, "pk", false, new ContentTypeDto { PrimaryKey = 532, NodeId = 1031, Alias = Constants.Conventions.MediaTypes.Folder, Icon = "icon-folder", Thumbnail = "icon-folder", IsContainer = false, AllowAtRoot = true, Variations = (byte) ContentVariation.InvariantNeutral }); + _database.Insert(Constants.DatabaseSchema.Tables.ContentType, "pk", false, new ContentTypeDto { PrimaryKey = 533, NodeId = 1032, Alias = Constants.Conventions.MediaTypes.Image, Icon = "icon-picture", Thumbnail = "icon-picture", AllowAtRoot = true, Variations = (byte) ContentVariation.InvariantNeutral }); + _database.Insert(Constants.DatabaseSchema.Tables.ContentType, "pk", false, new ContentTypeDto { PrimaryKey = 534, NodeId = 1033, Alias = Constants.Conventions.MediaTypes.File, Icon = "icon-document", Thumbnail = "icon-document", AllowAtRoot = true, Variations = (byte) ContentVariation.InvariantNeutral }); + _database.Insert(Constants.DatabaseSchema.Tables.ContentType, "pk", false, new ContentTypeDto { PrimaryKey = 531, NodeId = 1044, Alias = Constants.Conventions.MemberTypes.DefaultAlias, Icon = "icon-user", Thumbnail = "icon-user", Variations = (byte) ContentVariation.InvariantNeutral }); + } + + private void CreateUserData() + { + _database.Insert(Constants.DatabaseSchema.Tables.User, "id", false, new UserDto { Id = 0, Disabled = false, NoConsole = false, UserName = "Administrator", Login = "admin", Password = "default", Email = "", UserLanguage = "en-US", CreateDate = DateTime.Now, UpdateDate = DateTime.Now }); + } + + private void CreateUserGroupData() + { + _database.Insert(Constants.DatabaseSchema.Tables.UserGroup, "id", false, new UserGroupDto { Id = 1, StartMediaId = -1, StartContentId = -1, Alias = Constants.Security.AdminGroupAlias, Name = "Administrators", DefaultPermissions = "CADMOSKTPIURZ:5F7ï", CreateDate = DateTime.Now, UpdateDate = DateTime.Now, Icon = "icon-medal" }); + _database.Insert(Constants.DatabaseSchema.Tables.UserGroup, "id", false, new UserGroupDto { Id = 2, StartMediaId = -1, StartContentId = -1, Alias = "writer", Name = "Writers", DefaultPermissions = "CAH:F", CreateDate = DateTime.Now, UpdateDate = DateTime.Now, Icon = "icon-edit" }); + _database.Insert(Constants.DatabaseSchema.Tables.UserGroup, "id", false, new UserGroupDto { Id = 3, StartMediaId = -1, StartContentId = -1, Alias = "editor", Name = "Editors", DefaultPermissions = "CADMOSKTPUZ:5Fï", CreateDate = DateTime.Now, UpdateDate = DateTime.Now, Icon = "icon-tools" }); + _database.Insert(Constants.DatabaseSchema.Tables.UserGroup, "id", false, new UserGroupDto { Id = 4, StartMediaId = -1, StartContentId = -1, Alias = Constants.Security.TranslatorGroupAlias, Name = "Translators", DefaultPermissions = "AF", CreateDate = DateTime.Now, UpdateDate = DateTime.Now, Icon = "icon-globe" }); + } + + private void CreateUser2UserGroupData() + { + _database.Insert(new User2UserGroupDto { UserGroupId = 1, UserId = 0 }); + } + + private void CreateUserGroup2AppData() + { + _database.Insert(new UserGroup2AppDto { UserGroupId = 1, AppAlias = Constants.Applications.Content }); + _database.Insert(new UserGroup2AppDto { UserGroupId = 1, AppAlias = Constants.Applications.Developer }); + _database.Insert(new UserGroup2AppDto { UserGroupId = 1, AppAlias = Constants.Applications.Media }); + _database.Insert(new UserGroup2AppDto { UserGroupId = 1, AppAlias = Constants.Applications.Members }); + _database.Insert(new UserGroup2AppDto { UserGroupId = 1, AppAlias = Constants.Applications.Settings }); + _database.Insert(new UserGroup2AppDto { UserGroupId = 1, AppAlias = Constants.Applications.Users }); + _database.Insert(new UserGroup2AppDto { UserGroupId = 1, AppAlias = Constants.Applications.Forms }); + + _database.Insert(new UserGroup2AppDto { UserGroupId = 2, AppAlias = Constants.Applications.Content }); + + _database.Insert(new UserGroup2AppDto { UserGroupId = 3, AppAlias = Constants.Applications.Content }); + _database.Insert(new UserGroup2AppDto { UserGroupId = 3, AppAlias = Constants.Applications.Media }); + _database.Insert(new UserGroup2AppDto { UserGroupId = 3, AppAlias = Constants.Applications.Forms }); + + _database.Insert(new UserGroup2AppDto { UserGroupId = 4, AppAlias = Constants.Applications.Translation }); + } + + private void CreatePropertyTypeGroupData() + { + _database.Insert(Constants.DatabaseSchema.Tables.PropertyTypeGroup, "id", false, new PropertyTypeGroupDto { Id = 3, ContentTypeNodeId = 1032, Text = "Image", SortOrder = 1, UniqueId = new Guid(Constants.PropertyTypeGroups.Image) }); + _database.Insert(Constants.DatabaseSchema.Tables.PropertyTypeGroup, "id", false, new PropertyTypeGroupDto { Id = 4, ContentTypeNodeId = 1033, Text = "File", SortOrder = 1, UniqueId = new Guid(Constants.PropertyTypeGroups.File) }); + _database.Insert(Constants.DatabaseSchema.Tables.PropertyTypeGroup, "id", false, new PropertyTypeGroupDto { Id = 5, ContentTypeNodeId = 1031, Text = "Contents", SortOrder = 1, UniqueId = new Guid(Constants.PropertyTypeGroups.Contents) }); + //membership property group + _database.Insert(Constants.DatabaseSchema.Tables.PropertyTypeGroup, "id", false, new PropertyTypeGroupDto { Id = 11, ContentTypeNodeId = 1044, Text = "Membership", SortOrder = 1, UniqueId = new Guid(Constants.PropertyTypeGroups.Membership) }); + } + + private void CreatePropertyTypeData() + { + _database.Insert(Constants.DatabaseSchema.Tables.PropertyType, "id", false, new PropertyTypeDto { Id = 6, UniqueId = 6.ToGuid(), DataTypeId = 1043, ContentTypeId = 1032, PropertyTypeGroupId = 3, Alias = Constants.Conventions.Media.File, Name = "Upload image", SortOrder = 0, Mandatory = false, ValidationRegExp = null, Description = null, Variations = (byte) ContentVariation.InvariantNeutral }); + _database.Insert(Constants.DatabaseSchema.Tables.PropertyType, "id", false, new PropertyTypeDto { Id = 7, UniqueId = 7.ToGuid(), DataTypeId = -92, ContentTypeId = 1032, PropertyTypeGroupId = 3, Alias = Constants.Conventions.Media.Width, Name = "Width", SortOrder = 0, Mandatory = false, ValidationRegExp = null, Description = null, Variations = (byte) ContentVariation.InvariantNeutral }); + _database.Insert(Constants.DatabaseSchema.Tables.PropertyType, "id", false, new PropertyTypeDto { Id = 8, UniqueId = 8.ToGuid(), DataTypeId = -92, ContentTypeId = 1032, PropertyTypeGroupId = 3, Alias = Constants.Conventions.Media.Height, Name = "Height", SortOrder = 0, Mandatory = false, ValidationRegExp = null, Description = null, Variations = (byte) ContentVariation.InvariantNeutral }); + _database.Insert(Constants.DatabaseSchema.Tables.PropertyType, "id", false, new PropertyTypeDto { Id = 9, UniqueId = 9.ToGuid(), DataTypeId = -92, ContentTypeId = 1032, PropertyTypeGroupId = 3, Alias = Constants.Conventions.Media.Bytes, Name = "Size", SortOrder = 0, Mandatory = false, ValidationRegExp = null, Description = null, Variations = (byte) ContentVariation.InvariantNeutral }); + _database.Insert(Constants.DatabaseSchema.Tables.PropertyType, "id", false, new PropertyTypeDto { Id = 10, UniqueId = 10.ToGuid(), DataTypeId = -92, ContentTypeId = 1032, PropertyTypeGroupId = 3, Alias = Constants.Conventions.Media.Extension, Name = "Type", SortOrder = 0, Mandatory = false, ValidationRegExp = null, Description = null, Variations = (byte) ContentVariation.InvariantNeutral }); + _database.Insert(Constants.DatabaseSchema.Tables.PropertyType, "id", false, new PropertyTypeDto { Id = 24, UniqueId = 24.ToGuid(), DataTypeId = -90, ContentTypeId = 1033, PropertyTypeGroupId = 4, Alias = Constants.Conventions.Media.File, Name = "Upload file", SortOrder = 0, Mandatory = false, ValidationRegExp = null, Description = null, Variations = (byte) ContentVariation.InvariantNeutral }); + _database.Insert(Constants.DatabaseSchema.Tables.PropertyType, "id", false, new PropertyTypeDto { Id = 25, UniqueId = 25.ToGuid(), DataTypeId = -92, ContentTypeId = 1033, PropertyTypeGroupId = 4, Alias = Constants.Conventions.Media.Extension, Name = "Type", SortOrder = 0, Mandatory = false, ValidationRegExp = null, Description = null, Variations = (byte) ContentVariation.InvariantNeutral }); + _database.Insert(Constants.DatabaseSchema.Tables.PropertyType, "id", false, new PropertyTypeDto { Id = 26, UniqueId = 26.ToGuid(), DataTypeId = -92, ContentTypeId = 1033, PropertyTypeGroupId = 4, Alias = Constants.Conventions.Media.Bytes, Name = "Size", SortOrder = 0, Mandatory = false, ValidationRegExp = null, Description = null, Variations = (byte) ContentVariation.InvariantNeutral }); + _database.Insert(Constants.DatabaseSchema.Tables.PropertyType, "id", false, new PropertyTypeDto { Id = 27, UniqueId = 27.ToGuid(), DataTypeId = Constants.DataTypes.DefaultMediaListView, ContentTypeId = 1031, PropertyTypeGroupId = 5, Alias = "contents", Name = "Contents:", SortOrder = 0, Mandatory = false, ValidationRegExp = null, Description = null, Variations = (byte) ContentVariation.InvariantNeutral }); + //membership property types + _database.Insert(Constants.DatabaseSchema.Tables.PropertyType, "id", false, new PropertyTypeDto { Id = 28, UniqueId = 28.ToGuid(), DataTypeId = -89, ContentTypeId = 1044, PropertyTypeGroupId = 11, Alias = Constants.Conventions.Member.Comments, Name = Constants.Conventions.Member.CommentsLabel, SortOrder = 0, Mandatory = false, ValidationRegExp = null, Description = null, Variations = (byte) ContentVariation.InvariantNeutral }); + _database.Insert(Constants.DatabaseSchema.Tables.PropertyType, "id", false, new PropertyTypeDto { Id = 29, UniqueId = 29.ToGuid(), DataTypeId = -92, ContentTypeId = 1044, PropertyTypeGroupId = 11, Alias = Constants.Conventions.Member.FailedPasswordAttempts, Name = Constants.Conventions.Member.FailedPasswordAttemptsLabel, SortOrder = 1, Mandatory = false, ValidationRegExp = null, Description = null, Variations = (byte) ContentVariation.InvariantNeutral }); + _database.Insert(Constants.DatabaseSchema.Tables.PropertyType, "id", false, new PropertyTypeDto { Id = 30, UniqueId = 30.ToGuid(), DataTypeId = -49, ContentTypeId = 1044, PropertyTypeGroupId = 11, Alias = Constants.Conventions.Member.IsApproved, Name = Constants.Conventions.Member.IsApprovedLabel, SortOrder = 2, Mandatory = false, ValidationRegExp = null, Description = null, Variations = (byte) ContentVariation.InvariantNeutral }); + _database.Insert(Constants.DatabaseSchema.Tables.PropertyType, "id", false, new PropertyTypeDto { Id = 31, UniqueId = 31.ToGuid(), DataTypeId = -49, ContentTypeId = 1044, PropertyTypeGroupId = 11, Alias = Constants.Conventions.Member.IsLockedOut, Name = Constants.Conventions.Member.IsLockedOutLabel, SortOrder = 3, Mandatory = false, ValidationRegExp = null, Description = null, Variations = (byte) ContentVariation.InvariantNeutral }); + _database.Insert(Constants.DatabaseSchema.Tables.PropertyType, "id", false, new PropertyTypeDto { Id = 32, UniqueId = 32.ToGuid(), DataTypeId = -92, ContentTypeId = 1044, PropertyTypeGroupId = 11, Alias = Constants.Conventions.Member.LastLockoutDate, Name = Constants.Conventions.Member.LastLockoutDateLabel, SortOrder = 4, Mandatory = false, ValidationRegExp = null, Description = null, Variations = (byte) ContentVariation.InvariantNeutral }); + _database.Insert(Constants.DatabaseSchema.Tables.PropertyType, "id", false, new PropertyTypeDto { Id = 33, UniqueId = 33.ToGuid(), DataTypeId = -92, ContentTypeId = 1044, PropertyTypeGroupId = 11, Alias = Constants.Conventions.Member.LastLoginDate, Name = Constants.Conventions.Member.LastLoginDateLabel, SortOrder = 5, Mandatory = false, ValidationRegExp = null, Description = null, Variations = (byte) ContentVariation.InvariantNeutral }); + _database.Insert(Constants.DatabaseSchema.Tables.PropertyType, "id", false, new PropertyTypeDto { Id = 34, UniqueId = 34.ToGuid(), DataTypeId = -92, ContentTypeId = 1044, PropertyTypeGroupId = 11, Alias = Constants.Conventions.Member.LastPasswordChangeDate, Name = Constants.Conventions.Member.LastPasswordChangeDateLabel, SortOrder = 6, Mandatory = false, ValidationRegExp = null, Description = null, Variations = (byte) ContentVariation.InvariantNeutral }); + + } + + private void CreateLanguageData() + { + _database.Insert(Constants.DatabaseSchema.Tables.Language, "id", false, new LanguageDto { Id = 1, IsoCode = "en-US", CultureName = "en-US" }); + } + + private void CreateContentChildTypeData() + { + _database.Insert(Constants.DatabaseSchema.Tables.ContentChildType, "Id", false, new ContentTypeAllowedContentTypeDto { Id = 1031, AllowedId = 1031 }); + _database.Insert(Constants.DatabaseSchema.Tables.ContentChildType, "Id", false, new ContentTypeAllowedContentTypeDto { Id = 1031, AllowedId = 1032 }); + _database.Insert(Constants.DatabaseSchema.Tables.ContentChildType, "Id", false, new ContentTypeAllowedContentTypeDto { Id = 1031, AllowedId = 1033 }); + } + + private void CreateDataTypeData() + { + //TODO Check which of the DataTypeIds below doesn't exist in umbracoNode, which results in a foreign key constraint errors. + _database.Insert(Constants.DatabaseSchema.Tables.DataType, "pk", false, new DataTypeDto { PrimaryKey = 1, DataTypeId = -49, PropertyEditorAlias = Constants.PropertyEditors.TrueFalseAlias, DbType = "Integer" }); + _database.Insert(Constants.DatabaseSchema.Tables.DataType, "pk", false, new DataTypeDto { PrimaryKey = 2, DataTypeId = -51, PropertyEditorAlias = Constants.PropertyEditors.IntegerAlias, DbType = "Integer" }); + _database.Insert(Constants.DatabaseSchema.Tables.DataType, "pk", false, new DataTypeDto { PrimaryKey = 3, DataTypeId = -87, PropertyEditorAlias = Constants.PropertyEditors.TinyMCEAlias, DbType = "Ntext" }); + _database.Insert(Constants.DatabaseSchema.Tables.DataType, "pk", false, new DataTypeDto { PrimaryKey = 4, DataTypeId = -88, PropertyEditorAlias = Constants.PropertyEditors.TextboxAlias, DbType = "Nvarchar" }); + _database.Insert(Constants.DatabaseSchema.Tables.DataType, "pk", false, new DataTypeDto { PrimaryKey = 5, DataTypeId = -89, PropertyEditorAlias = Constants.PropertyEditors.TextboxMultipleAlias, DbType = "Ntext" }); + _database.Insert(Constants.DatabaseSchema.Tables.DataType, "pk", false, new DataTypeDto { PrimaryKey = 6, DataTypeId = -90, PropertyEditorAlias = Constants.PropertyEditors.UploadFieldAlias, DbType = "Nvarchar" }); + _database.Insert(Constants.DatabaseSchema.Tables.DataType, "pk", false, new DataTypeDto { PrimaryKey = 7, DataTypeId = -92, PropertyEditorAlias = Constants.PropertyEditors.NoEditAlias, DbType = "Nvarchar" }); + _database.Insert(Constants.DatabaseSchema.Tables.DataType, "pk", false, new DataTypeDto { PrimaryKey = 8, DataTypeId = -36, PropertyEditorAlias = Constants.PropertyEditors.DateTimeAlias, DbType = "Date" }); + _database.Insert(Constants.DatabaseSchema.Tables.DataType, "pk", false, new DataTypeDto { PrimaryKey = 9, DataTypeId = -37, PropertyEditorAlias = Constants.PropertyEditors.ColorPickerAlias, DbType = "Nvarchar" }); + _database.Insert(Constants.DatabaseSchema.Tables.DataType, "pk", false, new DataTypeDto { PrimaryKey = 11, DataTypeId = -39, PropertyEditorAlias = Constants.PropertyEditors.DropDownListMultipleAlias, DbType = "Nvarchar" }); + _database.Insert(Constants.DatabaseSchema.Tables.DataType, "pk", false, new DataTypeDto { PrimaryKey = 12, DataTypeId = -40, PropertyEditorAlias = Constants.PropertyEditors.RadioButtonListAlias, DbType = "Nvarchar" }); + _database.Insert(Constants.DatabaseSchema.Tables.DataType, "pk", false, new DataTypeDto { PrimaryKey = 13, DataTypeId = -41, PropertyEditorAlias = Constants.PropertyEditors.DateAlias, DbType = "Date" }); + _database.Insert(Constants.DatabaseSchema.Tables.DataType, "pk", false, new DataTypeDto { PrimaryKey = 14, DataTypeId = -42, PropertyEditorAlias = Constants.PropertyEditors.DropDownListAlias, DbType = "Integer" }); + _database.Insert(Constants.DatabaseSchema.Tables.DataType, "pk", false, new DataTypeDto { PrimaryKey = 15, DataTypeId = -43, PropertyEditorAlias = Constants.PropertyEditors.CheckBoxListAlias, DbType = "Nvarchar" }); + _database.Insert(Constants.DatabaseSchema.Tables.DataType, "pk", false, new DataTypeDto { PrimaryKey = 22, DataTypeId = 1041, PropertyEditorAlias = Constants.PropertyEditors.TagsAlias, DbType = "Ntext" }); + _database.Insert(Constants.DatabaseSchema.Tables.DataType, "pk", false, new DataTypeDto { PrimaryKey = 24, DataTypeId = 1043, PropertyEditorAlias = Constants.PropertyEditors.ImageCropperAlias, DbType = "Ntext" }); + _database.Insert(Constants.DatabaseSchema.Tables.DataType, "pk", false, new DataTypeDto { PrimaryKey = -26, DataTypeId = Constants.DataTypes.DefaultContentListView, PropertyEditorAlias = Constants.PropertyEditors.ListViewAlias, DbType = "Nvarchar" }); + _database.Insert(Constants.DatabaseSchema.Tables.DataType, "pk", false, new DataTypeDto { PrimaryKey = -27, DataTypeId = Constants.DataTypes.DefaultMediaListView, PropertyEditorAlias = Constants.PropertyEditors.ListViewAlias, DbType = "Nvarchar" }); + _database.Insert(Constants.DatabaseSchema.Tables.DataType, "pk", false, new DataTypeDto { PrimaryKey = -28, DataTypeId = Constants.DataTypes.DefaultMembersListView, PropertyEditorAlias = Constants.PropertyEditors.ListViewAlias, DbType = "Nvarchar" }); + + //New UDI pickers with newer Ids + _database.Insert(Constants.DatabaseSchema.Tables.DataType, "pk", false, new DataTypeDto { PrimaryKey = 26, DataTypeId = 1046, PropertyEditorAlias = Constants.PropertyEditors.ContentPicker2Alias, DbType = "Nvarchar" }); + _database.Insert(Constants.DatabaseSchema.Tables.DataType, "pk", false, new DataTypeDto { PrimaryKey = 27, DataTypeId = 1047, PropertyEditorAlias = Constants.PropertyEditors.MemberPicker2Alias, DbType = "Nvarchar" }); + _database.Insert(Constants.DatabaseSchema.Tables.DataType, "pk", false, new DataTypeDto { PrimaryKey = 28, DataTypeId = 1048, PropertyEditorAlias = Constants.PropertyEditors.MediaPicker2Alias, DbType = "Ntext" }); + _database.Insert(Constants.DatabaseSchema.Tables.DataType, "pk", false, new DataTypeDto { PrimaryKey = 29, DataTypeId = 1049, PropertyEditorAlias = Constants.PropertyEditors.MediaPicker2Alias, DbType = "Ntext" }); + _database.Insert(Constants.DatabaseSchema.Tables.DataType, "pk", false, new DataTypeDto { PrimaryKey = 30, DataTypeId = 1050, PropertyEditorAlias = Constants.PropertyEditors.RelatedLinks2Alias, DbType = "Ntext" }); + + //TODO: We're not creating these for 7.0 + //_database.Insert(Constants.DatabaseSchema.Tables.DataType, "pk", false, new DataTypeDto { PrimaryKey = 19, DataTypeId = 1038, PropertyEditorAlias = Constants.PropertyEditors.MarkdownEditorAlias, DbType = "Ntext" }); + //_database.Insert(Constants.DatabaseSchema.Tables.DataType, "pk", false, new DataTypeDto { PrimaryKey = 20, DataTypeId = 1039, PropertyEditorAlias = Constants.PropertyEditors.UltimatePickerAlias, DbType = "Ntext" }); + //_database.Insert(Constants.DatabaseSchema.Tables.DataType, "pk", false, new DataTypeDto { PrimaryKey = 23, DataTypeId = 1042, PropertyEditorAlias = Constants.PropertyEditors.MacroContainerAlias, DbType = "Ntext" }); + } + + private void CreateDataTypePreValueData() + { + _database.Insert(Constants.DatabaseSchema.Tables.DataTypePreValue, "id", false, new DataTypePreValueDto { Id = 3, Alias = "", SortOrder = 0, DataTypeNodeId = -87, Value = ",code,undo,redo,cut,copy,mcepasteword,stylepicker,bold,italic,bullist,numlist,outdent,indent,mcelink,unlink,mceinsertanchor,mceimage,umbracomacro,mceinserttable,umbracoembed,mcecharmap,|1|1,2,3,|0|500,400|1049,|true|" }); + _database.Insert(Constants.DatabaseSchema.Tables.DataTypePreValue, "id", false, new DataTypePreValueDto { Id = 4, Alias = "group", SortOrder = 0, DataTypeNodeId = 1041, Value = "default" }); + + //defaults for the member list + _database.Insert(Constants.DatabaseSchema.Tables.DataTypePreValue, "id", false, new DataTypePreValueDto { Id = -1, Alias = "pageSize", SortOrder = 1, DataTypeNodeId = Constants.DataTypes.DefaultMembersListView, Value = "10" }); + _database.Insert(Constants.DatabaseSchema.Tables.DataTypePreValue, "id", false, new DataTypePreValueDto { Id = -2, Alias = "orderBy", SortOrder = 2, DataTypeNodeId = Constants.DataTypes.DefaultMembersListView, Value = "username" }); + _database.Insert(Constants.DatabaseSchema.Tables.DataTypePreValue, "id", false, new DataTypePreValueDto { Id = -3, Alias = "orderDirection", SortOrder = 3, DataTypeNodeId = Constants.DataTypes.DefaultMembersListView, Value = "asc" }); + _database.Insert(Constants.DatabaseSchema.Tables.DataTypePreValue, "id", false, new DataTypePreValueDto { Id = -4, Alias = "includeProperties", SortOrder = 4, DataTypeNodeId = Constants.DataTypes.DefaultMembersListView, Value = "[{\"alias\":\"username\",\"isSystem\":1},{\"alias\":\"email\",\"isSystem\":1},{\"alias\":\"updateDate\",\"header\":\"Last edited\",\"isSystem\":1}]" }); + + //layouts for the list view + var cardLayout = "{\"name\": \"Grid\",\"path\": \"views/propertyeditors/listview/layouts/grid/grid.html\", \"icon\": \"icon-thumbnails-small\", \"isSystem\": 1, \"selected\": true}"; + var listLayout = "{\"name\": \"List\",\"path\": \"views/propertyeditors/listview/layouts/list/list.html\",\"icon\": \"icon-list\", \"isSystem\": 1,\"selected\": true}"; + + //defaults for the media list + _database.Insert(Constants.DatabaseSchema.Tables.DataTypePreValue, "id", false, new DataTypePreValueDto { Id = -5, Alias = "pageSize", SortOrder = 1, DataTypeNodeId = Constants.DataTypes.DefaultMediaListView, Value = "100" }); + _database.Insert(Constants.DatabaseSchema.Tables.DataTypePreValue, "id", false, new DataTypePreValueDto { Id = -6, Alias = "orderBy", SortOrder = 2, DataTypeNodeId = Constants.DataTypes.DefaultMediaListView, Value = "updateDate" }); + _database.Insert(Constants.DatabaseSchema.Tables.DataTypePreValue, "id", false, new DataTypePreValueDto { Id = -7, Alias = "orderDirection", SortOrder = 3, DataTypeNodeId = Constants.DataTypes.DefaultMediaListView, Value = "desc" }); + _database.Insert(Constants.DatabaseSchema.Tables.DataTypePreValue, "id", false, new DataTypePreValueDto { Id = -8, Alias = "layouts", SortOrder = 4, DataTypeNodeId = Constants.DataTypes.DefaultMediaListView, Value = "[" + cardLayout + "," + listLayout + "]" }); + _database.Insert(Constants.DatabaseSchema.Tables.DataTypePreValue, "id", false, new DataTypePreValueDto { Id = -9, Alias = "includeProperties", SortOrder = 5, DataTypeNodeId = Constants.DataTypes.DefaultMediaListView, Value = "[{\"alias\":\"updateDate\",\"header\":\"Last edited\",\"isSystem\":1},{\"alias\":\"owner\",\"header\":\"Updated by\",\"isSystem\":1}]" }); + + //default's for MultipleMediaPickerAlias picker + _database.Insert(Constants.DatabaseSchema.Tables.DataTypePreValue, "id", false, new DataTypePreValueDto { Id = 6, Alias = "multiPicker", SortOrder = 0, DataTypeNodeId = 1049, Value = "1" }); + } + + private void CreateRelationTypeData() + { + var relationType = new RelationTypeDto { Id = 1, Alias = Constants.Conventions.RelationTypes.RelateDocumentOnCopyAlias, ChildObjectType = Constants.ObjectTypes.Document, ParentObjectType = Constants.ObjectTypes.Document, Dual = true, Name = Constants.Conventions.RelationTypes.RelateDocumentOnCopyName }; + relationType.UniqueId = (relationType.Alias + "____" + relationType.Name).ToGuid(); + _database.Insert(Constants.DatabaseSchema.Tables.RelationType, "id", false, relationType); + relationType = new RelationTypeDto { Id = 2, Alias = Constants.Conventions.RelationTypes.RelateParentDocumentOnDeleteAlias, ChildObjectType = Constants.ObjectTypes.Document, ParentObjectType = Constants.ObjectTypes.Document, Dual = false, Name = Constants.Conventions.RelationTypes.RelateParentDocumentOnDeleteName }; + relationType.UniqueId = (relationType.Alias + "____" + relationType.Name).ToGuid(); + _database.Insert(Constants.DatabaseSchema.Tables.RelationType, "id", false, relationType); + } + + private void CreateTaskTypeData() + { + _database.Insert(Constants.DatabaseSchema.Tables.TaskType, "id", false, new TaskTypeDto { Id = 1, Alias = "toTranslate" }); + } + + private void CreateMigrationData() + { + var dto = new MigrationDto + { + Id = 1, + Name = Constants.System.UmbracoMigrationName, + Version = UmbracoVersion.SemanticVersion.ToString(), + CreateDate = DateTime.Now + }; + + _database.Insert(Constants.DatabaseSchema.Tables.Migration, "pk", false, dto); + } + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Initial/DatabaseSchemaCreation.cs b/src/Umbraco.Core/Migrations/Install/DatabaseSchemaCreator.cs similarity index 63% rename from src/Umbraco.Core/Persistence/Migrations/Initial/DatabaseSchemaCreation.cs rename to src/Umbraco.Core/Migrations/Install/DatabaseSchemaCreator.cs index 931200d29f..f4353aaede 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Initial/DatabaseSchemaCreation.cs +++ b/src/Umbraco.Core/Migrations/Install/DatabaseSchemaCreator.cs @@ -1,374 +1,458 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using NPoco; -using Umbraco.Core.Events; -using Umbraco.Core.Logging; -using Umbraco.Core.Models.Rdbms; -using Umbraco.Core.Persistence.DatabaseModelDefinitions; -using Umbraco.Core.Persistence.SqlSyntax; - -namespace Umbraco.Core.Persistence.Migrations.Initial -{ - /// - /// Represents the initial database schema creation by running CreateTable for all DTOs against the db. - /// - public class DatabaseSchemaCreation - { - private readonly DatabaseSchemaHelper _schemaHelper; - private readonly IUmbracoDatabase _database; - private readonly ILogger _logger; - - /// - /// Constructor - /// - /// - /// - public DatabaseSchemaCreation(IUmbracoDatabase database, ILogger logger) - { - _database = database; - _logger = logger; - _schemaHelper = new DatabaseSchemaHelper(database, logger); - } - - private ISqlSyntaxProvider SqlSyntax => _database.SqlContext.SqlSyntax; - - #region All Ordered Tables - - public static readonly Dictionary OrderedTables = new Dictionary - { - {0, typeof (NodeDto)}, - {1, typeof (ContentTypeDto)}, - {2, typeof (TemplateDto)}, - {3, typeof (ContentDto)}, - {4, typeof (ContentVersionDto)}, - {5, typeof (DocumentDto)}, - {6, typeof (ContentTypeTemplateDto)}, - {7, typeof (DataTypeDto)}, - {8, typeof (DataTypePreValueDto)}, - {9, typeof (DictionaryDto)}, - - {10, typeof (LanguageDto)}, - {11, typeof (LanguageTextDto)}, - {12, typeof (DomainDto)}, - {13, typeof (LogDto)}, - {14, typeof (MacroDto)}, - {15, typeof (MacroPropertyDto)}, - {16, typeof (MemberTypeDto)}, - {17, typeof (MemberDto)}, - {18, typeof (Member2MemberGroupDto)}, - {19, typeof (ContentXmlDto)}, - - {20, typeof (PreviewXmlDto)}, - {21, typeof (PropertyTypeGroupDto)}, - {22, typeof (PropertyTypeDto)}, - {23, typeof (PropertyDataDto)}, - {24, typeof (RelationTypeDto)}, - {25, typeof (RelationDto)}, - //removed: {26... - //removed: {27... - {28, typeof (TagDto)}, - {29, typeof (TagRelationshipDto)}, - - //removed: {30... - //removed in 7.6: {31, typeof (UserTypeDto)}, - {32, typeof (UserDto)}, - {33, typeof (TaskTypeDto)}, - {34, typeof (TaskDto)}, - {35, typeof (ContentType2ContentTypeDto)}, - {36, typeof (ContentTypeAllowedContentTypeDto)}, - //removed in 7.6: {37, typeof (User2AppDto)}, - {38, typeof (User2NodeNotifyDto)}, - //removed in 7.6: {39, typeof (User2NodePermissionDto)}, - - {40, typeof (ServerRegistrationDto)}, - {41, typeof (AccessDto)}, - {42, typeof (AccessRuleDto)}, - {43, typeof (CacheInstructionDto)}, - {44, typeof (ExternalLoginDto)}, - {45, typeof (MigrationDto)}, - //removed: {46, typeof (UmbracoDeployChecksumDto)}, - //removed: {47, typeof (UmbracoDeployDependencyDto)}, - {48, typeof (RedirectUrlDto) }, - {49, typeof (LockDto) }, - - {50, typeof (UserGroupDto) }, - {51, typeof (User2UserGroupDto) }, - {52, typeof (UserGroup2NodePermissionDto) }, - {53, typeof (UserGroup2AppDto) }, - {54, typeof (UserStartNodeDto) }, - {55, typeof (ContentNuDto) }, - {56, typeof (DocumentVersionDto) } - }; - #endregion - - /// - /// Drops all Umbraco tables in the db. - /// - internal void UninstallDatabaseSchema() - { - _logger.Info("Start UninstallDatabaseSchema"); - - foreach (var item in OrderedTables.OrderByDescending(x => x.Key)) - { - var tableNameAttribute = item.Value.FirstAttribute(); - - var tableName = tableNameAttribute == null ? item.Value.Name : tableNameAttribute.Value; - - _logger.Info("Uninstall" + tableName); - - try - { - if (_schemaHelper.TableExist(tableName)) - { - _schemaHelper.DropTable(tableName); - } - } - catch (Exception ex) - { - //swallow this for now, not sure how best to handle this with diff databases... though this is internal - // and only used for unit tests. If this fails its because the table doesn't exist... generally! - _logger.Error("Could not drop table " + tableName, ex); - } - } - } - - /// - /// Initializes the database by creating the umbraco db schema. - /// - public void InitializeDatabaseSchema() - { - var e = new DatabaseCreationEventArgs(); - FireBeforeCreation(e); - - if (e.Cancel == false) - { - foreach (var item in OrderedTables.OrderBy(x => x.Key)) - { - _schemaHelper.CreateTable(false, item.Value); - } - } - - FireAfterCreation(e); - } - - /// - /// Validates the schema of the current database. - /// - public DatabaseSchemaResult ValidateSchema() - { - var result = new DatabaseSchemaResult(SqlSyntax); - - //get the db index defs - result.DbIndexDefinitions = SqlSyntax.GetDefinedIndexes(_database) - .Select(x => new DbIndexDefinition - { - TableName = x.Item1, - IndexName = x.Item2, - ColumnName = x.Item3, - IsUnique = x.Item4 - }).ToArray(); - - result.TableDefinitions.AddRange(OrderedTables - .OrderBy(x => x.Key) - .Select(x => DefinitionFactory.GetTableDefinition(x.Value, SqlSyntax))); - - ValidateDbTables(result); - ValidateDbColumns(result); - ValidateDbIndexes(result); - ValidateDbConstraints(result); - - return result; - } - - private void ValidateDbConstraints(DatabaseSchemaResult result) - { - //MySql doesn't conform to the "normal" naming of constraints, so there is currently no point in doing these checks. - //TODO: At a later point we do other checks for MySql, but ideally it should be necessary to do special checks for different providers. - // ALso note that to get the constraints for MySql we have to open a connection which we currently have not. - if (SqlSyntax is MySqlSyntaxProvider) - return; - - //Check constraints in configured database against constraints in schema - var constraintsInDatabase = SqlSyntax.GetConstraintsPerColumn(_database).DistinctBy(x => x.Item3).ToList(); - var foreignKeysInDatabase = constraintsInDatabase.Where(x => x.Item3.InvariantStartsWith("FK_")).Select(x => x.Item3).ToList(); - var primaryKeysInDatabase = constraintsInDatabase.Where(x => x.Item3.InvariantStartsWith("PK_")).Select(x => x.Item3).ToList(); - var indexesInDatabase = constraintsInDatabase.Where(x => x.Item3.InvariantStartsWith("IX_")).Select(x => x.Item3).ToList(); - var indexesInSchema = result.TableDefinitions.SelectMany(x => x.Indexes.Select(y => y.Name)).ToList(); - var unknownConstraintsInDatabase = - constraintsInDatabase.Where( - x => - x.Item3.InvariantStartsWith("FK_") == false && x.Item3.InvariantStartsWith("PK_") == false && - x.Item3.InvariantStartsWith("IX_") == false).Select(x => x.Item3).ToList(); - var foreignKeysInSchema = result.TableDefinitions.SelectMany(x => x.ForeignKeys.Select(y => y.Name)).ToList(); - var primaryKeysInSchema = result.TableDefinitions.SelectMany(x => x.Columns.Select(y => y.PrimaryKeyName)) - .Where(x => x.IsNullOrWhiteSpace() == false).ToList(); - - //Add valid and invalid foreign key differences to the result object - // We'll need to do invariant contains with case insensitivity because foreign key, primary key, and even index naming w/ MySQL is not standardized - // In theory you could have: FK_ or fk_ ...or really any standard that your development department (or developer) chooses to use. - foreach (var unknown in unknownConstraintsInDatabase) - { - if (foreignKeysInSchema.InvariantContains(unknown) || primaryKeysInSchema.InvariantContains(unknown) || indexesInSchema.InvariantContains(unknown)) - { - result.ValidConstraints.Add(unknown); - } - else - { - result.Errors.Add(new Tuple("Unknown", unknown)); - } - } - - //Foreign keys: - - var validForeignKeyDifferences = foreignKeysInDatabase.Intersect(foreignKeysInSchema, StringComparer.InvariantCultureIgnoreCase); - foreach (var foreignKey in validForeignKeyDifferences) - { - result.ValidConstraints.Add(foreignKey); - } - var invalidForeignKeyDifferences = - foreignKeysInDatabase.Except(foreignKeysInSchema, StringComparer.InvariantCultureIgnoreCase) - .Union(foreignKeysInSchema.Except(foreignKeysInDatabase, StringComparer.InvariantCultureIgnoreCase)); - foreach (var foreignKey in invalidForeignKeyDifferences) - { - result.Errors.Add(new Tuple("Constraint", foreignKey)); - } - - - //Primary keys: - - //Add valid and invalid primary key differences to the result object - var validPrimaryKeyDifferences = primaryKeysInDatabase.Intersect(primaryKeysInSchema, StringComparer.InvariantCultureIgnoreCase); - foreach (var primaryKey in validPrimaryKeyDifferences) - { - result.ValidConstraints.Add(primaryKey); - } - var invalidPrimaryKeyDifferences = - primaryKeysInDatabase.Except(primaryKeysInSchema, StringComparer.InvariantCultureIgnoreCase) - .Union(primaryKeysInSchema.Except(primaryKeysInDatabase, StringComparer.InvariantCultureIgnoreCase)); - foreach (var primaryKey in invalidPrimaryKeyDifferences) - { - result.Errors.Add(new Tuple("Constraint", primaryKey)); - } - - //Constaints: - - //NOTE: SD: The colIndex checks above should really take care of this but I need to keep this here because it was here before - // and some schema validation checks might rely on this data remaining here! - //Add valid and invalid index differences to the result object - var validIndexDifferences = indexesInDatabase.Intersect(indexesInSchema, StringComparer.InvariantCultureIgnoreCase); - foreach (var index in validIndexDifferences) - { - result.ValidConstraints.Add(index); - } - var invalidIndexDifferences = - indexesInDatabase.Except(indexesInSchema, StringComparer.InvariantCultureIgnoreCase) - .Union(indexesInSchema.Except(indexesInDatabase, StringComparer.InvariantCultureIgnoreCase)); - foreach (var index in invalidIndexDifferences) - { - result.Errors.Add(new Tuple("Constraint", index)); - } - } - - private void ValidateDbColumns(DatabaseSchemaResult result) - { - //Check columns in configured database against columns in schema - var columnsInDatabase = SqlSyntax.GetColumnsInSchema(_database); - var columnsPerTableInDatabase = columnsInDatabase.Select(x => string.Concat(x.TableName, ",", x.ColumnName)).ToList(); - var columnsPerTableInSchema = result.TableDefinitions.SelectMany(x => x.Columns.Select(y => string.Concat(y.TableName, ",", y.Name))).ToList(); - //Add valid and invalid column differences to the result object - var validColumnDifferences = columnsPerTableInDatabase.Intersect(columnsPerTableInSchema, StringComparer.InvariantCultureIgnoreCase); - foreach (var column in validColumnDifferences) - { - result.ValidColumns.Add(column); - } - - var invalidColumnDifferences = - columnsPerTableInDatabase.Except(columnsPerTableInSchema, StringComparer.InvariantCultureIgnoreCase) - .Union(columnsPerTableInSchema.Except(columnsPerTableInDatabase, StringComparer.InvariantCultureIgnoreCase)); - foreach (var column in invalidColumnDifferences) - { - result.Errors.Add(new Tuple("Column", column)); - } - } - - private void ValidateDbTables(DatabaseSchemaResult result) - { - //Check tables in configured database against tables in schema - var tablesInDatabase = SqlSyntax.GetTablesInSchema(_database).ToList(); - var tablesInSchema = result.TableDefinitions.Select(x => x.Name).ToList(); - //Add valid and invalid table differences to the result object - var validTableDifferences = tablesInDatabase.Intersect(tablesInSchema, StringComparer.InvariantCultureIgnoreCase); - foreach (var tableName in validTableDifferences) - { - result.ValidTables.Add(tableName); - } - - var invalidTableDifferences = - tablesInDatabase.Except(tablesInSchema, StringComparer.InvariantCultureIgnoreCase) - .Union(tablesInSchema.Except(tablesInDatabase, StringComparer.InvariantCultureIgnoreCase)); - foreach (var tableName in invalidTableDifferences) - { - result.Errors.Add(new Tuple("Table", tableName)); - } - } - - private void ValidateDbIndexes(DatabaseSchemaResult result) - { - //These are just column indexes NOT constraints or Keys - //var colIndexesInDatabase = result.DbIndexDefinitions.Where(x => x.IndexName.InvariantStartsWith("IX_")).Select(x => x.IndexName).ToList(); - var colIndexesInDatabase = result.DbIndexDefinitions.Select(x => x.IndexName).ToList(); - var indexesInSchema = result.TableDefinitions.SelectMany(x => x.Indexes.Select(y => y.Name)).ToList(); - - //Add valid and invalid index differences to the result object - var validColIndexDifferences = colIndexesInDatabase.Intersect(indexesInSchema, StringComparer.InvariantCultureIgnoreCase); - foreach (var index in validColIndexDifferences) - { - result.ValidIndexes.Add(index); - } - - var invalidColIndexDifferences = - colIndexesInDatabase.Except(indexesInSchema, StringComparer.InvariantCultureIgnoreCase) - .Union(indexesInSchema.Except(colIndexesInDatabase, StringComparer.InvariantCultureIgnoreCase)); - foreach (var index in invalidColIndexDifferences) - { - result.Errors.Add(new Tuple("Index", index)); - } - } - - #region Events - - /// - /// The save event handler - /// - internal delegate void DatabaseEventHandler(DatabaseCreationEventArgs e); - - /// - /// Occurs when [before save]. - /// - internal static event DatabaseEventHandler BeforeCreation; - /// - /// Raises the event. - /// - /// The instance containing the event data. - internal virtual void FireBeforeCreation(DatabaseCreationEventArgs e) - { - BeforeCreation?.Invoke(e); - } - - /// - /// Occurs when [after save]. - /// - internal static event DatabaseEventHandler AfterCreation; - /// - /// Raises the event. - /// - /// The instance containing the event data. - internal virtual void FireAfterCreation(DatabaseCreationEventArgs e) - { - AfterCreation?.Invoke(e); - } - - #endregion - } -} +using System; +using System.Collections.Generic; +using System.Linq; +using NPoco; +using Umbraco.Core.Events; +using Umbraco.Core.Logging; +using Umbraco.Core.Models.Rdbms; +using Umbraco.Core.Persistence; +using Umbraco.Core.Persistence.DatabaseModelDefinitions; +using Umbraco.Core.Persistence.SqlSyntax; + +namespace Umbraco.Core.Migrations.Install +{ + /// + /// Creates the initial database schema during install. + /// + internal class DatabaseSchemaCreator + { + private readonly IUmbracoDatabase _database; + private readonly ILogger _logger; + + public DatabaseSchemaCreator(IUmbracoDatabase database, ILogger logger) + { + _database = database; + _logger = logger; + } + + private ISqlSyntaxProvider SqlSyntax => _database.SqlContext.SqlSyntax; + + // all tables, in order + public static readonly Dictionary OrderedTables = new Dictionary + { + {0, typeof (NodeDto)}, + {1, typeof (ContentTypeDto)}, + {2, typeof (TemplateDto)}, + {3, typeof (ContentDto)}, + {4, typeof (ContentVersionDto)}, + {5, typeof (DocumentDto)}, + {6, typeof (ContentTypeTemplateDto)}, + {7, typeof (DataTypeDto)}, + {8, typeof (DataTypePreValueDto)}, + {9, typeof (DictionaryDto)}, + + {10, typeof (LanguageDto)}, + {11, typeof (LanguageTextDto)}, + {12, typeof (DomainDto)}, + {13, typeof (LogDto)}, + {14, typeof (MacroDto)}, + {15, typeof (MacroPropertyDto)}, + {16, typeof (MemberTypeDto)}, + {17, typeof (MemberDto)}, + {18, typeof (Member2MemberGroupDto)}, + {19, typeof (ContentXmlDto)}, + + {20, typeof (PreviewXmlDto)}, + {21, typeof (PropertyTypeGroupDto)}, + {22, typeof (PropertyTypeDto)}, + {23, typeof (PropertyDataDto)}, + {24, typeof (RelationTypeDto)}, + {25, typeof (RelationDto)}, + //removed: {26... + //removed: {27... + {28, typeof (TagDto)}, + {29, typeof (TagRelationshipDto)}, + + //removed: {30... + //removed in 7.6: {31, typeof (UserTypeDto)}, + {32, typeof (UserDto)}, + {33, typeof (TaskTypeDto)}, + {34, typeof (TaskDto)}, + {35, typeof (ContentType2ContentTypeDto)}, + {36, typeof (ContentTypeAllowedContentTypeDto)}, + //removed in 7.6: {37, typeof (User2AppDto)}, + {38, typeof (User2NodeNotifyDto)}, + //removed in 7.6: {39, typeof (User2NodePermissionDto)}, + + {40, typeof (ServerRegistrationDto)}, + {41, typeof (AccessDto)}, + {42, typeof (AccessRuleDto)}, + {43, typeof (CacheInstructionDto)}, + {44, typeof (ExternalLoginDto)}, + {45, typeof (MigrationDto)}, + //removed: {46, typeof (UmbracoDeployChecksumDto)}, + //removed: {47, typeof (UmbracoDeployDependencyDto)}, + {48, typeof (RedirectUrlDto) }, + {49, typeof (LockDto) }, + + {50, typeof (UserGroupDto) }, + {51, typeof (User2UserGroupDto) }, + {52, typeof (UserGroup2NodePermissionDto) }, + {53, typeof (UserGroup2AppDto) }, + {54, typeof (UserStartNodeDto) }, + {55, typeof (ContentNuDto) }, + {56, typeof (DocumentVersionDto) } + }; + + /// + /// Drops all Umbraco tables in the db. + /// + internal void UninstallDatabaseSchema() + { + _logger.Info("Start UninstallDatabaseSchema"); + + foreach (var item in OrderedTables.OrderByDescending(x => x.Key)) + { + var tableNameAttribute = item.Value.FirstAttribute(); + + var tableName = tableNameAttribute == null ? item.Value.Name : tableNameAttribute.Value; + + _logger.Info("Uninstall" + tableName); + + try + { + if (TableExists(tableName)) + DropTable(tableName); + } + catch (Exception ex) + { + //swallow this for now, not sure how best to handle this with diff databases... though this is internal + // and only used for unit tests. If this fails its because the table doesn't exist... generally! + _logger.Error("Could not drop table " + tableName, ex); + } + } + } + + /// + /// Initializes the database by creating the umbraco db schema. + /// + public void InitializeDatabaseSchema() + { + var e = new DatabaseCreationEventArgs(); + FireBeforeCreation(e); + + if (e.Cancel == false) + { + var dataCreation = new DatabaseDataCreator(_database, _logger); + foreach (var item in OrderedTables.OrderBy(x => x.Key)) + CreateTable(false, item.Value, dataCreation); + } + + FireAfterCreation(e); + } + + /// + /// Validates the schema of the current database. + /// + public DatabaseSchemaResult ValidateSchema() + { + var result = new DatabaseSchemaResult(SqlSyntax); + + //get the db index defs + result.DbIndexDefinitions = SqlSyntax.GetDefinedIndexes(_database) + .Select(x => new DbIndexDefinition + { + TableName = x.Item1, + IndexName = x.Item2, + ColumnName = x.Item3, + IsUnique = x.Item4 + }).ToArray(); + + result.TableDefinitions.AddRange(OrderedTables + .OrderBy(x => x.Key) + .Select(x => DefinitionFactory.GetTableDefinition(x.Value, SqlSyntax))); + + ValidateDbTables(result); + ValidateDbColumns(result); + ValidateDbIndexes(result); + ValidateDbConstraints(result); + + return result; + } + + private void ValidateDbConstraints(DatabaseSchemaResult result) + { + //MySql doesn't conform to the "normal" naming of constraints, so there is currently no point in doing these checks. + //TODO: At a later point we do other checks for MySql, but ideally it should be necessary to do special checks for different providers. + // ALso note that to get the constraints for MySql we have to open a connection which we currently have not. + if (SqlSyntax is MySqlSyntaxProvider) + return; + + //Check constraints in configured database against constraints in schema + var constraintsInDatabase = SqlSyntax.GetConstraintsPerColumn(_database).DistinctBy(x => x.Item3).ToList(); + var foreignKeysInDatabase = constraintsInDatabase.Where(x => x.Item3.InvariantStartsWith("FK_")).Select(x => x.Item3).ToList(); + var primaryKeysInDatabase = constraintsInDatabase.Where(x => x.Item3.InvariantStartsWith("PK_")).Select(x => x.Item3).ToList(); + var indexesInDatabase = constraintsInDatabase.Where(x => x.Item3.InvariantStartsWith("IX_")).Select(x => x.Item3).ToList(); + var indexesInSchema = result.TableDefinitions.SelectMany(x => x.Indexes.Select(y => y.Name)).ToList(); + var unknownConstraintsInDatabase = + constraintsInDatabase.Where( + x => + x.Item3.InvariantStartsWith("FK_") == false && x.Item3.InvariantStartsWith("PK_") == false && + x.Item3.InvariantStartsWith("IX_") == false).Select(x => x.Item3).ToList(); + var foreignKeysInSchema = result.TableDefinitions.SelectMany(x => x.ForeignKeys.Select(y => y.Name)).ToList(); + var primaryKeysInSchema = result.TableDefinitions.SelectMany(x => x.Columns.Select(y => y.PrimaryKeyName)) + .Where(x => x.IsNullOrWhiteSpace() == false).ToList(); + + //Add valid and invalid foreign key differences to the result object + // We'll need to do invariant contains with case insensitivity because foreign key, primary key, and even index naming w/ MySQL is not standardized + // In theory you could have: FK_ or fk_ ...or really any standard that your development department (or developer) chooses to use. + foreach (var unknown in unknownConstraintsInDatabase) + { + if (foreignKeysInSchema.InvariantContains(unknown) || primaryKeysInSchema.InvariantContains(unknown) || indexesInSchema.InvariantContains(unknown)) + { + result.ValidConstraints.Add(unknown); + } + else + { + result.Errors.Add(new Tuple("Unknown", unknown)); + } + } + + //Foreign keys: + + var validForeignKeyDifferences = foreignKeysInDatabase.Intersect(foreignKeysInSchema, StringComparer.InvariantCultureIgnoreCase); + foreach (var foreignKey in validForeignKeyDifferences) + { + result.ValidConstraints.Add(foreignKey); + } + var invalidForeignKeyDifferences = + foreignKeysInDatabase.Except(foreignKeysInSchema, StringComparer.InvariantCultureIgnoreCase) + .Union(foreignKeysInSchema.Except(foreignKeysInDatabase, StringComparer.InvariantCultureIgnoreCase)); + foreach (var foreignKey in invalidForeignKeyDifferences) + { + result.Errors.Add(new Tuple("Constraint", foreignKey)); + } + + + //Primary keys: + + //Add valid and invalid primary key differences to the result object + var validPrimaryKeyDifferences = primaryKeysInDatabase.Intersect(primaryKeysInSchema, StringComparer.InvariantCultureIgnoreCase); + foreach (var primaryKey in validPrimaryKeyDifferences) + { + result.ValidConstraints.Add(primaryKey); + } + var invalidPrimaryKeyDifferences = + primaryKeysInDatabase.Except(primaryKeysInSchema, StringComparer.InvariantCultureIgnoreCase) + .Union(primaryKeysInSchema.Except(primaryKeysInDatabase, StringComparer.InvariantCultureIgnoreCase)); + foreach (var primaryKey in invalidPrimaryKeyDifferences) + { + result.Errors.Add(new Tuple("Constraint", primaryKey)); + } + + //Constaints: + + //NOTE: SD: The colIndex checks above should really take care of this but I need to keep this here because it was here before + // and some schema validation checks might rely on this data remaining here! + //Add valid and invalid index differences to the result object + var validIndexDifferences = indexesInDatabase.Intersect(indexesInSchema, StringComparer.InvariantCultureIgnoreCase); + foreach (var index in validIndexDifferences) + { + result.ValidConstraints.Add(index); + } + var invalidIndexDifferences = + indexesInDatabase.Except(indexesInSchema, StringComparer.InvariantCultureIgnoreCase) + .Union(indexesInSchema.Except(indexesInDatabase, StringComparer.InvariantCultureIgnoreCase)); + foreach (var index in invalidIndexDifferences) + { + result.Errors.Add(new Tuple("Constraint", index)); + } + } + + private void ValidateDbColumns(DatabaseSchemaResult result) + { + //Check columns in configured database against columns in schema + var columnsInDatabase = SqlSyntax.GetColumnsInSchema(_database); + var columnsPerTableInDatabase = columnsInDatabase.Select(x => string.Concat(x.TableName, ",", x.ColumnName)).ToList(); + var columnsPerTableInSchema = result.TableDefinitions.SelectMany(x => x.Columns.Select(y => string.Concat(y.TableName, ",", y.Name))).ToList(); + //Add valid and invalid column differences to the result object + var validColumnDifferences = columnsPerTableInDatabase.Intersect(columnsPerTableInSchema, StringComparer.InvariantCultureIgnoreCase); + foreach (var column in validColumnDifferences) + { + result.ValidColumns.Add(column); + } + + var invalidColumnDifferences = + columnsPerTableInDatabase.Except(columnsPerTableInSchema, StringComparer.InvariantCultureIgnoreCase) + .Union(columnsPerTableInSchema.Except(columnsPerTableInDatabase, StringComparer.InvariantCultureIgnoreCase)); + foreach (var column in invalidColumnDifferences) + { + result.Errors.Add(new Tuple("Column", column)); + } + } + + private void ValidateDbTables(DatabaseSchemaResult result) + { + //Check tables in configured database against tables in schema + var tablesInDatabase = SqlSyntax.GetTablesInSchema(_database).ToList(); + var tablesInSchema = result.TableDefinitions.Select(x => x.Name).ToList(); + //Add valid and invalid table differences to the result object + var validTableDifferences = tablesInDatabase.Intersect(tablesInSchema, StringComparer.InvariantCultureIgnoreCase); + foreach (var tableName in validTableDifferences) + { + result.ValidTables.Add(tableName); + } + + var invalidTableDifferences = + tablesInDatabase.Except(tablesInSchema, StringComparer.InvariantCultureIgnoreCase) + .Union(tablesInSchema.Except(tablesInDatabase, StringComparer.InvariantCultureIgnoreCase)); + foreach (var tableName in invalidTableDifferences) + { + result.Errors.Add(new Tuple("Table", tableName)); + } + } + + private void ValidateDbIndexes(DatabaseSchemaResult result) + { + //These are just column indexes NOT constraints or Keys + //var colIndexesInDatabase = result.DbIndexDefinitions.Where(x => x.IndexName.InvariantStartsWith("IX_")).Select(x => x.IndexName).ToList(); + var colIndexesInDatabase = result.DbIndexDefinitions.Select(x => x.IndexName).ToList(); + var indexesInSchema = result.TableDefinitions.SelectMany(x => x.Indexes.Select(y => y.Name)).ToList(); + + //Add valid and invalid index differences to the result object + var validColIndexDifferences = colIndexesInDatabase.Intersect(indexesInSchema, StringComparer.InvariantCultureIgnoreCase); + foreach (var index in validColIndexDifferences) + { + result.ValidIndexes.Add(index); + } + + var invalidColIndexDifferences = + colIndexesInDatabase.Except(indexesInSchema, StringComparer.InvariantCultureIgnoreCase) + .Union(indexesInSchema.Except(colIndexesInDatabase, StringComparer.InvariantCultureIgnoreCase)); + foreach (var index in invalidColIndexDifferences) + { + result.Errors.Add(new Tuple("Index", index)); + } + } + + #region Events + + /// + /// The save event handler + /// + internal delegate void DatabaseEventHandler(DatabaseCreationEventArgs e); + + /// + /// Occurs when [before save]. + /// + internal static event DatabaseEventHandler BeforeCreation; + /// + /// Raises the event. + /// + /// The instance containing the event data. + internal virtual void FireBeforeCreation(DatabaseCreationEventArgs e) + { + BeforeCreation?.Invoke(e); + } + + /// + /// Occurs when [after save]. + /// + internal static event DatabaseEventHandler AfterCreation; + /// + /// Raises the event. + /// + /// The instance containing the event data. + internal virtual void FireAfterCreation(DatabaseCreationEventArgs e) + { + AfterCreation?.Invoke(e); + } + + #endregion + + #region Utilities + + public bool TableExists(string tableName) + { + return SqlSyntax.DoesTableExist(_database, tableName); + } + + // this is used in tests + internal void CreateTable(bool overwrite = false) + where T : new() + { + var tableType = typeof(T); + CreateTable(overwrite, tableType, new DatabaseDataCreator(_database, _logger)); + } + + public void CreateTable(bool overwrite, Type modelType, DatabaseDataCreator dataCreation) + { + var tableDefinition = DefinitionFactory.GetTableDefinition(modelType, SqlSyntax); + var tableName = tableDefinition.Name; + + var createSql = SqlSyntax.Format(tableDefinition); + var createPrimaryKeySql = SqlSyntax.FormatPrimaryKey(tableDefinition); + var foreignSql = SqlSyntax.Format(tableDefinition.ForeignKeys); + var indexSql = SqlSyntax.Format(tableDefinition.Indexes); + + var tableExist = TableExists(tableName); + if (overwrite && tableExist) + { + DropTable(tableName); + tableExist = false; + } + + if (tableExist == false) + { + using (var transaction = _database.GetTransaction()) + { + //Execute the Create Table sql + var created = _database.Execute(new Sql(createSql)); + _logger.Info($"Create Table sql {created}:\n {createSql}"); + + //If any statements exists for the primary key execute them here + if (string.IsNullOrEmpty(createPrimaryKeySql) == false) + { + var createdPk = _database.Execute(new Sql(createPrimaryKeySql)); + _logger.Info($"Primary Key sql {createdPk}:\n {createPrimaryKeySql}"); + } + + //Turn on identity insert if db provider is not mysql + if (SqlSyntax.SupportsIdentityInsert() && tableDefinition.Columns.Any(x => x.IsIdentity)) + _database.Execute(new Sql($"SET IDENTITY_INSERT {SqlSyntax.GetQuotedTableName(tableName)} ON ")); + + //Call the NewTable-event to trigger the insert of base/default data + //OnNewTable(tableName, _db, e, _logger); + + dataCreation.InitializeBaseData(tableName); + + //Turn off identity insert if db provider is not mysql + if (SqlSyntax.SupportsIdentityInsert() && tableDefinition.Columns.Any(x => x.IsIdentity)) + _database.Execute(new Sql($"SET IDENTITY_INSERT {SqlSyntax.GetQuotedTableName(tableName)} OFF;")); + + //Special case for MySql + if (SqlSyntax is MySqlSyntaxProvider && tableName.Equals("umbracoUser")) + { + _database.Update("SET id = @IdAfter WHERE id = @IdBefore AND userLogin = @Login", new { IdAfter = 0, IdBefore = 1, Login = "admin" }); + } + + //Loop through index statements and execute sql + foreach (var sql in indexSql) + { + var createdIndex = _database.Execute(new Sql(sql)); + _logger.Info($"Create Index sql {createdIndex}:\n {sql}"); + } + + //Loop through foreignkey statements and execute sql + foreach (var sql in foreignSql) + { + var createdFk = _database.Execute(new Sql(sql)); + _logger.Info($"Create Foreign Key sql {createdFk}:\n {sql}"); + } + + transaction.Complete(); + } + } + + _logger.Info($"New table '{tableName}' was created"); + } + + public void DropTable(string tableName) + { + var sql = new Sql(string.Format(SqlSyntax.DropTable, SqlSyntax.GetQuotedTableName(tableName))); + _database.Execute(sql); + } + + #endregion + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Initial/DatabaseSchemaResult.cs b/src/Umbraco.Core/Migrations/Install/DatabaseSchemaResult.cs similarity index 97% rename from src/Umbraco.Core/Persistence/Migrations/Initial/DatabaseSchemaResult.cs rename to src/Umbraco.Core/Migrations/Install/DatabaseSchemaResult.cs index b7d5314a29..5f29a20ec8 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Initial/DatabaseSchemaResult.cs +++ b/src/Umbraco.Core/Migrations/Install/DatabaseSchemaResult.cs @@ -1,219 +1,219 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Semver; -using Umbraco.Core.Configuration; -using Umbraco.Core.Persistence.DatabaseModelDefinitions; -using Umbraco.Core.Persistence.SqlSyntax; -using Umbraco.Core.Services; - -namespace Umbraco.Core.Persistence.Migrations.Initial -{ - public class DatabaseSchemaResult - { - private readonly ISqlSyntaxProvider _sqlSyntax; - - public DatabaseSchemaResult(ISqlSyntaxProvider sqlSyntax) - { - _sqlSyntax = sqlSyntax; - Errors = new List>(); - TableDefinitions = new List(); - ValidTables = new List(); - ValidColumns = new List(); - ValidConstraints = new List(); - ValidIndexes = new List(); - } - - public List> Errors { get; set; } - - public List TableDefinitions { get; set; } - - public List ValidTables { get; set; } - - public List ValidColumns { get; set; } - - public List ValidConstraints { get; set; } - - public List ValidIndexes { get; set; } - - internal IEnumerable DbIndexDefinitions { get; set; } - - /// - /// Checks in the db which version is installed based on the migrations that have been run - /// - /// - /// - public SemVersion DetermineInstalledVersionByMigrations(IMigrationEntryService migrationEntryService) - { - SemVersion mostrecent = null; - - if (ValidTables.Any(x => x.InvariantEquals("umbracoMigration"))) - { - var allMigrations = migrationEntryService.GetAll(Constants.System.UmbracoMigrationName); - mostrecent = allMigrations.OrderByDescending(x => x.Version).Select(x => x.Version).FirstOrDefault(); - } - - return mostrecent ?? new SemVersion(new Version(0, 0, 0)); - } - - /// - /// Determines the version of the currently installed database by detecting the current database structure - /// - /// - /// A with Major and Minor values for - /// non-empty database, otherwise "0.0.0" for empty databases. - /// - public Version DetermineInstalledVersion() - { - // v8 = kill versions older than 7 - - //If (ValidTables.Count == 0) database is empty and we return -> new Version(0, 0, 0); - if (ValidTables.Count == 0) - return new Version(0, 0, 0); - - // FIXME - but the whole detection is borked really - return new Version(8, 0, 0); - - //If Errors is empty or if TableDefinitions tables + columns correspond to valid tables + columns then we're at current version - if (Errors.Any() == false || - (TableDefinitions.All(x => ValidTables.Contains(x.Name)) - && TableDefinitions.SelectMany(definition => definition.Columns).All(x => ValidColumns.Contains(x.Name)))) - return UmbracoVersion.Current; - - //If Errors contains umbracoApp or umbracoAppTree its pre-6.0.0 -> new Version(4, 10, 0); - if (Errors.Any(x => x.Item1.Equals("Table") && (x.Item2.InvariantEquals("umbracoApp") || x.Item2.InvariantEquals("umbracoAppTree")))) - { - //If Errors contains umbracoUser2app or umbracoAppTree foreignkey to umbracoApp exists its pre-4.8.0 -> new Version(4, 7, 0); - if (Errors.Any(x => - x.Item1.Equals("Constraint") - && (x.Item2.InvariantContains("umbracoUser2app_umbracoApp") - || x.Item2.InvariantContains("umbracoAppTree_umbracoApp")))) - { - return new Version(4, 7, 0); - } - - return new Version(4, 8, 0); - } - - //if the error is for umbracoServer - if (Errors.Any(x => x.Item1.Equals("Table") && (x.Item2.InvariantEquals("umbracoServer")))) - { - return new Version(6, 0, 0); - } - - //if the error indicates a problem with the column cmsMacroProperty.macroPropertyType then it is not version 7 - // since these columns get removed in v7 - if (Errors.Any(x => x.Item1.Equals("Column") && (x.Item2.InvariantEquals("cmsMacroProperty,macroPropertyType")))) - { - //if the error is for this IX_umbracoNodeTrashed which is added in 6.2 AND in 7.1 but we do not have the above columns - // then it must mean that we aren't on 6.2 so must be 6.1 - if (Errors.Any(x => x.Item1.Equals("Index") && (x.Item2.InvariantEquals("IX_umbracoNodeTrashed")))) - { - return new Version(6, 1, 0); - } - else - { - //if there are no errors for that index, then the person must have 6.2 installed - return new Version(6, 2, 0); - } - } - - //if the error indicates a problem with the constraint FK_cms-OBSOLETE-Content_cmsContentType_nodeId then it is not version 7.2 - // since this gets added in 7.2.0 so it must be the previous version - if (Errors.Any(x => x.Item1.Equals("Constraint") && (x.Item2.InvariantEquals("FK_cms-OBSOLETE-Content_cmsContentType_nodeId")))) - { - return new Version(7, 0, 0); - } - - //if the error is for umbracoAccess it must be the previous version to 7.3 since that is when it is added - if (Errors.Any(x => x.Item1.Equals("Table") && (x.Item2.InvariantEquals("umbracoAccess")))) - { - return new Version(7, 2, 0); - } - - //if the error is for cms-OBSOLETE-PropertyData.dataDecimal it must be the previous version to 7.4 since that is when it is added - if (Errors.Any(x => x.Item1.Equals("Column") && (x.Item2.InvariantEquals("cms-OBSOLETE-PropertyData,dataDecimal")))) - { - return new Version(7, 3, 0); - } - - //if the error is for umbracoRedirectUrl it must be the previous version to 7.5 since that is when it is added - if (Errors.Any(x => x.Item1.Equals("Table") && (x.Item2.InvariantEquals("umbracoRedirectUrl")))) - { - return new Version(7, 4, 0); - } - - //if the error indicates a problem with the column cmsMacroProperty.uniquePropertyId then it is not version 7.6 since that is when it is added - if (Errors.Any(x => x.Item1.Equals("Column") && (x.Item2.InvariantEquals("cmsMacroProperty,uniquePropertyId")))) - { - return new Version(7, 5, 0); - } - - //if the error is for umbracoUserGroup it must be the previous version to 7.7 since that is when it is added - if (Errors.Any(x => x.Item1.Equals("Table") && (x.Item2.InvariantEquals("umbracoUserStartNode")))) - { - return new Version(7, 6, 0); - } - - return UmbracoVersion.Current; - } - - /// - /// Gets a summary of the schema validation result - /// - /// A string containing a human readable string with a summary message - public string GetSummary() - { - var sb = new StringBuilder(); - if (Errors.Any() == false) - { - sb.AppendLine("The database schema validation didn't find any errors."); - return sb.ToString(); - } - - //Table error summary - if (Errors.Any(x => x.Item1.Equals("Table"))) - { - sb.AppendLine("The following tables were found in the database, but are not in the current schema:"); - sb.AppendLine(string.Join(",", Errors.Where(x => x.Item1.Equals("Table")).Select(x => x.Item2))); - sb.AppendLine(" "); - } - //Column error summary - if (Errors.Any(x => x.Item1.Equals("Column"))) - { - sb.AppendLine("The following columns were found in the database, but are not in the current schema:"); - sb.AppendLine(string.Join(",", Errors.Where(x => x.Item1.Equals("Column")).Select(x => x.Item2))); - sb.AppendLine(" "); - } - //Constraint error summary - if (Errors.Any(x => x.Item1.Equals("Constraint"))) - { - sb.AppendLine("The following constraints (Primary Keys, Foreign Keys and Indexes) were found in the database, but are not in the current schema:"); - sb.AppendLine(string.Join(",", Errors.Where(x => x.Item1.Equals("Constraint")).Select(x => x.Item2))); - sb.AppendLine(" "); - } - //Index error summary - if (Errors.Any(x => x.Item1.Equals("Index"))) - { - sb.AppendLine("The following indexes were found in the database, but are not in the current schema:"); - sb.AppendLine(string.Join(",", Errors.Where(x => x.Item1.Equals("Index")).Select(x => x.Item2))); - sb.AppendLine(" "); - } - //Unknown constraint error summary - if (Errors.Any(x => x.Item1.Equals("Unknown"))) - { - sb.AppendLine("The following unknown constraints (Primary Keys, Foreign Keys and Indexes) were found in the database, but are not in the current schema:"); - sb.AppendLine(string.Join(",", Errors.Where(x => x.Item1.Equals("Unknown")).Select(x => x.Item2))); - sb.AppendLine(" "); - } - - if (_sqlSyntax is MySqlSyntaxProvider) - { - sb.AppendLine("Please note that the constraints could not be validated because the current dataprovider is MySql."); - } - - return sb.ToString(); - } - } -} +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Semver; +using Umbraco.Core.Configuration; +using Umbraco.Core.Persistence.DatabaseModelDefinitions; +using Umbraco.Core.Persistence.SqlSyntax; +using Umbraco.Core.Services; + +namespace Umbraco.Core.Migrations.Install +{ + public class DatabaseSchemaResult + { + private readonly ISqlSyntaxProvider _sqlSyntax; + + public DatabaseSchemaResult(ISqlSyntaxProvider sqlSyntax) + { + _sqlSyntax = sqlSyntax; + Errors = new List>(); + TableDefinitions = new List(); + ValidTables = new List(); + ValidColumns = new List(); + ValidConstraints = new List(); + ValidIndexes = new List(); + } + + public List> Errors { get; set; } + + public List TableDefinitions { get; set; } + + public List ValidTables { get; set; } + + public List ValidColumns { get; set; } + + public List ValidConstraints { get; set; } + + public List ValidIndexes { get; set; } + + internal IEnumerable DbIndexDefinitions { get; set; } + + /// + /// Checks in the db which version is installed based on the migrations that have been run + /// + /// + /// + public SemVersion DetermineInstalledVersionByMigrations(IMigrationEntryService migrationEntryService) + { + SemVersion mostrecent = null; + + if (ValidTables.Any(x => x.InvariantEquals("umbracoMigration"))) + { + var allMigrations = migrationEntryService.GetAll(Constants.System.UmbracoMigrationName); + mostrecent = allMigrations.OrderByDescending(x => x.Version).Select(x => x.Version).FirstOrDefault(); + } + + return mostrecent ?? new SemVersion(new Version(0, 0, 0)); + } + + /// + /// Determines the version of the currently installed database by detecting the current database structure + /// + /// + /// A with Major and Minor values for + /// non-empty database, otherwise "0.0.0" for empty databases. + /// + public Version DetermineInstalledVersion() + { + // v8 = kill versions older than 7 + + //If (ValidTables.Count == 0) database is empty and we return -> new Version(0, 0, 0); + if (ValidTables.Count == 0) + return new Version(0, 0, 0); + + // FIXME - but the whole detection is borked really + return new Version(8, 0, 0); + + //If Errors is empty or if TableDefinitions tables + columns correspond to valid tables + columns then we're at current version + if (Errors.Any() == false || + (TableDefinitions.All(x => ValidTables.Contains(x.Name)) + && TableDefinitions.SelectMany(definition => definition.Columns).All(x => ValidColumns.Contains(x.Name)))) + return UmbracoVersion.Current; + + //If Errors contains umbracoApp or umbracoAppTree its pre-6.0.0 -> new Version(4, 10, 0); + if (Errors.Any(x => x.Item1.Equals("Table") && (x.Item2.InvariantEquals("umbracoApp") || x.Item2.InvariantEquals("umbracoAppTree")))) + { + //If Errors contains umbracoUser2app or umbracoAppTree foreignkey to umbracoApp exists its pre-4.8.0 -> new Version(4, 7, 0); + if (Errors.Any(x => + x.Item1.Equals("Constraint") + && (x.Item2.InvariantContains("umbracoUser2app_umbracoApp") + || x.Item2.InvariantContains("umbracoAppTree_umbracoApp")))) + { + return new Version(4, 7, 0); + } + + return new Version(4, 8, 0); + } + + //if the error is for umbracoServer + if (Errors.Any(x => x.Item1.Equals("Table") && (x.Item2.InvariantEquals("umbracoServer")))) + { + return new Version(6, 0, 0); + } + + //if the error indicates a problem with the column cmsMacroProperty.macroPropertyType then it is not version 7 + // since these columns get removed in v7 + if (Errors.Any(x => x.Item1.Equals("Column") && (x.Item2.InvariantEquals("cmsMacroProperty,macroPropertyType")))) + { + //if the error is for this IX_umbracoNodeTrashed which is added in 6.2 AND in 7.1 but we do not have the above columns + // then it must mean that we aren't on 6.2 so must be 6.1 + if (Errors.Any(x => x.Item1.Equals("Index") && (x.Item2.InvariantEquals("IX_umbracoNodeTrashed")))) + { + return new Version(6, 1, 0); + } + else + { + //if there are no errors for that index, then the person must have 6.2 installed + return new Version(6, 2, 0); + } + } + + //if the error indicates a problem with the constraint FK_cms-OBSOLETE-Content_cmsContentType_nodeId then it is not version 7.2 + // since this gets added in 7.2.0 so it must be the previous version + if (Errors.Any(x => x.Item1.Equals("Constraint") && (x.Item2.InvariantEquals("FK_cms-OBSOLETE-Content_cmsContentType_nodeId")))) + { + return new Version(7, 0, 0); + } + + //if the error is for umbracoAccess it must be the previous version to 7.3 since that is when it is added + if (Errors.Any(x => x.Item1.Equals("Table") && (x.Item2.InvariantEquals("umbracoAccess")))) + { + return new Version(7, 2, 0); + } + + //if the error is for cms-OBSOLETE-PropertyData.dataDecimal it must be the previous version to 7.4 since that is when it is added + if (Errors.Any(x => x.Item1.Equals("Column") && (x.Item2.InvariantEquals("cms-OBSOLETE-PropertyData,dataDecimal")))) + { + return new Version(7, 3, 0); + } + + //if the error is for umbracoRedirectUrl it must be the previous version to 7.5 since that is when it is added + if (Errors.Any(x => x.Item1.Equals("Table") && (x.Item2.InvariantEquals("umbracoRedirectUrl")))) + { + return new Version(7, 4, 0); + } + + //if the error indicates a problem with the column cmsMacroProperty.uniquePropertyId then it is not version 7.6 since that is when it is added + if (Errors.Any(x => x.Item1.Equals("Column") && (x.Item2.InvariantEquals("cmsMacroProperty,uniquePropertyId")))) + { + return new Version(7, 5, 0); + } + + //if the error is for umbracoUserGroup it must be the previous version to 7.7 since that is when it is added + if (Errors.Any(x => x.Item1.Equals("Table") && (x.Item2.InvariantEquals("umbracoUserStartNode")))) + { + return new Version(7, 6, 0); + } + + return UmbracoVersion.Current; + } + + /// + /// Gets a summary of the schema validation result + /// + /// A string containing a human readable string with a summary message + public string GetSummary() + { + var sb = new StringBuilder(); + if (Errors.Any() == false) + { + sb.AppendLine("The database schema validation didn't find any errors."); + return sb.ToString(); + } + + //Table error summary + if (Errors.Any(x => x.Item1.Equals("Table"))) + { + sb.AppendLine("The following tables were found in the database, but are not in the current schema:"); + sb.AppendLine(string.Join(",", Errors.Where(x => x.Item1.Equals("Table")).Select(x => x.Item2))); + sb.AppendLine(" "); + } + //Column error summary + if (Errors.Any(x => x.Item1.Equals("Column"))) + { + sb.AppendLine("The following columns were found in the database, but are not in the current schema:"); + sb.AppendLine(string.Join(",", Errors.Where(x => x.Item1.Equals("Column")).Select(x => x.Item2))); + sb.AppendLine(" "); + } + //Constraint error summary + if (Errors.Any(x => x.Item1.Equals("Constraint"))) + { + sb.AppendLine("The following constraints (Primary Keys, Foreign Keys and Indexes) were found in the database, but are not in the current schema:"); + sb.AppendLine(string.Join(",", Errors.Where(x => x.Item1.Equals("Constraint")).Select(x => x.Item2))); + sb.AppendLine(" "); + } + //Index error summary + if (Errors.Any(x => x.Item1.Equals("Index"))) + { + sb.AppendLine("The following indexes were found in the database, but are not in the current schema:"); + sb.AppendLine(string.Join(",", Errors.Where(x => x.Item1.Equals("Index")).Select(x => x.Item2))); + sb.AppendLine(" "); + } + //Unknown constraint error summary + if (Errors.Any(x => x.Item1.Equals("Unknown"))) + { + sb.AppendLine("The following unknown constraints (Primary Keys, Foreign Keys and Indexes) were found in the database, but are not in the current schema:"); + sb.AppendLine(string.Join(",", Errors.Where(x => x.Item1.Equals("Unknown")).Select(x => x.Item2))); + sb.AppendLine(" "); + } + + if (_sqlSyntax is MySqlSyntaxProvider) + { + sb.AppendLine("Please note that the constraints could not be validated because the current dataprovider is MySql."); + } + + return sb.ToString(); + } + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/LocalMigration.cs b/src/Umbraco.Core/Migrations/LocalMigration.cs similarity index 74% rename from src/Umbraco.Core/Persistence/Migrations/LocalMigration.cs rename to src/Umbraco.Core/Migrations/LocalMigration.cs index 0e15b02160..53729b3a93 100644 --- a/src/Umbraco.Core/Persistence/Migrations/LocalMigration.cs +++ b/src/Umbraco.Core/Migrations/LocalMigration.cs @@ -1,13 +1,14 @@ using System.Linq; using System.Text; using Umbraco.Core.Logging; -using Umbraco.Core.Persistence.Migrations.Syntax.Alter; -using Umbraco.Core.Persistence.Migrations.Syntax.Create; -using Umbraco.Core.Persistence.Migrations.Syntax.Delete; -using Umbraco.Core.Persistence.Migrations.Syntax.Execute; -using Umbraco.Core.Persistence.Migrations.Syntax.Update; +using Umbraco.Core.Migrations.Syntax.Alter; +using Umbraco.Core.Migrations.Syntax.Create; +using Umbraco.Core.Migrations.Syntax.Delete; +using Umbraco.Core.Migrations.Syntax.Execute; +using Umbraco.Core.Migrations.Syntax.Update; +using Umbraco.Core.Persistence; -namespace Umbraco.Core.Persistence.Migrations +namespace Umbraco.Core.Migrations { internal class LocalMigration : MigrationContext, ILocalMigration { diff --git a/src/Umbraco.Core/Persistence/Migrations/MigrationAttribute.cs b/src/Umbraco.Core/Migrations/MigrationAttribute.cs similarity index 94% rename from src/Umbraco.Core/Persistence/Migrations/MigrationAttribute.cs rename to src/Umbraco.Core/Migrations/MigrationAttribute.cs index 8fc3a06498..77b9968308 100644 --- a/src/Umbraco.Core/Persistence/Migrations/MigrationAttribute.cs +++ b/src/Umbraco.Core/Migrations/MigrationAttribute.cs @@ -1,47 +1,47 @@ -using System; - -namespace Umbraco.Core.Persistence.Migrations -{ - /// - /// Represents the Migration attribute, which is used to mark classes as - /// database migrations with Up/Down methods for pushing changes UP or pulling them DOWN. - /// - [AttributeUsage(AttributeTargets.Class, AllowMultiple = true)] - public sealed class MigrationAttribute : Attribute - { - public MigrationAttribute(string targetVersion, int sortOrder, string product) - { - TargetVersion = new Version(targetVersion); - SortOrder = sortOrder; - ProductName = product; - } - - public MigrationAttribute(string minimumCurrentVersion, string targetVersion, int sortOrder, string product) - { - TargetVersion = new Version(targetVersion); - MinimumCurrentVersion = new Version(minimumCurrentVersion); - SortOrder = sortOrder; - ProductName = product; - } - - /// - /// Gets the minimum current version for which this migration is allowed to execute - /// - public Version MinimumCurrentVersion { get; private set; } - - /// - /// Gets the target version of this migration. - /// - public Version TargetVersion { get; private set; } - - /// - /// Gets or sets the sort order, which is the order this migration will be run in. - /// - public int SortOrder { get; private set; } - - /// - /// Gets or sets the name of the product, which this migration belongs to. - /// - public string ProductName { get; set; } - } -} +using System; + +namespace Umbraco.Core.Migrations +{ + /// + /// Represents the Migration attribute, which is used to mark classes as + /// database migrations with Up/Down methods for pushing changes UP or pulling them DOWN. + /// + [AttributeUsage(AttributeTargets.Class, AllowMultiple = true)] + public sealed class MigrationAttribute : Attribute + { + public MigrationAttribute(string targetVersion, int sortOrder, string product) + { + TargetVersion = new Version(targetVersion); + SortOrder = sortOrder; + ProductName = product; + } + + public MigrationAttribute(string minimumCurrentVersion, string targetVersion, int sortOrder, string product) + { + TargetVersion = new Version(targetVersion); + MinimumCurrentVersion = new Version(minimumCurrentVersion); + SortOrder = sortOrder; + ProductName = product; + } + + /// + /// Gets the minimum current version for which this migration is allowed to execute + /// + public Version MinimumCurrentVersion { get; private set; } + + /// + /// Gets the target version of this migration. + /// + public Version TargetVersion { get; private set; } + + /// + /// Gets or sets the sort order, which is the order this migration will be run in. + /// + public int SortOrder { get; private set; } + + /// + /// Gets or sets the name of the product, which this migration belongs to. + /// + public string ProductName { get; set; } + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/MigrationBase.cs b/src/Umbraco.Core/Migrations/MigrationBase.cs similarity index 75% rename from src/Umbraco.Core/Persistence/Migrations/MigrationBase.cs rename to src/Umbraco.Core/Migrations/MigrationBase.cs index 3bceb0b544..3ef3bb27bc 100644 --- a/src/Umbraco.Core/Persistence/Migrations/MigrationBase.cs +++ b/src/Umbraco.Core/Migrations/MigrationBase.cs @@ -1,64 +1,65 @@ -using System; -using NPoco; -using Umbraco.Core.Logging; -using Umbraco.Core.Persistence.Migrations.Syntax.Alter; -using Umbraco.Core.Persistence.Migrations.Syntax.Create; -using Umbraco.Core.Persistence.Migrations.Syntax.Delete; -using Umbraco.Core.Persistence.Migrations.Syntax.Execute; -using Umbraco.Core.Persistence.Migrations.Syntax.IfDatabase; -using Umbraco.Core.Persistence.Migrations.Syntax.Insert; -using Umbraco.Core.Persistence.Migrations.Syntax.Rename; -using Umbraco.Core.Persistence.Migrations.Syntax.Update; -using Umbraco.Core.Persistence.SqlSyntax; - -namespace Umbraco.Core.Persistence.Migrations -{ - public abstract class MigrationBase : IMigration - { - public ISqlSyntaxProvider SqlSyntax => Context.SqlContext.SqlSyntax; - - public DatabaseType DatabaseType => Context.Database.DatabaseType; - - public ILogger Logger { get; } - protected IMigrationContext Context { get; } - - protected MigrationBase(IMigrationContext context) - { - Logger = context.Logger; - Context = context; - } - - public virtual void Up() - { - throw new NotSupportedException("This migration does not implement the \"up\" operation."); - } - - public virtual void Down() - { - throw new NotSupportedException("This migration does not implement the \"down\" operation."); - } - - public IAlterSyntaxBuilder Alter => new AlterSyntaxBuilder(Context); - - public ICreateBuilder Create => new CreateBuilder(Context); - - public IDeleteBuilder Delete => new DeleteBuilder(Context); - - public IExecuteBuilder Execute => new ExecuteBuilder(Context); - - public IInsertBuilder Insert => new InsertBuilder(Context); - - public IRenameBuilder Rename => new RenameBuilder(Context); - - public IUpdateBuilder Update => new UpdateBuilder(Context); - - protected Sql Sql() => Context.SqlContext.Sql(); - - protected Sql Sql(string sql, params object[] args) => Context.SqlContext.Sql(sql, args); - - public IIfDatabaseBuilder IfDatabase(params DatabaseType[] supportedDatabaseTypes) - { - return new IfDatabaseBuilder(Context, supportedDatabaseTypes); - } - } -} +using System; +using NPoco; +using Umbraco.Core.Logging; +using Umbraco.Core.Migrations.Syntax.Alter; +using Umbraco.Core.Migrations.Syntax.Create; +using Umbraco.Core.Migrations.Syntax.Delete; +using Umbraco.Core.Migrations.Syntax.Execute; +using Umbraco.Core.Migrations.Syntax.IfDatabase; +using Umbraco.Core.Migrations.Syntax.Insert; +using Umbraco.Core.Migrations.Syntax.Rename; +using Umbraco.Core.Migrations.Syntax.Update; +using Umbraco.Core.Persistence; +using Umbraco.Core.Persistence.SqlSyntax; + +namespace Umbraco.Core.Migrations +{ + public abstract class MigrationBase : IMigration + { + public ISqlSyntaxProvider SqlSyntax => Context.SqlContext.SqlSyntax; + + public DatabaseType DatabaseType => Context.Database.DatabaseType; + + public ILogger Logger { get; } + protected IMigrationContext Context { get; } + + protected MigrationBase(IMigrationContext context) + { + Logger = context.Logger; + Context = context; + } + + public virtual void Up() + { + throw new NotSupportedException("This migration does not implement the \"up\" operation."); + } + + public virtual void Down() + { + throw new NotSupportedException("This migration does not implement the \"down\" operation."); + } + + public IAlterSyntaxBuilder Alter => new AlterSyntaxBuilder(Context); + + public ICreateBuilder Create => new CreateBuilder(Context); + + public IDeleteBuilder Delete => new DeleteBuilder(Context); + + public IExecuteBuilder Execute => new ExecuteBuilder(Context); + + public IInsertBuilder Insert => new InsertBuilder(Context); + + public IRenameBuilder Rename => new RenameBuilder(Context); + + public IUpdateBuilder Update => new UpdateBuilder(Context); + + protected Sql Sql() => Context.SqlContext.Sql(); + + protected Sql Sql(string sql, params object[] args) => Context.SqlContext.Sql(sql, args); + + public IIfDatabaseBuilder IfDatabase(params DatabaseType[] supportedDatabaseTypes) + { + return new IfDatabaseBuilder(Context, supportedDatabaseTypes); + } + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/MigrationCollection.cs b/src/Umbraco.Core/Migrations/MigrationCollection.cs similarity index 85% rename from src/Umbraco.Core/Persistence/Migrations/MigrationCollection.cs rename to src/Umbraco.Core/Migrations/MigrationCollection.cs index 2650e6c8e6..bbb3c2f817 100644 --- a/src/Umbraco.Core/Persistence/Migrations/MigrationCollection.cs +++ b/src/Umbraco.Core/Migrations/MigrationCollection.cs @@ -1,7 +1,7 @@ using System.Collections.Generic; using Umbraco.Core.Composing; -namespace Umbraco.Core.Persistence.Migrations +namespace Umbraco.Core.Migrations { public class MigrationCollection : BuilderCollectionBase { diff --git a/src/Umbraco.Core/Persistence/Migrations/MigrationCollectionBuilder.cs b/src/Umbraco.Core/Migrations/MigrationCollectionBuilder.cs similarity index 97% rename from src/Umbraco.Core/Persistence/Migrations/MigrationCollectionBuilder.cs rename to src/Umbraco.Core/Migrations/MigrationCollectionBuilder.cs index daefcec6a2..b4b218c271 100644 --- a/src/Umbraco.Core/Persistence/Migrations/MigrationCollectionBuilder.cs +++ b/src/Umbraco.Core/Migrations/MigrationCollectionBuilder.cs @@ -1,7 +1,7 @@ using LightInject; using Umbraco.Core.Composing; -namespace Umbraco.Core.Persistence.Migrations +namespace Umbraco.Core.Migrations { public class MigrationCollectionBuilder : LazyCollectionBuilderBase, IMigrationCollectionBuilder { diff --git a/src/Umbraco.Core/Persistence/Migrations/MigrationContext.cs b/src/Umbraco.Core/Migrations/MigrationContext.cs similarity index 92% rename from src/Umbraco.Core/Persistence/Migrations/MigrationContext.cs rename to src/Umbraco.Core/Migrations/MigrationContext.cs index ed4f5d533e..094c2e7194 100644 --- a/src/Umbraco.Core/Persistence/Migrations/MigrationContext.cs +++ b/src/Umbraco.Core/Migrations/MigrationContext.cs @@ -1,27 +1,28 @@ -using System; -using System.Collections.Generic; -using System.Collections.ObjectModel; -using Umbraco.Core.Logging; - -namespace Umbraco.Core.Persistence.Migrations -{ - internal class MigrationContext : IMigrationContext - { - public MigrationContext(IUmbracoDatabase database, ILogger logger) - { - Expressions = new Collection(); - Database = database ?? throw new ArgumentNullException(nameof(database)); - Logger = logger ?? throw new ArgumentNullException(nameof(logger)); - } - - public ICollection Expressions { get; set; } - - public IUmbracoDatabase Database { get; } - - public ISqlContext SqlContext => Database.SqlContext; - - public ILogger Logger { get; } - - public ILocalMigration GetLocalMigration() => new LocalMigration(Database, Logger); - } -} +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using Umbraco.Core.Logging; +using Umbraco.Core.Persistence; + +namespace Umbraco.Core.Migrations +{ + internal class MigrationContext : IMigrationContext + { + public MigrationContext(IUmbracoDatabase database, ILogger logger) + { + Expressions = new Collection(); + Database = database ?? throw new ArgumentNullException(nameof(database)); + Logger = logger ?? throw new ArgumentNullException(nameof(logger)); + } + + public ICollection Expressions { get; set; } + + public IUmbracoDatabase Database { get; } + + public ISqlContext SqlContext => Database.SqlContext; + + public ILogger Logger { get; } + + public ILocalMigration GetLocalMigration() => new LocalMigration(Database, Logger); + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/MigrationExpressionBase.cs b/src/Umbraco.Core/Migrations/MigrationExpressionBase.cs similarity index 95% rename from src/Umbraco.Core/Persistence/Migrations/MigrationExpressionBase.cs rename to src/Umbraco.Core/Migrations/MigrationExpressionBase.cs index 32b4b8c87e..7fc7349130 100644 --- a/src/Umbraco.Core/Persistence/Migrations/MigrationExpressionBase.cs +++ b/src/Umbraco.Core/Migrations/MigrationExpressionBase.cs @@ -1,79 +1,79 @@ -using System; -using System.Linq; -using NPoco; -using Umbraco.Core.Persistence.SqlSyntax; - -namespace Umbraco.Core.Persistence.Migrations -{ - public abstract class MigrationExpressionBase : IMigrationExpression - { - private readonly IMigrationContext _context; - - protected MigrationExpressionBase(IMigrationContext context, DatabaseType[] supportedDatabaseTypes = null) - { - if (context == null) throw new ArgumentNullException(nameof(context)); - _context = context; - SupportedDatabaseTypes = supportedDatabaseTypes; - } - - public virtual DatabaseType[] SupportedDatabaseTypes { get; } - - public ISqlSyntaxProvider SqlSyntax => _context.Database.SqlContext.SqlSyntax; - - public virtual DatabaseType CurrentDatabaseType => _context.Database.DatabaseType; - - public bool IsExpressionSupported() - { - return SupportedDatabaseTypes == null - || SupportedDatabaseTypes.Length == 0 - // beware! - // DatabaseType.SqlServer2005 = DatabaseTypes.SqlServerDatabaseType - // DatabaseType.SqlServer2012 = DatabaseTypes.SqlServer2012DatabaseType - // with cascading inheritance, so if SqlServer2005 is "supported" we - // need to accept SqlServer2012 too => cannot simply test with "Contains" - // and have to test the types. - //|| SupportedDatabaseTypes.Contains(CurrentDatabaseType); - || SupportedDatabaseTypes.Any(x => CurrentDatabaseType.GetType().Inherits(x.GetType())); - } - - public virtual string Process(IMigrationContext context) - { - return ToString(); - } - - /// - /// This might be useful in the future if we add it to the interface, but for now it's used to hack the DeleteAppTables & DeleteForeignKeyExpression - /// to ensure they are not executed twice. - /// - internal string Name { get; set; } - - protected string GetQuotedValue(object val) - { - if (val == null) return "NULL"; - - var type = val.GetType(); - - switch (Type.GetTypeCode(type)) - { - case TypeCode.Boolean: - return ((bool)val) ? "1" : "0"; - case TypeCode.Single: - case TypeCode.Double: - case TypeCode.Decimal: - case TypeCode.SByte: - case TypeCode.Int16: - case TypeCode.Int32: - case TypeCode.Int64: - case TypeCode.Byte: - case TypeCode.UInt16: - case TypeCode.UInt32: - case TypeCode.UInt64: - return val.ToString(); - case TypeCode.DateTime: - return SqlSyntax.GetQuotedValue(SqlSyntax.FormatDateTime((DateTime) val)); - default: - return SqlSyntax.GetQuotedValue(val.ToString()); - } - } - } -} +using System; +using System.Linq; +using NPoco; +using Umbraco.Core.Persistence.SqlSyntax; + +namespace Umbraco.Core.Migrations +{ + public abstract class MigrationExpressionBase : IMigrationExpression + { + private readonly IMigrationContext _context; + + protected MigrationExpressionBase(IMigrationContext context, DatabaseType[] supportedDatabaseTypes = null) + { + if (context == null) throw new ArgumentNullException(nameof(context)); + _context = context; + SupportedDatabaseTypes = supportedDatabaseTypes; + } + + public virtual DatabaseType[] SupportedDatabaseTypes { get; } + + public ISqlSyntaxProvider SqlSyntax => _context.Database.SqlContext.SqlSyntax; + + public virtual DatabaseType CurrentDatabaseType => _context.Database.DatabaseType; + + public bool IsExpressionSupported() + { + return SupportedDatabaseTypes == null + || SupportedDatabaseTypes.Length == 0 + // beware! + // DatabaseType.SqlServer2005 = DatabaseTypes.SqlServerDatabaseType + // DatabaseType.SqlServer2012 = DatabaseTypes.SqlServer2012DatabaseType + // with cascading inheritance, so if SqlServer2005 is "supported" we + // need to accept SqlServer2012 too => cannot simply test with "Contains" + // and have to test the types. + //|| SupportedDatabaseTypes.Contains(CurrentDatabaseType); + || SupportedDatabaseTypes.Any(x => CurrentDatabaseType.GetType().Inherits(x.GetType())); + } + + public virtual string Process(IMigrationContext context) + { + return ToString(); + } + + /// + /// This might be useful in the future if we add it to the interface, but for now it's used to hack the DeleteAppTables & DeleteForeignKeyExpression + /// to ensure they are not executed twice. + /// + internal string Name { get; set; } + + protected string GetQuotedValue(object val) + { + if (val == null) return "NULL"; + + var type = val.GetType(); + + switch (Type.GetTypeCode(type)) + { + case TypeCode.Boolean: + return ((bool)val) ? "1" : "0"; + case TypeCode.Single: + case TypeCode.Double: + case TypeCode.Decimal: + case TypeCode.SByte: + case TypeCode.Int16: + case TypeCode.Int32: + case TypeCode.Int64: + case TypeCode.Byte: + case TypeCode.UInt16: + case TypeCode.UInt32: + case TypeCode.UInt64: + return val.ToString(); + case TypeCode.DateTime: + return SqlSyntax.GetQuotedValue(SqlSyntax.FormatDateTime((DateTime) val)); + default: + return SqlSyntax.GetQuotedValue(val.ToString()); + } + } + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/MigrationRunner.cs b/src/Umbraco.Core/Migrations/MigrationRunner.cs similarity index 96% rename from src/Umbraco.Core/Persistence/Migrations/MigrationRunner.cs rename to src/Umbraco.Core/Migrations/MigrationRunner.cs index 94e0dec22c..f683747ac2 100644 --- a/src/Umbraco.Core/Persistence/Migrations/MigrationRunner.cs +++ b/src/Umbraco.Core/Migrations/MigrationRunner.cs @@ -1,264 +1,258 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.IO; -using System.Linq; -using System.Text; -using log4net; -using NPoco; -using Semver; -using Umbraco.Core.Configuration; -using Umbraco.Core.Events; -using Umbraco.Core.Exceptions; -using Umbraco.Core.Logging; -using Umbraco.Core.Persistence.Migrations.Syntax.IfDatabase; -using Umbraco.Core.Persistence.SqlSyntax; -using Umbraco.Core.Services; - -namespace Umbraco.Core.Persistence.Migrations -{ - /// - /// Represents the Migration Runner, which is used to apply migrations to - /// the umbraco database. - /// - public class MigrationRunner - { - private readonly IMigrationCollectionBuilder _builder; - private readonly IMigrationEntryService _migrationEntryService; - private readonly ILogger _logger; - private readonly SemVersion _currentVersion; - private readonly SemVersion _targetVersion; - private readonly string _productName; - private readonly IMigration[] _migrations; - - public MigrationRunner(IMigrationCollectionBuilder builder, IMigrationEntryService migrationEntryService, ILogger logger, SemVersion currentVersion, SemVersion targetVersion, string productName, params IMigration[] migrations) - { - if (string.IsNullOrWhiteSpace(productName)) throw new ArgumentNullOrEmptyException(nameof(productName)); - - _builder = builder ?? throw new ArgumentNullException(nameof(builder)); - _migrationEntryService = migrationEntryService ?? throw new ArgumentNullException(nameof(migrationEntryService)); - _logger = logger ?? throw new ArgumentNullException(nameof(logger)); - _currentVersion = currentVersion ?? throw new ArgumentNullException(nameof(currentVersion)); - _targetVersion = targetVersion ?? throw new ArgumentNullException(nameof(targetVersion)); - _productName = productName; - //ensure this is null if there aren't any - _migrations = migrations == null || migrations.Length == 0 ? null : migrations; - } - - /// - /// Executes the migrations against the database. - /// - /// The migration context to execute migrations with - /// Boolean indicating whether this is an upgrade or downgrade - /// True if migrations were applied, otherwise False - public bool Execute(IMigrationContext migrationContext, bool isUpgrade = true) - { - _logger.Info("Initializing database migrations"); - - var foundMigrations = FindMigrations(migrationContext); - - //filter all non-schema migrations - var migrations = isUpgrade - ? OrderedUpgradeMigrations(foundMigrations).ToList() - : OrderedDowngradeMigrations(foundMigrations).ToList(); - - - if (Migrating.IsRaisedEventCancelled(new MigrationEventArgs(migrations, _currentVersion, _targetVersion, _productName, true), this)) - { - _logger.Warn("Migration was cancelled by an event"); - return false; - } - - //Loop through migrations to generate sql - InitializeMigrations(migrations, isUpgrade); - - try - { - ExecuteMigrations(migrationContext); - } - catch (Exception ex) - { - //if this fails then the transaction will be rolled back, BUT if we are using MySql this is not the case, - //since it does not support schema changes in a transaction, see: http://dev.mysql.com/doc/refman/5.0/en/implicit-commit.html - //so in that case we have to downgrade - if (migrationContext.Database.DatabaseType is NPoco.DatabaseTypes.MySqlDatabaseType) - { - throw new DataLossException( - "An error occurred running a schema migration but the changes could not be rolled back. Error: " + ex.Message + ". In some cases, it may be required that the database be restored to it's original state before running this upgrade process again.", - ex); - } - - //continue throwing the exception - throw; - } - - Migrated.RaiseEvent(new MigrationEventArgs(migrations, migrationContext, _currentVersion, _targetVersion, _productName, false), this); - - return true; - } - - /// - /// Filters and orders migrations based on the migrations listed and the currently configured version and the target installation version - /// - /// - /// - public IEnumerable OrderedUpgradeMigrations(IEnumerable foundMigrations) - { - //get the version instance to compare with the migrations, this will be a normal c# Version object with only 3 parts - var targetVersionToCompare = _targetVersion.GetVersion(3); - var currentVersionToCompare = _currentVersion.GetVersion(3); - - var migrations = (from migration in foundMigrations - let migrationAttributes = migration.GetType().GetCustomAttributes(false) - from migrationAttribute in migrationAttributes - where migrationAttribute != null - where migrationAttribute.TargetVersion > currentVersionToCompare && - migrationAttribute.TargetVersion <= targetVersionToCompare && - migrationAttribute.ProductName == _productName && - //filter if the migration specifies a minimum current version for which to execute - (migrationAttribute.MinimumCurrentVersion == null || currentVersionToCompare >= migrationAttribute.MinimumCurrentVersion) - orderby migrationAttribute.TargetVersion, migrationAttribute.SortOrder ascending - select migration).Distinct(); - return migrations; - } - - /// - /// Filters and orders migrations based on the migrations listed and the currently configured version and the target installation version - /// - /// - /// - public IEnumerable OrderedDowngradeMigrations(IEnumerable foundMigrations) - { - //get the version instance to compare with the migrations, this will be a normal c# Version object with only 3 parts - var targetVersionToCompare = _targetVersion.GetVersion(3); - var currentVersionToCompare = _currentVersion.GetVersion(3); - - var migrations = (from migration in foundMigrations - let migrationAttributes = migration.GetType().GetCustomAttributes(false) - from migrationAttribute in migrationAttributes - where migrationAttribute != null - where - migrationAttribute.TargetVersion > currentVersionToCompare && - migrationAttribute.TargetVersion <= targetVersionToCompare && - migrationAttribute.ProductName == _productName && - //filter if the migration specifies a minimum current version for which to execute - (migrationAttribute.MinimumCurrentVersion == null || currentVersionToCompare >= migrationAttribute.MinimumCurrentVersion) - orderby migrationAttribute.TargetVersion, migrationAttribute.SortOrder descending - select migration).Distinct(); - return migrations; - } - - /// - /// Find all migrations that are available through the - /// - /// An array of - protected IMigration[] FindMigrations(IMigrationContext context) - { - //MCH NOTE: Consider adding the ProductName filter to the Resolver so we don't get a bunch of irrelevant migrations - return _migrations ?? _builder.CreateCollection(context).ToArray(); - } - - internal void InitializeMigrations( - List migrations, - bool isUpgrade = true) - { - foreach (var migration in migrations) - { - if (isUpgrade) - { - migration.Up(); - _logger.Info($"Added UPGRADE migration '{migration.GetType().Name}' to context"); - } - else - { - migration.Down(); - _logger.Info($"Added DOWNGRADE migration '{migration.GetType().Name}' to context"); - } - } - - } - - private void ExecuteMigrations(IMigrationContext context) - { - //Transactional execution of the sql that was generated from the found migrations - using (var transaction = context.Database.GetTransaction()) - { - int i = 1; - foreach (var expression in context.Expressions) - { - var sql = expression.Process(context); - if (string.IsNullOrEmpty(sql)) - { - i++; - continue; - } - - //TODO: We should output all of these SQL calls to files in a migration folder in App_Data/TEMP - // so if people want to executed them manually on another environment, they can. - - //The following ensures the multiple statement sare executed one at a time, this is a requirement - // of SQLCE, it's unfortunate but necessary. - // http://stackoverflow.com/questions/13665491/sql-ce-inconsistent-with-multiple-statements - var sb = new StringBuilder(); - using (var reader = new StringReader(sql)) - { - string line; - while ((line = reader.ReadLine()) != null) - { - line = line.Trim(); - if (line.Equals("GO", StringComparison.OrdinalIgnoreCase)) - { - //Execute the SQL up to the point of a GO statement - var exeSql = sb.ToString(); - _logger.Info("Executing sql statement " + i + ": " + exeSql); - Console.WriteLine("EXEC: " + exeSql); - context.Database.Execute(exeSql); - - //restart the string builder - sb.Remove(0, sb.Length); - } - else - { - sb.AppendLine(line); - } - } - //execute anything remaining - if (sb.Length > 0) - { - var exeSql = sb.ToString(); - _logger.Info("Executing sql statement " + i + ": " + exeSql); - Console.WriteLine("EXEC: " + exeSql); - context.Database.Execute(exeSql); - } - } - - i++; - } - - transaction.Complete(); - - //Now that this is all complete, we need to add an entry to the migrations table flagging that migrations - // for this version have executed. - //NOTE: We CANNOT do this as part of the transaction!!! This is because when upgrading to 7.3, we cannot - // create the migrations table and then add data to it in the same transaction without issuing things like GO - // commands and since we need to support all Dbs, we need to just do this after the fact. - var exists = _migrationEntryService.FindEntry(_productName, _targetVersion); - if (exists == null) - { - _migrationEntryService.CreateEntry(_productName, _targetVersion); - } - - } - } - - /// - /// Occurs before Migration - /// - public static event TypedEventHandler Migrating; - - /// - /// Occurs after Migration - /// - public static event TypedEventHandler Migrated; - } -} +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using Semver; +using Umbraco.Core.Events; +using Umbraco.Core.Exceptions; +using Umbraco.Core.Logging; +using Umbraco.Core.Services; + +namespace Umbraco.Core.Migrations +{ + /// + /// Represents the Migration Runner, which is used to apply migrations to + /// the umbraco database. + /// + public class MigrationRunner + { + private readonly IMigrationCollectionBuilder _builder; + private readonly IMigrationEntryService _migrationEntryService; + private readonly ILogger _logger; + private readonly SemVersion _currentVersion; + private readonly SemVersion _targetVersion; + private readonly string _productName; + private readonly IMigration[] _migrations; + + public MigrationRunner(IMigrationCollectionBuilder builder, IMigrationEntryService migrationEntryService, ILogger logger, SemVersion currentVersion, SemVersion targetVersion, string productName, params IMigration[] migrations) + { + if (string.IsNullOrWhiteSpace(productName)) throw new ArgumentNullOrEmptyException(nameof(productName)); + + _builder = builder ?? throw new ArgumentNullException(nameof(builder)); + _migrationEntryService = migrationEntryService ?? throw new ArgumentNullException(nameof(migrationEntryService)); + _logger = logger ?? throw new ArgumentNullException(nameof(logger)); + _currentVersion = currentVersion ?? throw new ArgumentNullException(nameof(currentVersion)); + _targetVersion = targetVersion ?? throw new ArgumentNullException(nameof(targetVersion)); + _productName = productName; + //ensure this is null if there aren't any + _migrations = migrations == null || migrations.Length == 0 ? null : migrations; + } + + /// + /// Executes the migrations against the database. + /// + /// The migration context to execute migrations with + /// Boolean indicating whether this is an upgrade or downgrade + /// True if migrations were applied, otherwise False + public bool Execute(IMigrationContext migrationContext, bool isUpgrade = true) + { + _logger.Info("Initializing database migrations"); + + var foundMigrations = FindMigrations(migrationContext); + + //filter all non-schema migrations + var migrations = isUpgrade + ? OrderedUpgradeMigrations(foundMigrations).ToList() + : OrderedDowngradeMigrations(foundMigrations).ToList(); + + + if (Migrating.IsRaisedEventCancelled(new MigrationEventArgs(migrations, _currentVersion, _targetVersion, _productName, true), this)) + { + _logger.Warn("Migration was cancelled by an event"); + return false; + } + + //Loop through migrations to generate sql + InitializeMigrations(migrations, isUpgrade); + + try + { + ExecuteMigrations(migrationContext); + } + catch (Exception ex) + { + //if this fails then the transaction will be rolled back, BUT if we are using MySql this is not the case, + //since it does not support schema changes in a transaction, see: http://dev.mysql.com/doc/refman/5.0/en/implicit-commit.html + //so in that case we have to downgrade + if (migrationContext.Database.DatabaseType is NPoco.DatabaseTypes.MySqlDatabaseType) + { + throw new DataLossException( + "An error occurred running a schema migration but the changes could not be rolled back. Error: " + ex.Message + ". In some cases, it may be required that the database be restored to it's original state before running this upgrade process again.", + ex); + } + + //continue throwing the exception + throw; + } + + Migrated.RaiseEvent(new MigrationEventArgs(migrations, migrationContext, _currentVersion, _targetVersion, _productName, false), this); + + return true; + } + + /// + /// Filters and orders migrations based on the migrations listed and the currently configured version and the target installation version + /// + /// + /// + public IEnumerable OrderedUpgradeMigrations(IEnumerable foundMigrations) + { + //get the version instance to compare with the migrations, this will be a normal c# Version object with only 3 parts + var targetVersionToCompare = _targetVersion.GetVersion(3); + var currentVersionToCompare = _currentVersion.GetVersion(3); + + var migrations = (from migration in foundMigrations + let migrationAttributes = migration.GetType().GetCustomAttributes(false) + from migrationAttribute in migrationAttributes + where migrationAttribute != null + where migrationAttribute.TargetVersion > currentVersionToCompare && + migrationAttribute.TargetVersion <= targetVersionToCompare && + migrationAttribute.ProductName == _productName && + //filter if the migration specifies a minimum current version for which to execute + (migrationAttribute.MinimumCurrentVersion == null || currentVersionToCompare >= migrationAttribute.MinimumCurrentVersion) + orderby migrationAttribute.TargetVersion, migrationAttribute.SortOrder ascending + select migration).Distinct(); + return migrations; + } + + /// + /// Filters and orders migrations based on the migrations listed and the currently configured version and the target installation version + /// + /// + /// + public IEnumerable OrderedDowngradeMigrations(IEnumerable foundMigrations) + { + //get the version instance to compare with the migrations, this will be a normal c# Version object with only 3 parts + var targetVersionToCompare = _targetVersion.GetVersion(3); + var currentVersionToCompare = _currentVersion.GetVersion(3); + + var migrations = (from migration in foundMigrations + let migrationAttributes = migration.GetType().GetCustomAttributes(false) + from migrationAttribute in migrationAttributes + where migrationAttribute != null + where + migrationAttribute.TargetVersion > currentVersionToCompare && + migrationAttribute.TargetVersion <= targetVersionToCompare && + migrationAttribute.ProductName == _productName && + //filter if the migration specifies a minimum current version for which to execute + (migrationAttribute.MinimumCurrentVersion == null || currentVersionToCompare >= migrationAttribute.MinimumCurrentVersion) + orderby migrationAttribute.TargetVersion, migrationAttribute.SortOrder descending + select migration).Distinct(); + return migrations; + } + + /// + /// Find all migrations that are available through the + /// + /// An array of + protected IMigration[] FindMigrations(IMigrationContext context) + { + //MCH NOTE: Consider adding the ProductName filter to the Resolver so we don't get a bunch of irrelevant migrations + return _migrations ?? _builder.CreateCollection(context).ToArray(); + } + + internal void InitializeMigrations( + List migrations, + bool isUpgrade = true) + { + foreach (var migration in migrations) + { + if (isUpgrade) + { + migration.Up(); + _logger.Info($"Added UPGRADE migration '{migration.GetType().Name}' to context"); + } + else + { + migration.Down(); + _logger.Info($"Added DOWNGRADE migration '{migration.GetType().Name}' to context"); + } + } + + } + + private void ExecuteMigrations(IMigrationContext context) + { + //Transactional execution of the sql that was generated from the found migrations + using (var transaction = context.Database.GetTransaction()) + { + int i = 1; + foreach (var expression in context.Expressions) + { + var sql = expression.Process(context); + if (string.IsNullOrEmpty(sql)) + { + i++; + continue; + } + + //TODO: We should output all of these SQL calls to files in a migration folder in App_Data/TEMP + // so if people want to executed them manually on another environment, they can. + + //The following ensures the multiple statement sare executed one at a time, this is a requirement + // of SQLCE, it's unfortunate but necessary. + // http://stackoverflow.com/questions/13665491/sql-ce-inconsistent-with-multiple-statements + var sb = new StringBuilder(); + using (var reader = new StringReader(sql)) + { + string line; + while ((line = reader.ReadLine()) != null) + { + line = line.Trim(); + if (line.Equals("GO", StringComparison.OrdinalIgnoreCase)) + { + //Execute the SQL up to the point of a GO statement + var exeSql = sb.ToString(); + _logger.Info("Executing sql statement " + i + ": " + exeSql); + Console.WriteLine("EXEC: " + exeSql); + context.Database.Execute(exeSql); + + //restart the string builder + sb.Remove(0, sb.Length); + } + else + { + sb.AppendLine(line); + } + } + //execute anything remaining + if (sb.Length > 0) + { + var exeSql = sb.ToString(); + _logger.Info("Executing sql statement " + i + ": " + exeSql); + Console.WriteLine("EXEC: " + exeSql); + context.Database.Execute(exeSql); + } + } + + i++; + } + + transaction.Complete(); + + //Now that this is all complete, we need to add an entry to the migrations table flagging that migrations + // for this version have executed. + //NOTE: We CANNOT do this as part of the transaction!!! This is because when upgrading to 7.3, we cannot + // create the migrations table and then add data to it in the same transaction without issuing things like GO + // commands and since we need to support all Dbs, we need to just do this after the fact. + var exists = _migrationEntryService.FindEntry(_productName, _targetVersion); + if (exists == null) + { + _migrationEntryService.CreateEntry(_productName, _targetVersion); + } + + } + } + + /// + /// Occurs before Migration + /// + public static event TypedEventHandler Migrating; + + /// + /// Occurs after Migration + /// + public static event TypedEventHandler Migrated; + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Alter/AlterSyntaxBuilder.cs b/src/Umbraco.Core/Migrations/Syntax/Alter/AlterSyntaxBuilder.cs similarity index 85% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Alter/AlterSyntaxBuilder.cs rename to src/Umbraco.Core/Migrations/Syntax/Alter/AlterSyntaxBuilder.cs index 32665a4586..b8442c17f8 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Alter/AlterSyntaxBuilder.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Alter/AlterSyntaxBuilder.cs @@ -1,43 +1,43 @@ -using System; -using NPoco; -using Umbraco.Core.Persistence.Migrations.Syntax.Alter.Column; -using Umbraco.Core.Persistence.Migrations.Syntax.Alter.Expressions; -using Umbraco.Core.Persistence.Migrations.Syntax.Alter.Table; - -namespace Umbraco.Core.Persistence.Migrations.Syntax.Alter -{ - public class AlterSyntaxBuilder : IAlterSyntaxBuilder - { - private readonly IMigrationContext _context; - private readonly DatabaseType[] _supportedDatabaseTypes; - - public AlterSyntaxBuilder(IMigrationContext context, params DatabaseType[] supportedDatabaseTypes) - { - _context = context; - _supportedDatabaseTypes = supportedDatabaseTypes; - } - - public IAlterTableSyntax Table(string tableName) - { - var expression = new AlterTableExpression(_context, _supportedDatabaseTypes) { TableName = tableName }; - //_context.Expressions.Add(expression); - return new AlterTableBuilder(_context, _supportedDatabaseTypes, expression); - } - - /// - /// The problem with this is that only under particular circumstances is the expression added to the context - /// so you wouldn't actually know if you are using it correctly or not and chances are you are not and therefore - /// the statement won't even execute whereas using the IAlterTableSyntax to modify a column is guaranteed to add - /// the expression to the context. - /// - /// - /// - [Obsolete("Use the IAlterTableSyntax to modify a column instead, this will be removed in future versions")] - public IAlterColumnSyntax Column(string columnName) - { - var expression = new AlterColumnExpression(_context, _supportedDatabaseTypes) {Column = {Name = columnName}}; - //_context.Expressions.Add(expression); - return new AlterColumnBuilder(_context, _supportedDatabaseTypes, expression); - } - } -} +using System; +using NPoco; +using Umbraco.Core.Migrations.Syntax.Alter.Column; +using Umbraco.Core.Migrations.Syntax.Alter.Expressions; +using Umbraco.Core.Migrations.Syntax.Alter.Table; + +namespace Umbraco.Core.Migrations.Syntax.Alter +{ + public class AlterSyntaxBuilder : IAlterSyntaxBuilder + { + private readonly IMigrationContext _context; + private readonly DatabaseType[] _supportedDatabaseTypes; + + public AlterSyntaxBuilder(IMigrationContext context, params DatabaseType[] supportedDatabaseTypes) + { + _context = context; + _supportedDatabaseTypes = supportedDatabaseTypes; + } + + public IAlterTableSyntax Table(string tableName) + { + var expression = new AlterTableExpression(_context, _supportedDatabaseTypes) { TableName = tableName }; + //_context.Expressions.Add(expression); + return new AlterTableBuilder(_context, _supportedDatabaseTypes, expression); + } + + /// + /// The problem with this is that only under particular circumstances is the expression added to the context + /// so you wouldn't actually know if you are using it correctly or not and chances are you are not and therefore + /// the statement won't even execute whereas using the IAlterTableSyntax to modify a column is guaranteed to add + /// the expression to the context. + /// + /// + /// + [Obsolete("Use the IAlterTableSyntax to modify a column instead, this will be removed in future versions")] + public IAlterColumnSyntax Column(string columnName) + { + var expression = new AlterColumnExpression(_context, _supportedDatabaseTypes) {Column = {Name = columnName}}; + //_context.Expressions.Add(expression); + return new AlterColumnBuilder(_context, _supportedDatabaseTypes, expression); + } + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Alter/Column/AlterColumnBuilder.cs b/src/Umbraco.Core/Migrations/Syntax/Alter/Column/AlterColumnBuilder.cs similarity index 94% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Alter/Column/AlterColumnBuilder.cs rename to src/Umbraco.Core/Migrations/Syntax/Alter/Column/AlterColumnBuilder.cs index be3264db98..d1c8e009ab 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Alter/Column/AlterColumnBuilder.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Alter/Column/AlterColumnBuilder.cs @@ -1,246 +1,245 @@ -using System.Data; -using NPoco; -using Umbraco.Core.Persistence.DatabaseModelDefinitions; -using Umbraco.Core.Persistence.Migrations.Syntax.Alter.Expressions; -using Umbraco.Core.Persistence.Migrations.Syntax.Expressions; -using Umbraco.Core.Persistence.SqlSyntax; - -namespace Umbraco.Core.Persistence.Migrations.Syntax.Alter.Column -{ - public class AlterColumnBuilder : ExpressionBuilder, - IAlterColumnSyntax, - IAlterColumnTypeSyntax, - IAlterColumnOptionForeignKeyCascadeSyntax - { - private readonly IMigrationContext _context; - private readonly DatabaseType[] _supportedDatabaseTypes; - - public AlterColumnBuilder(IMigrationContext context, DatabaseType[] supportedDatabaseTypes, AlterColumnExpression expression) - : base(expression) - { - _context = context; - _supportedDatabaseTypes = supportedDatabaseTypes; - } - - public ForeignKeyDefinition CurrentForeignKey { get; set; } - - public override ColumnDefinition GetColumnForType() - { - return Expression.Column; - } - - public IAlterColumnTypeSyntax OnTable(string name) - { - Expression.TableName = name; - return this; - } - - public IAlterColumnOptionSyntax WithDefault(SystemMethods method) - { - var dc = new AlterDefaultConstraintExpression(_context, _supportedDatabaseTypes) - { - TableName = Expression.TableName, - SchemaName = Expression.SchemaName, - ColumnName = Expression.Column.Name, - DefaultValue = method - }; - - _context.Expressions.Add(dc); - - Expression.Column.DefaultValue = method; - - return this; - } - - - public IAlterColumnOptionSyntax WithDefaultValue(object value) - { - var dc = new AlterDefaultConstraintExpression(_context, _supportedDatabaseTypes) - { - TableName = Expression.TableName, - SchemaName = Expression.SchemaName, - ColumnName = Expression.Column.Name, - DefaultValue = value - }; - - _context.Expressions.Add(dc); - - Expression.Column.DefaultValue = value; - - return this; - } - - public IAlterColumnOptionSyntax Identity() - { - Expression.Column.IsIdentity = true; - return this; - } - - public IAlterColumnOptionSyntax Indexed() - { - return Indexed(null); - } - - public IAlterColumnOptionSyntax Indexed(string indexName) - { - Expression.Column.IsIndexed = true; - - var index = new CreateIndexExpression(_context, _supportedDatabaseTypes, new IndexDefinition - { - Name = indexName, - SchemaName = Expression.SchemaName, - TableName = Expression.TableName - }); - - index.Index.Columns.Add(new IndexColumnDefinition - { - Name = Expression.Column.Name - }); - - _context.Expressions.Add(index); - - return this; - } - - public IAlterColumnOptionSyntax PrimaryKey() - { - Expression.Column.IsPrimaryKey = true; - return this; - } - - public IAlterColumnOptionSyntax PrimaryKey(string primaryKeyName) - { - Expression.Column.IsPrimaryKey = true; - Expression.Column.PrimaryKeyName = primaryKeyName; - return this; - } - - public IAlterColumnOptionSyntax Nullable() - { - Expression.Column.IsNullable = true; - return this; - } - - public IAlterColumnOptionSyntax NotNullable() - { - Expression.Column.IsNullable = false; - return this; - } - - public IAlterColumnOptionSyntax Unique() - { - return Unique(null); - } - - public IAlterColumnOptionSyntax Unique(string indexName) - { - Expression.Column.IsUnique = true; - - var index = new CreateIndexExpression(_context, _supportedDatabaseTypes, new IndexDefinition - { - Name = indexName, - SchemaName = Expression.SchemaName, - TableName = Expression.TableName, - IsUnique = true - }); - - index.Index.Columns.Add(new IndexColumnDefinition - { - Name = Expression.Column.Name - }); - - _context.Expressions.Add(index); - - return this; - } - - public IAlterColumnOptionForeignKeyCascadeSyntax ForeignKey(string primaryTableName, string primaryColumnName) - { - return ForeignKey(null, null, primaryTableName, primaryColumnName); - } - - public IAlterColumnOptionForeignKeyCascadeSyntax ForeignKey(string foreignKeyName, string primaryTableName, - string primaryColumnName) - { - return ForeignKey(foreignKeyName, null, primaryTableName, primaryColumnName); - } - - public IAlterColumnOptionForeignKeyCascadeSyntax ForeignKey(string foreignKeyName, string primaryTableSchema, - string primaryTableName, string primaryColumnName) - { - Expression.Column.IsForeignKey = true; - - var fk = new CreateForeignKeyExpression(_context, _supportedDatabaseTypes, new ForeignKeyDefinition - { - Name = foreignKeyName, - PrimaryTable = primaryTableName, - PrimaryTableSchema = primaryTableSchema, - ForeignTable = Expression.TableName, - ForeignTableSchema = Expression.SchemaName - }); - - fk.ForeignKey.PrimaryColumns.Add(primaryColumnName); - fk.ForeignKey.ForeignColumns.Add(Expression.Column.Name); - - _context.Expressions.Add(fk); - CurrentForeignKey = fk.ForeignKey; - return this; - } - - public IAlterColumnOptionForeignKeyCascadeSyntax ForeignKey() - { - Expression.Column.IsForeignKey = true; - return this; - } - - public IAlterColumnOptionForeignKeyCascadeSyntax ReferencedBy(string foreignTableName, string foreignColumnName) - { - return ReferencedBy(null, null, foreignTableName, foreignColumnName); - } - - public IAlterColumnOptionForeignKeyCascadeSyntax ReferencedBy(string foreignKeyName, string foreignTableName, - string foreignColumnName) - { - return ReferencedBy(foreignKeyName, null, foreignTableName, foreignColumnName); - } - - public IAlterColumnOptionForeignKeyCascadeSyntax ReferencedBy(string foreignKeyName, string foreignTableSchema, - string foreignTableName, string foreignColumnName) - { - var fk = new CreateForeignKeyExpression(_context, _supportedDatabaseTypes, new ForeignKeyDefinition - { - Name = foreignKeyName, - PrimaryTable = Expression.TableName, - PrimaryTableSchema = Expression.SchemaName, - ForeignTable = foreignTableName, - ForeignTableSchema = foreignTableSchema - }); - - fk.ForeignKey.PrimaryColumns.Add(Expression.Column.Name); - fk.ForeignKey.ForeignColumns.Add(foreignColumnName); - - _context.Expressions.Add(fk); - CurrentForeignKey = fk.ForeignKey; - return this; - } - - public IAlterColumnOptionForeignKeyCascadeSyntax OnDelete(Rule rule) - { - CurrentForeignKey.OnDelete = rule; - return this; - } - - public IAlterColumnOptionForeignKeyCascadeSyntax OnUpdate(Rule rule) - { - CurrentForeignKey.OnUpdate = rule; - return this; - } - - public IAlterColumnOptionSyntax OnDeleteOrUpdate(Rule rule) - { - OnDelete(rule); - OnUpdate(rule); - return this; - } - } -} +using System.Data; +using NPoco; +using Umbraco.Core.Migrations.Syntax.Alter.Expressions; +using Umbraco.Core.Migrations.Syntax.Expressions; +using Umbraco.Core.Persistence.DatabaseModelDefinitions; + +namespace Umbraco.Core.Migrations.Syntax.Alter.Column +{ + public class AlterColumnBuilder : ExpressionBuilder, + IAlterColumnSyntax, + IAlterColumnTypeSyntax, + IAlterColumnOptionForeignKeyCascadeSyntax + { + private readonly IMigrationContext _context; + private readonly DatabaseType[] _supportedDatabaseTypes; + + public AlterColumnBuilder(IMigrationContext context, DatabaseType[] supportedDatabaseTypes, AlterColumnExpression expression) + : base(expression) + { + _context = context; + _supportedDatabaseTypes = supportedDatabaseTypes; + } + + public ForeignKeyDefinition CurrentForeignKey { get; set; } + + public override ColumnDefinition GetColumnForType() + { + return Expression.Column; + } + + public IAlterColumnTypeSyntax OnTable(string name) + { + Expression.TableName = name; + return this; + } + + public IAlterColumnOptionSyntax WithDefault(SystemMethods method) + { + var dc = new AlterDefaultConstraintExpression(_context, _supportedDatabaseTypes) + { + TableName = Expression.TableName, + SchemaName = Expression.SchemaName, + ColumnName = Expression.Column.Name, + DefaultValue = method + }; + + _context.Expressions.Add(dc); + + Expression.Column.DefaultValue = method; + + return this; + } + + + public IAlterColumnOptionSyntax WithDefaultValue(object value) + { + var dc = new AlterDefaultConstraintExpression(_context, _supportedDatabaseTypes) + { + TableName = Expression.TableName, + SchemaName = Expression.SchemaName, + ColumnName = Expression.Column.Name, + DefaultValue = value + }; + + _context.Expressions.Add(dc); + + Expression.Column.DefaultValue = value; + + return this; + } + + public IAlterColumnOptionSyntax Identity() + { + Expression.Column.IsIdentity = true; + return this; + } + + public IAlterColumnOptionSyntax Indexed() + { + return Indexed(null); + } + + public IAlterColumnOptionSyntax Indexed(string indexName) + { + Expression.Column.IsIndexed = true; + + var index = new CreateIndexExpression(_context, _supportedDatabaseTypes, new IndexDefinition + { + Name = indexName, + SchemaName = Expression.SchemaName, + TableName = Expression.TableName + }); + + index.Index.Columns.Add(new IndexColumnDefinition + { + Name = Expression.Column.Name + }); + + _context.Expressions.Add(index); + + return this; + } + + public IAlterColumnOptionSyntax PrimaryKey() + { + Expression.Column.IsPrimaryKey = true; + return this; + } + + public IAlterColumnOptionSyntax PrimaryKey(string primaryKeyName) + { + Expression.Column.IsPrimaryKey = true; + Expression.Column.PrimaryKeyName = primaryKeyName; + return this; + } + + public IAlterColumnOptionSyntax Nullable() + { + Expression.Column.IsNullable = true; + return this; + } + + public IAlterColumnOptionSyntax NotNullable() + { + Expression.Column.IsNullable = false; + return this; + } + + public IAlterColumnOptionSyntax Unique() + { + return Unique(null); + } + + public IAlterColumnOptionSyntax Unique(string indexName) + { + Expression.Column.IsUnique = true; + + var index = new CreateIndexExpression(_context, _supportedDatabaseTypes, new IndexDefinition + { + Name = indexName, + SchemaName = Expression.SchemaName, + TableName = Expression.TableName, + IsUnique = true + }); + + index.Index.Columns.Add(new IndexColumnDefinition + { + Name = Expression.Column.Name + }); + + _context.Expressions.Add(index); + + return this; + } + + public IAlterColumnOptionForeignKeyCascadeSyntax ForeignKey(string primaryTableName, string primaryColumnName) + { + return ForeignKey(null, null, primaryTableName, primaryColumnName); + } + + public IAlterColumnOptionForeignKeyCascadeSyntax ForeignKey(string foreignKeyName, string primaryTableName, + string primaryColumnName) + { + return ForeignKey(foreignKeyName, null, primaryTableName, primaryColumnName); + } + + public IAlterColumnOptionForeignKeyCascadeSyntax ForeignKey(string foreignKeyName, string primaryTableSchema, + string primaryTableName, string primaryColumnName) + { + Expression.Column.IsForeignKey = true; + + var fk = new CreateForeignKeyExpression(_context, _supportedDatabaseTypes, new ForeignKeyDefinition + { + Name = foreignKeyName, + PrimaryTable = primaryTableName, + PrimaryTableSchema = primaryTableSchema, + ForeignTable = Expression.TableName, + ForeignTableSchema = Expression.SchemaName + }); + + fk.ForeignKey.PrimaryColumns.Add(primaryColumnName); + fk.ForeignKey.ForeignColumns.Add(Expression.Column.Name); + + _context.Expressions.Add(fk); + CurrentForeignKey = fk.ForeignKey; + return this; + } + + public IAlterColumnOptionForeignKeyCascadeSyntax ForeignKey() + { + Expression.Column.IsForeignKey = true; + return this; + } + + public IAlterColumnOptionForeignKeyCascadeSyntax ReferencedBy(string foreignTableName, string foreignColumnName) + { + return ReferencedBy(null, null, foreignTableName, foreignColumnName); + } + + public IAlterColumnOptionForeignKeyCascadeSyntax ReferencedBy(string foreignKeyName, string foreignTableName, + string foreignColumnName) + { + return ReferencedBy(foreignKeyName, null, foreignTableName, foreignColumnName); + } + + public IAlterColumnOptionForeignKeyCascadeSyntax ReferencedBy(string foreignKeyName, string foreignTableSchema, + string foreignTableName, string foreignColumnName) + { + var fk = new CreateForeignKeyExpression(_context, _supportedDatabaseTypes, new ForeignKeyDefinition + { + Name = foreignKeyName, + PrimaryTable = Expression.TableName, + PrimaryTableSchema = Expression.SchemaName, + ForeignTable = foreignTableName, + ForeignTableSchema = foreignTableSchema + }); + + fk.ForeignKey.PrimaryColumns.Add(Expression.Column.Name); + fk.ForeignKey.ForeignColumns.Add(foreignColumnName); + + _context.Expressions.Add(fk); + CurrentForeignKey = fk.ForeignKey; + return this; + } + + public IAlterColumnOptionForeignKeyCascadeSyntax OnDelete(Rule rule) + { + CurrentForeignKey.OnDelete = rule; + return this; + } + + public IAlterColumnOptionForeignKeyCascadeSyntax OnUpdate(Rule rule) + { + CurrentForeignKey.OnUpdate = rule; + return this; + } + + public IAlterColumnOptionSyntax OnDeleteOrUpdate(Rule rule) + { + OnDelete(rule); + OnUpdate(rule); + return this; + } + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Alter/Column/IAlterColumnOptionForeignKeyCascadeSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Alter/Column/IAlterColumnOptionForeignKeyCascadeSyntax.cs similarity index 73% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Alter/Column/IAlterColumnOptionForeignKeyCascadeSyntax.cs rename to src/Umbraco.Core/Migrations/Syntax/Alter/Column/IAlterColumnOptionForeignKeyCascadeSyntax.cs index 361cd07374..ae26b9fd1e 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Alter/Column/IAlterColumnOptionForeignKeyCascadeSyntax.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Alter/Column/IAlterColumnOptionForeignKeyCascadeSyntax.cs @@ -1,9 +1,9 @@ -namespace Umbraco.Core.Persistence.Migrations.Syntax.Alter.Column -{ - public interface IAlterColumnOptionForeignKeyCascadeSyntax : - IAlterColumnOptionSyntax, - IForeignKeyCascadeSyntax - { - - } -} +namespace Umbraco.Core.Migrations.Syntax.Alter.Column +{ + public interface IAlterColumnOptionForeignKeyCascadeSyntax : + IAlterColumnOptionSyntax, + IForeignKeyCascadeSyntax + { + + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Alter/Column/IAlterColumnOptionSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Alter/Column/IAlterColumnOptionSyntax.cs similarity index 66% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Alter/Column/IAlterColumnOptionSyntax.cs rename to src/Umbraco.Core/Migrations/Syntax/Alter/Column/IAlterColumnOptionSyntax.cs index c9798581af..a7ac58ac97 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Alter/Column/IAlterColumnOptionSyntax.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Alter/Column/IAlterColumnOptionSyntax.cs @@ -1,7 +1,7 @@ -namespace Umbraco.Core.Persistence.Migrations.Syntax.Alter.Column -{ - public interface IAlterColumnOptionSyntax : IColumnOptionSyntax - { - - } -} +namespace Umbraco.Core.Migrations.Syntax.Alter.Column +{ + public interface IAlterColumnOptionSyntax : IColumnOptionSyntax + { + + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Alter/Column/IAlterColumnSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Alter/Column/IAlterColumnSyntax.cs similarity index 62% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Alter/Column/IAlterColumnSyntax.cs rename to src/Umbraco.Core/Migrations/Syntax/Alter/Column/IAlterColumnSyntax.cs index 53b9d6864f..bd699820ae 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Alter/Column/IAlterColumnSyntax.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Alter/Column/IAlterColumnSyntax.cs @@ -1,7 +1,7 @@ -namespace Umbraco.Core.Persistence.Migrations.Syntax.Alter.Column -{ - public interface IAlterColumnSyntax : IFluentSyntax - { - IAlterColumnTypeSyntax OnTable(string name); - } -} +namespace Umbraco.Core.Migrations.Syntax.Alter.Column +{ + public interface IAlterColumnSyntax : IFluentSyntax + { + IAlterColumnTypeSyntax OnTable(string name); + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Alter/Column/IAlterColumnTypeSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Alter/Column/IAlterColumnTypeSyntax.cs similarity index 58% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Alter/Column/IAlterColumnTypeSyntax.cs rename to src/Umbraco.Core/Migrations/Syntax/Alter/Column/IAlterColumnTypeSyntax.cs index 79379d1469..4f396f1c16 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Alter/Column/IAlterColumnTypeSyntax.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Alter/Column/IAlterColumnTypeSyntax.cs @@ -1,7 +1,7 @@ -namespace Umbraco.Core.Persistence.Migrations.Syntax.Alter.Column -{ - public interface IAlterColumnTypeSyntax : IColumnTypeSyntax - { - - } -} +namespace Umbraco.Core.Migrations.Syntax.Alter.Column +{ + public interface IAlterColumnTypeSyntax : IColumnTypeSyntax + { + + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Alter/Expressions/AlterColumnExpression.cs b/src/Umbraco.Core/Migrations/Syntax/Alter/Expressions/AlterColumnExpression.cs similarity index 89% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Alter/Expressions/AlterColumnExpression.cs rename to src/Umbraco.Core/Migrations/Syntax/Alter/Expressions/AlterColumnExpression.cs index 2cb873e547..bb9ec2f90a 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Alter/Expressions/AlterColumnExpression.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Alter/Expressions/AlterColumnExpression.cs @@ -1,31 +1,31 @@ -using NPoco; -using Umbraco.Core.Persistence.DatabaseModelDefinitions; - -namespace Umbraco.Core.Persistence.Migrations.Syntax.Alter.Expressions -{ - public class AlterColumnExpression : MigrationExpressionBase - { - - public AlterColumnExpression(IMigrationContext context, DatabaseType[] supportedDatabaseTypes) - : base(context, supportedDatabaseTypes) - { - Column = new ColumnDefinition { ModificationType = ModificationType.Alter }; - } - - - - - public virtual string SchemaName { get; set; } - public virtual string TableName { get; set; } - public virtual ColumnDefinition Column { get; set; } - - public override string ToString() - { - - return string.Format(SqlSyntax.AlterColumn, - SqlSyntax.GetQuotedTableName(TableName), - SqlSyntax.Format(Column)); - - } - } -} +using NPoco; +using Umbraco.Core.Persistence.DatabaseModelDefinitions; + +namespace Umbraco.Core.Migrations.Syntax.Alter.Expressions +{ + public class AlterColumnExpression : MigrationExpressionBase + { + + public AlterColumnExpression(IMigrationContext context, DatabaseType[] supportedDatabaseTypes) + : base(context, supportedDatabaseTypes) + { + Column = new ColumnDefinition { ModificationType = ModificationType.Alter }; + } + + + + + public virtual string SchemaName { get; set; } + public virtual string TableName { get; set; } + public virtual ColumnDefinition Column { get; set; } + + public override string ToString() + { + + return string.Format(SqlSyntax.AlterColumn, + SqlSyntax.GetQuotedTableName(TableName), + SqlSyntax.Format(Column)); + + } + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Alter/Expressions/AlterDefaultConstraintExpression.cs b/src/Umbraco.Core/Migrations/Syntax/Alter/Expressions/AlterDefaultConstraintExpression.cs similarity index 90% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Alter/Expressions/AlterDefaultConstraintExpression.cs rename to src/Umbraco.Core/Migrations/Syntax/Alter/Expressions/AlterDefaultConstraintExpression.cs index 88ac7709f2..fb43257e05 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Alter/Expressions/AlterDefaultConstraintExpression.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Alter/Expressions/AlterDefaultConstraintExpression.cs @@ -1,30 +1,30 @@ -using NPoco; - -namespace Umbraco.Core.Persistence.Migrations.Syntax.Alter.Expressions -{ - public class AlterDefaultConstraintExpression : MigrationExpressionBase - { - public AlterDefaultConstraintExpression(IMigrationContext context, DatabaseType[] supportedDatabaseTypes) - : base(context, supportedDatabaseTypes) - { } - - public virtual string SchemaName { get; set; } - - public virtual string TableName { get; set; } - - public virtual string ColumnName { get; set; } - - public virtual string ConstraintName { get; set; } - - public virtual object DefaultValue { get; set; } - - public override string ToString() - { - //NOTE Should probably investigate if Deleting a Default Constraint is different from deleting a 'regular' constraint - - return string.Format(SqlSyntax.DeleteConstraint, - SqlSyntax.GetQuotedTableName(TableName), - SqlSyntax.GetQuotedName(ConstraintName)); - } - } -} +using NPoco; + +namespace Umbraco.Core.Migrations.Syntax.Alter.Expressions +{ + public class AlterDefaultConstraintExpression : MigrationExpressionBase + { + public AlterDefaultConstraintExpression(IMigrationContext context, DatabaseType[] supportedDatabaseTypes) + : base(context, supportedDatabaseTypes) + { } + + public virtual string SchemaName { get; set; } + + public virtual string TableName { get; set; } + + public virtual string ColumnName { get; set; } + + public virtual string ConstraintName { get; set; } + + public virtual object DefaultValue { get; set; } + + public override string ToString() + { + //NOTE Should probably investigate if Deleting a Default Constraint is different from deleting a 'regular' constraint + + return string.Format(SqlSyntax.DeleteConstraint, + SqlSyntax.GetQuotedTableName(TableName), + SqlSyntax.GetQuotedName(ConstraintName)); + } + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Alter/Expressions/AlterTableExpression.cs b/src/Umbraco.Core/Migrations/Syntax/Alter/Expressions/AlterTableExpression.cs similarity index 84% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Alter/Expressions/AlterTableExpression.cs rename to src/Umbraco.Core/Migrations/Syntax/Alter/Expressions/AlterTableExpression.cs index 3fc442609f..73ead175b7 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Alter/Expressions/AlterTableExpression.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Alter/Expressions/AlterTableExpression.cs @@ -1,20 +1,20 @@ -using NPoco; - -namespace Umbraco.Core.Persistence.Migrations.Syntax.Alter.Expressions -{ - public class AlterTableExpression : MigrationExpressionBase - { - public AlterTableExpression(IMigrationContext context, DatabaseType[] supportedDatabaseTypes) - : base(context, supportedDatabaseTypes) - { } - - public virtual string SchemaName { get; set; } - - public virtual string TableName { get; set; } - - public override string ToString() - { - return $"ALTER TABLE {TableName}"; - } - } -} +using NPoco; + +namespace Umbraco.Core.Migrations.Syntax.Alter.Expressions +{ + public class AlterTableExpression : MigrationExpressionBase + { + public AlterTableExpression(IMigrationContext context, DatabaseType[] supportedDatabaseTypes) + : base(context, supportedDatabaseTypes) + { } + + public virtual string SchemaName { get; set; } + + public virtual string TableName { get; set; } + + public override string ToString() + { + return $"ALTER TABLE {TableName}"; + } + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Alter/IAlterSyntaxBuilder.cs b/src/Umbraco.Core/Migrations/Syntax/Alter/IAlterSyntaxBuilder.cs similarity index 80% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Alter/IAlterSyntaxBuilder.cs rename to src/Umbraco.Core/Migrations/Syntax/Alter/IAlterSyntaxBuilder.cs index 6d6b10ae9f..e2eb741c1f 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Alter/IAlterSyntaxBuilder.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Alter/IAlterSyntaxBuilder.cs @@ -1,22 +1,22 @@ -using System; -using Umbraco.Core.Persistence.Migrations.Syntax.Alter.Column; -using Umbraco.Core.Persistence.Migrations.Syntax.Alter.Table; - -namespace Umbraco.Core.Persistence.Migrations.Syntax.Alter -{ - public interface IAlterSyntaxBuilder : IFluentSyntax - { - IAlterTableSyntax Table(string tableName); - - /// - /// The problem with this is that only under particular circumstances is the expression added to the context - /// so you wouldn't actually know if you are using it correctly or not and chances are you are not and therefore - /// the statement won't even execute whereas using the IAlterTableSyntax to modify a column is guaranteed to add - /// the expression to the context. - /// - /// - /// - [Obsolete("Use the IAlterTableSyntax to modify a column instead, this will be removed in future versions")] - IAlterColumnSyntax Column(string columnName); - } -} +using System; +using Umbraco.Core.Migrations.Syntax.Alter.Column; +using Umbraco.Core.Migrations.Syntax.Alter.Table; + +namespace Umbraco.Core.Migrations.Syntax.Alter +{ + public interface IAlterSyntaxBuilder : IFluentSyntax + { + IAlterTableSyntax Table(string tableName); + + /// + /// The problem with this is that only under particular circumstances is the expression added to the context + /// so you wouldn't actually know if you are using it correctly or not and chances are you are not and therefore + /// the statement won't even execute whereas using the IAlterTableSyntax to modify a column is guaranteed to add + /// the expression to the context. + /// + /// + /// + [Obsolete("Use the IAlterTableSyntax to modify a column instead, this will be removed in future versions")] + IAlterColumnSyntax Column(string columnName); + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Alter/Table/AlterTableBuilder.cs b/src/Umbraco.Core/Migrations/Syntax/Alter/Table/AlterTableBuilder.cs similarity index 94% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Alter/Table/AlterTableBuilder.cs rename to src/Umbraco.Core/Migrations/Syntax/Alter/Table/AlterTableBuilder.cs index d5eb0c15ea..92444f3a25 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Alter/Table/AlterTableBuilder.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Alter/Table/AlterTableBuilder.cs @@ -1,263 +1,262 @@ -using System.Data; -using NPoco; -using Umbraco.Core.Persistence.DatabaseModelDefinitions; -using Umbraco.Core.Persistence.Migrations.Syntax.Alter.Expressions; -using Umbraco.Core.Persistence.Migrations.Syntax.Expressions; -using Umbraco.Core.Persistence.SqlSyntax; - -namespace Umbraco.Core.Persistence.Migrations.Syntax.Alter.Table -{ - public class AlterTableBuilder : ExpressionBuilder, - IAlterTableColumnTypeSyntax, - IAlterTableColumnOptionForeignKeyCascadeSyntax - { - private readonly IMigrationContext _context; - private readonly DatabaseType[] _supportedDatabaseTypes; - - public AlterTableBuilder(IMigrationContext context, DatabaseType[] supportedDatabaseTypes, AlterTableExpression expression) - : base(expression) - { - _context = context; - _supportedDatabaseTypes = supportedDatabaseTypes; - } - - public ColumnDefinition CurrentColumn { get; set; } - - public ForeignKeyDefinition CurrentForeignKey { get; set; } - - public override ColumnDefinition GetColumnForType() - { - return CurrentColumn; - } - - public IAlterTableColumnOptionSyntax WithDefault(SystemMethods method) - { - CurrentColumn.DefaultValue = method; - return this; - } - - public IAlterTableColumnOptionSyntax WithDefaultValue(object value) - { - if (CurrentColumn.ModificationType == ModificationType.Alter) - { - var dc = new AlterDefaultConstraintExpression(_context, _supportedDatabaseTypes) - { - TableName = Expression.TableName, - SchemaName = Expression.SchemaName, - ColumnName = CurrentColumn.Name, - DefaultValue = value - }; - - _context.Expressions.Add(dc); - } - - CurrentColumn.DefaultValue = value; - return this; - } - - public IAlterTableColumnOptionSyntax Identity() - { - CurrentColumn.IsIdentity = true; - return this; - } - - public IAlterTableColumnOptionSyntax Indexed() - { - return Indexed(null); - } - - public IAlterTableColumnOptionSyntax Indexed(string indexName) - { - CurrentColumn.IsIndexed = true; - - var index = new CreateIndexExpression(_context, _supportedDatabaseTypes, new IndexDefinition - { - Name = indexName, - SchemaName = Expression.SchemaName, - TableName = Expression.TableName - }); - - index.Index.Columns.Add(new IndexColumnDefinition - { - Name = CurrentColumn.Name - }); - - _context.Expressions.Add(index); - - return this; - } - - public IAlterTableColumnOptionSyntax PrimaryKey() - { - CurrentColumn.IsPrimaryKey = true; - return this; - } - - public IAlterTableColumnOptionSyntax PrimaryKey(string primaryKeyName) - { - CurrentColumn.IsPrimaryKey = true; - CurrentColumn.PrimaryKeyName = primaryKeyName; - return this; - } - - public IAlterTableColumnOptionSyntax Nullable() - { - CurrentColumn.IsNullable = true; - return this; - } - - public IAlterTableColumnOptionSyntax NotNullable() - { - CurrentColumn.IsNullable = false; - return this; - } - - public IAlterTableColumnOptionSyntax Unique() - { - return Unique(null); - } - - public IAlterTableColumnOptionSyntax Unique(string indexName) - { - CurrentColumn.IsUnique = true; - - var index = new CreateIndexExpression(_context, _supportedDatabaseTypes, new IndexDefinition - { - Name = indexName, - SchemaName = Expression.SchemaName, - TableName = Expression.TableName, - IsUnique = true - }); - - index.Index.Columns.Add(new IndexColumnDefinition - { - Name = CurrentColumn.Name - }); - - _context.Expressions.Add(index); - - return this; - } - - public IAlterTableColumnOptionForeignKeyCascadeSyntax ForeignKey(string primaryTableName, string primaryColumnName) - { - return ForeignKey(null, null, primaryTableName, primaryColumnName); - } - - public IAlterTableColumnOptionForeignKeyCascadeSyntax ForeignKey(string foreignKeyName, string primaryTableName, - string primaryColumnName) - { - return ForeignKey(foreignKeyName, null, primaryTableName, primaryColumnName); - } - - public IAlterTableColumnOptionForeignKeyCascadeSyntax ForeignKey(string foreignKeyName, string primaryTableSchema, - string primaryTableName, string primaryColumnName) - { - CurrentColumn.IsForeignKey = true; - - var fk = new CreateForeignKeyExpression(_context, _supportedDatabaseTypes, new ForeignKeyDefinition - { - Name = foreignKeyName, - PrimaryTable = primaryTableName, - PrimaryTableSchema = primaryTableSchema, - ForeignTable = Expression.TableName, - ForeignTableSchema = Expression.SchemaName - }); - - fk.ForeignKey.PrimaryColumns.Add(primaryColumnName); - fk.ForeignKey.ForeignColumns.Add(CurrentColumn.Name); - - _context.Expressions.Add(fk); - CurrentForeignKey = fk.ForeignKey; - return this; - } - - public IAlterTableColumnOptionForeignKeyCascadeSyntax ForeignKey() - { - CurrentColumn.IsForeignKey = true; - return this; - } - - public IAlterTableColumnOptionForeignKeyCascadeSyntax ReferencedBy(string foreignTableName, string foreignColumnName) - { - return ReferencedBy(null, null, foreignTableName, foreignColumnName); - } - - public IAlterTableColumnOptionForeignKeyCascadeSyntax ReferencedBy(string foreignKeyName, string foreignTableName, - string foreignColumnName) - { - return ReferencedBy(foreignKeyName, null, foreignTableName, foreignColumnName); - } - - public IAlterTableColumnOptionForeignKeyCascadeSyntax ReferencedBy(string foreignKeyName, string foreignTableSchema, - string foreignTableName, string foreignColumnName) - { - var fk = new CreateForeignKeyExpression(_context, _supportedDatabaseTypes, new ForeignKeyDefinition - { - Name = foreignKeyName, - PrimaryTable = Expression.TableName, - PrimaryTableSchema = Expression.SchemaName, - ForeignTable = foreignTableName, - ForeignTableSchema = foreignTableSchema - }); - - fk.ForeignKey.PrimaryColumns.Add(CurrentColumn.Name); - fk.ForeignKey.ForeignColumns.Add(foreignColumnName); - - _context.Expressions.Add(fk); - CurrentForeignKey = fk.ForeignKey; - return this; - } - - public IAlterTableColumnTypeSyntax AddColumn(string name) - { - var column = new ColumnDefinition { Name = name, ModificationType = ModificationType.Create }; - var createColumn = new CreateColumnExpression(_context, _supportedDatabaseTypes) - { - Column = column, - SchemaName = Expression.SchemaName, - TableName = Expression.TableName - }; - - CurrentColumn = column; - - _context.Expressions.Add(createColumn); - return this; - } - - public IAlterTableColumnTypeSyntax AlterColumn(string name) - { - var column = new ColumnDefinition { Name = name, ModificationType = ModificationType.Alter }; - var alterColumn = new AlterColumnExpression(_context, _supportedDatabaseTypes) - { - Column = column, - SchemaName = Expression.SchemaName, - TableName = Expression.TableName - }; - - CurrentColumn = column; - - _context.Expressions.Add(alterColumn); - return this; - } - - public IAlterTableColumnOptionForeignKeyCascadeSyntax OnDelete(Rule rule) - { - CurrentForeignKey.OnDelete = rule; - return this; - } - - public IAlterTableColumnOptionForeignKeyCascadeSyntax OnUpdate(Rule rule) - { - CurrentForeignKey.OnUpdate = rule; - return this; - } - - public IAlterTableColumnOptionSyntax OnDeleteOrUpdate(Rule rule) - { - OnDelete(rule); - OnUpdate(rule); - return this; - } - } -} +using System.Data; +using NPoco; +using Umbraco.Core.Migrations.Syntax.Alter.Expressions; +using Umbraco.Core.Migrations.Syntax.Expressions; +using Umbraco.Core.Persistence.DatabaseModelDefinitions; + +namespace Umbraco.Core.Migrations.Syntax.Alter.Table +{ + public class AlterTableBuilder : ExpressionBuilder, + IAlterTableColumnTypeSyntax, + IAlterTableColumnOptionForeignKeyCascadeSyntax + { + private readonly IMigrationContext _context; + private readonly DatabaseType[] _supportedDatabaseTypes; + + public AlterTableBuilder(IMigrationContext context, DatabaseType[] supportedDatabaseTypes, AlterTableExpression expression) + : base(expression) + { + _context = context; + _supportedDatabaseTypes = supportedDatabaseTypes; + } + + public ColumnDefinition CurrentColumn { get; set; } + + public ForeignKeyDefinition CurrentForeignKey { get; set; } + + public override ColumnDefinition GetColumnForType() + { + return CurrentColumn; + } + + public IAlterTableColumnOptionSyntax WithDefault(SystemMethods method) + { + CurrentColumn.DefaultValue = method; + return this; + } + + public IAlterTableColumnOptionSyntax WithDefaultValue(object value) + { + if (CurrentColumn.ModificationType == ModificationType.Alter) + { + var dc = new AlterDefaultConstraintExpression(_context, _supportedDatabaseTypes) + { + TableName = Expression.TableName, + SchemaName = Expression.SchemaName, + ColumnName = CurrentColumn.Name, + DefaultValue = value + }; + + _context.Expressions.Add(dc); + } + + CurrentColumn.DefaultValue = value; + return this; + } + + public IAlterTableColumnOptionSyntax Identity() + { + CurrentColumn.IsIdentity = true; + return this; + } + + public IAlterTableColumnOptionSyntax Indexed() + { + return Indexed(null); + } + + public IAlterTableColumnOptionSyntax Indexed(string indexName) + { + CurrentColumn.IsIndexed = true; + + var index = new CreateIndexExpression(_context, _supportedDatabaseTypes, new IndexDefinition + { + Name = indexName, + SchemaName = Expression.SchemaName, + TableName = Expression.TableName + }); + + index.Index.Columns.Add(new IndexColumnDefinition + { + Name = CurrentColumn.Name + }); + + _context.Expressions.Add(index); + + return this; + } + + public IAlterTableColumnOptionSyntax PrimaryKey() + { + CurrentColumn.IsPrimaryKey = true; + return this; + } + + public IAlterTableColumnOptionSyntax PrimaryKey(string primaryKeyName) + { + CurrentColumn.IsPrimaryKey = true; + CurrentColumn.PrimaryKeyName = primaryKeyName; + return this; + } + + public IAlterTableColumnOptionSyntax Nullable() + { + CurrentColumn.IsNullable = true; + return this; + } + + public IAlterTableColumnOptionSyntax NotNullable() + { + CurrentColumn.IsNullable = false; + return this; + } + + public IAlterTableColumnOptionSyntax Unique() + { + return Unique(null); + } + + public IAlterTableColumnOptionSyntax Unique(string indexName) + { + CurrentColumn.IsUnique = true; + + var index = new CreateIndexExpression(_context, _supportedDatabaseTypes, new IndexDefinition + { + Name = indexName, + SchemaName = Expression.SchemaName, + TableName = Expression.TableName, + IsUnique = true + }); + + index.Index.Columns.Add(new IndexColumnDefinition + { + Name = CurrentColumn.Name + }); + + _context.Expressions.Add(index); + + return this; + } + + public IAlterTableColumnOptionForeignKeyCascadeSyntax ForeignKey(string primaryTableName, string primaryColumnName) + { + return ForeignKey(null, null, primaryTableName, primaryColumnName); + } + + public IAlterTableColumnOptionForeignKeyCascadeSyntax ForeignKey(string foreignKeyName, string primaryTableName, + string primaryColumnName) + { + return ForeignKey(foreignKeyName, null, primaryTableName, primaryColumnName); + } + + public IAlterTableColumnOptionForeignKeyCascadeSyntax ForeignKey(string foreignKeyName, string primaryTableSchema, + string primaryTableName, string primaryColumnName) + { + CurrentColumn.IsForeignKey = true; + + var fk = new CreateForeignKeyExpression(_context, _supportedDatabaseTypes, new ForeignKeyDefinition + { + Name = foreignKeyName, + PrimaryTable = primaryTableName, + PrimaryTableSchema = primaryTableSchema, + ForeignTable = Expression.TableName, + ForeignTableSchema = Expression.SchemaName + }); + + fk.ForeignKey.PrimaryColumns.Add(primaryColumnName); + fk.ForeignKey.ForeignColumns.Add(CurrentColumn.Name); + + _context.Expressions.Add(fk); + CurrentForeignKey = fk.ForeignKey; + return this; + } + + public IAlterTableColumnOptionForeignKeyCascadeSyntax ForeignKey() + { + CurrentColumn.IsForeignKey = true; + return this; + } + + public IAlterTableColumnOptionForeignKeyCascadeSyntax ReferencedBy(string foreignTableName, string foreignColumnName) + { + return ReferencedBy(null, null, foreignTableName, foreignColumnName); + } + + public IAlterTableColumnOptionForeignKeyCascadeSyntax ReferencedBy(string foreignKeyName, string foreignTableName, + string foreignColumnName) + { + return ReferencedBy(foreignKeyName, null, foreignTableName, foreignColumnName); + } + + public IAlterTableColumnOptionForeignKeyCascadeSyntax ReferencedBy(string foreignKeyName, string foreignTableSchema, + string foreignTableName, string foreignColumnName) + { + var fk = new CreateForeignKeyExpression(_context, _supportedDatabaseTypes, new ForeignKeyDefinition + { + Name = foreignKeyName, + PrimaryTable = Expression.TableName, + PrimaryTableSchema = Expression.SchemaName, + ForeignTable = foreignTableName, + ForeignTableSchema = foreignTableSchema + }); + + fk.ForeignKey.PrimaryColumns.Add(CurrentColumn.Name); + fk.ForeignKey.ForeignColumns.Add(foreignColumnName); + + _context.Expressions.Add(fk); + CurrentForeignKey = fk.ForeignKey; + return this; + } + + public IAlterTableColumnTypeSyntax AddColumn(string name) + { + var column = new ColumnDefinition { Name = name, ModificationType = ModificationType.Create }; + var createColumn = new CreateColumnExpression(_context, _supportedDatabaseTypes) + { + Column = column, + SchemaName = Expression.SchemaName, + TableName = Expression.TableName + }; + + CurrentColumn = column; + + _context.Expressions.Add(createColumn); + return this; + } + + public IAlterTableColumnTypeSyntax AlterColumn(string name) + { + var column = new ColumnDefinition { Name = name, ModificationType = ModificationType.Alter }; + var alterColumn = new AlterColumnExpression(_context, _supportedDatabaseTypes) + { + Column = column, + SchemaName = Expression.SchemaName, + TableName = Expression.TableName + }; + + CurrentColumn = column; + + _context.Expressions.Add(alterColumn); + return this; + } + + public IAlterTableColumnOptionForeignKeyCascadeSyntax OnDelete(Rule rule) + { + CurrentForeignKey.OnDelete = rule; + return this; + } + + public IAlterTableColumnOptionForeignKeyCascadeSyntax OnUpdate(Rule rule) + { + CurrentForeignKey.OnUpdate = rule; + return this; + } + + public IAlterTableColumnOptionSyntax OnDeleteOrUpdate(Rule rule) + { + OnDelete(rule); + OnUpdate(rule); + return this; + } + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Alter/Table/IAlterTableColumnOptionForeignKeyCascadeSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Alter/Table/IAlterTableColumnOptionForeignKeyCascadeSyntax.cs similarity index 75% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Alter/Table/IAlterTableColumnOptionForeignKeyCascadeSyntax.cs rename to src/Umbraco.Core/Migrations/Syntax/Alter/Table/IAlterTableColumnOptionForeignKeyCascadeSyntax.cs index 562ca96e83..a43ab18153 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Alter/Table/IAlterTableColumnOptionForeignKeyCascadeSyntax.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Alter/Table/IAlterTableColumnOptionForeignKeyCascadeSyntax.cs @@ -1,9 +1,9 @@ -namespace Umbraco.Core.Persistence.Migrations.Syntax.Alter.Table -{ - public interface IAlterTableColumnOptionForeignKeyCascadeSyntax : - IAlterTableColumnOptionSyntax, - IForeignKeyCascadeSyntax - { - - } -} +namespace Umbraco.Core.Migrations.Syntax.Alter.Table +{ + public interface IAlterTableColumnOptionForeignKeyCascadeSyntax : + IAlterTableColumnOptionSyntax, + IForeignKeyCascadeSyntax + { + + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Alter/Table/IAlterTableColumnOptionSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Alter/Table/IAlterTableColumnOptionSyntax.cs similarity index 72% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Alter/Table/IAlterTableColumnOptionSyntax.cs rename to src/Umbraco.Core/Migrations/Syntax/Alter/Table/IAlterTableColumnOptionSyntax.cs index 242363a43a..fe6e05aff3 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Alter/Table/IAlterTableColumnOptionSyntax.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Alter/Table/IAlterTableColumnOptionSyntax.cs @@ -1,9 +1,9 @@ -namespace Umbraco.Core.Persistence.Migrations.Syntax.Alter.Table -{ - public interface IAlterTableColumnOptionSyntax : - IColumnOptionSyntax, - IAlterTableSyntax - { - - } -} +namespace Umbraco.Core.Migrations.Syntax.Alter.Table +{ + public interface IAlterTableColumnOptionSyntax : + IColumnOptionSyntax, + IAlterTableSyntax + { + + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Alter/Table/IAlterTableColumnTypeSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Alter/Table/IAlterTableColumnTypeSyntax.cs similarity index 60% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Alter/Table/IAlterTableColumnTypeSyntax.cs rename to src/Umbraco.Core/Migrations/Syntax/Alter/Table/IAlterTableColumnTypeSyntax.cs index df09942d6b..bc76a255c2 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Alter/Table/IAlterTableColumnTypeSyntax.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Alter/Table/IAlterTableColumnTypeSyntax.cs @@ -1,7 +1,7 @@ -namespace Umbraco.Core.Persistence.Migrations.Syntax.Alter.Table -{ - public interface IAlterTableColumnTypeSyntax : IColumnTypeSyntax - { - - } -} +namespace Umbraco.Core.Migrations.Syntax.Alter.Table +{ + public interface IAlterTableColumnTypeSyntax : IColumnTypeSyntax + { + + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Alter/Table/IAlterTableSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Alter/Table/IAlterTableSyntax.cs similarity index 71% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Alter/Table/IAlterTableSyntax.cs rename to src/Umbraco.Core/Migrations/Syntax/Alter/Table/IAlterTableSyntax.cs index 3fd50bd46e..89fea53621 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Alter/Table/IAlterTableSyntax.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Alter/Table/IAlterTableSyntax.cs @@ -1,8 +1,8 @@ -namespace Umbraco.Core.Persistence.Migrations.Syntax.Alter.Table -{ - public interface IAlterTableSyntax : IFluentSyntax - { - IAlterTableColumnTypeSyntax AddColumn(string name); - IAlterTableColumnTypeSyntax AlterColumn(string name); - } -} +namespace Umbraco.Core.Migrations.Syntax.Alter.Table +{ + public interface IAlterTableSyntax : IFluentSyntax + { + IAlterTableColumnTypeSyntax AddColumn(string name); + IAlterTableColumnTypeSyntax AlterColumn(string name); + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Column/CreateColumnBuilder.cs b/src/Umbraco.Core/Migrations/Syntax/Create/Column/CreateColumnBuilder.cs similarity index 95% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Column/CreateColumnBuilder.cs rename to src/Umbraco.Core/Migrations/Syntax/Create/Column/CreateColumnBuilder.cs index d782396e54..ecefed5f49 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Column/CreateColumnBuilder.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Create/Column/CreateColumnBuilder.cs @@ -1,221 +1,220 @@ -using System.Data; -using NPoco; -using Umbraco.Core.Persistence.DatabaseModelDefinitions; -using Umbraco.Core.Persistence.Migrations.Syntax.Expressions; -using Umbraco.Core.Persistence.SqlSyntax; - -namespace Umbraco.Core.Persistence.Migrations.Syntax.Create.Column -{ - public class CreateColumnBuilder : ExpressionBuilder, - ICreateColumnOnTableSyntax, - ICreateColumnTypeSyntax, - ICreateColumnOptionForeignKeyCascadeSyntax - { - private readonly IMigrationContext _context; - private readonly DatabaseType[] _supportedDatabaseTypes; - - public CreateColumnBuilder(IMigrationContext context, DatabaseType[] supportedDatabaseTypes, CreateColumnExpression expression) - : base(expression) - { - _context = context; - _supportedDatabaseTypes = supportedDatabaseTypes; - } - - public ForeignKeyDefinition CurrentForeignKey { get; set; } - - public override ColumnDefinition GetColumnForType() - { - return Expression.Column; - } - - public ICreateColumnTypeSyntax OnTable(string name) - { - Expression.TableName = name; - return this; - } - - public ICreateColumnOptionSyntax WithDefault(SystemMethods method) - { - Expression.Column.DefaultValue = method; - return this; - } - - public ICreateColumnOptionSyntax WithDefaultValue(object value) - { - Expression.Column.DefaultValue = value; - return this; - } - - public ICreateColumnOptionSyntax Identity() - { - return Indexed(null); - } - - public ICreateColumnOptionSyntax Indexed() - { - return Indexed(null); - } - - public ICreateColumnOptionSyntax Indexed(string indexName) - { - Expression.Column.IsIndexed = true; - - var index = new CreateIndexExpression(_context, _supportedDatabaseTypes, new IndexDefinition - { - Name = indexName, - SchemaName = Expression.SchemaName, - TableName = Expression.TableName - }); - - index.Index.Columns.Add(new IndexColumnDefinition - { - Name = Expression.Column.Name - }); - - _context.Expressions.Add(index); - - return this; - } - - public ICreateColumnOptionSyntax PrimaryKey() - { - Expression.Column.IsPrimaryKey = true; - return this; - } - - public ICreateColumnOptionSyntax PrimaryKey(string primaryKeyName) - { - Expression.Column.IsPrimaryKey = true; - Expression.Column.PrimaryKeyName = primaryKeyName; - return this; - } - - public ICreateColumnOptionSyntax Nullable() - { - Expression.Column.IsNullable = true; - return this; - } - - public ICreateColumnOptionSyntax NotNullable() - { - Expression.Column.IsNullable = false; - return this; - } - - public ICreateColumnOptionSyntax Unique() - { - return Unique(null); - } - - public ICreateColumnOptionSyntax Unique(string indexName) - { - Expression.Column.IsUnique = true; - - var index = new CreateIndexExpression(_context, _supportedDatabaseTypes, new IndexDefinition - { - Name = indexName, - SchemaName = Expression.SchemaName, - TableName = Expression.TableName, - IsUnique = true - }); - - index.Index.Columns.Add(new IndexColumnDefinition - { - Name = Expression.Column.Name - }); - - _context.Expressions.Add(index); - - return this; - } - - public ICreateColumnOptionForeignKeyCascadeSyntax ForeignKey(string primaryTableName, string primaryColumnName) - { - return ForeignKey(null, null, primaryTableName, primaryColumnName); - } - - public ICreateColumnOptionForeignKeyCascadeSyntax ForeignKey(string foreignKeyName, string primaryTableName, - string primaryColumnName) - { - return ForeignKey(foreignKeyName, null, primaryTableName, primaryColumnName); - } - - public ICreateColumnOptionForeignKeyCascadeSyntax ForeignKey(string foreignKeyName, string primaryTableSchema, - string primaryTableName, string primaryColumnName) - { - Expression.Column.IsForeignKey = true; - - var fk = new CreateForeignKeyExpression(_context, _supportedDatabaseTypes, new ForeignKeyDefinition - { - Name = foreignKeyName, - PrimaryTable = primaryTableName, - PrimaryTableSchema = primaryTableSchema, - ForeignTable = Expression.TableName, - ForeignTableSchema = Expression.SchemaName - }); - - fk.ForeignKey.PrimaryColumns.Add(primaryColumnName); - fk.ForeignKey.ForeignColumns.Add(Expression.Column.Name); - - _context.Expressions.Add(fk); - CurrentForeignKey = fk.ForeignKey; - return this; - } - - public ICreateColumnOptionForeignKeyCascadeSyntax ForeignKey() - { - Expression.Column.IsForeignKey = true; - return this; - } - - public ICreateColumnOptionForeignKeyCascadeSyntax ReferencedBy(string foreignTableName, string foreignColumnName) - { - return ReferencedBy(null, null, foreignTableName, foreignColumnName); - } - - public ICreateColumnOptionForeignKeyCascadeSyntax ReferencedBy(string foreignKeyName, string foreignTableName, - string foreignColumnName) - { - return ReferencedBy(foreignKeyName, null, foreignTableName, foreignColumnName); - } - - public ICreateColumnOptionForeignKeyCascadeSyntax ReferencedBy(string foreignKeyName, string foreignTableSchema, - string foreignTableName, string foreignColumnName) - { - var fk = new CreateForeignKeyExpression(_context, _supportedDatabaseTypes, new ForeignKeyDefinition - { - Name = foreignKeyName, - PrimaryTable = Expression.TableName, - PrimaryTableSchema = Expression.SchemaName, - ForeignTable = foreignTableName, - ForeignTableSchema = foreignTableSchema - }); - - fk.ForeignKey.PrimaryColumns.Add(Expression.Column.Name); - fk.ForeignKey.ForeignColumns.Add(foreignColumnName); - - _context.Expressions.Add(fk); - CurrentForeignKey = fk.ForeignKey; - return this; - } - - public ICreateColumnOptionForeignKeyCascadeSyntax OnDelete(Rule rule) - { - CurrentForeignKey.OnDelete = rule; - return this; - } - - public ICreateColumnOptionForeignKeyCascadeSyntax OnUpdate(Rule rule) - { - CurrentForeignKey.OnUpdate = rule; - return this; - } - - public ICreateColumnOptionSyntax OnDeleteOrUpdate(Rule rule) - { - OnDelete(rule); - OnUpdate(rule); - return this; - } - } -} +using System.Data; +using NPoco; +using Umbraco.Core.Migrations.Syntax.Expressions; +using Umbraco.Core.Persistence.DatabaseModelDefinitions; + +namespace Umbraco.Core.Migrations.Syntax.Create.Column +{ + public class CreateColumnBuilder : ExpressionBuilder, + ICreateColumnOnTableSyntax, + ICreateColumnTypeSyntax, + ICreateColumnOptionForeignKeyCascadeSyntax + { + private readonly IMigrationContext _context; + private readonly DatabaseType[] _supportedDatabaseTypes; + + public CreateColumnBuilder(IMigrationContext context, DatabaseType[] supportedDatabaseTypes, CreateColumnExpression expression) + : base(expression) + { + _context = context; + _supportedDatabaseTypes = supportedDatabaseTypes; + } + + public ForeignKeyDefinition CurrentForeignKey { get; set; } + + public override ColumnDefinition GetColumnForType() + { + return Expression.Column; + } + + public ICreateColumnTypeSyntax OnTable(string name) + { + Expression.TableName = name; + return this; + } + + public ICreateColumnOptionSyntax WithDefault(SystemMethods method) + { + Expression.Column.DefaultValue = method; + return this; + } + + public ICreateColumnOptionSyntax WithDefaultValue(object value) + { + Expression.Column.DefaultValue = value; + return this; + } + + public ICreateColumnOptionSyntax Identity() + { + return Indexed(null); + } + + public ICreateColumnOptionSyntax Indexed() + { + return Indexed(null); + } + + public ICreateColumnOptionSyntax Indexed(string indexName) + { + Expression.Column.IsIndexed = true; + + var index = new CreateIndexExpression(_context, _supportedDatabaseTypes, new IndexDefinition + { + Name = indexName, + SchemaName = Expression.SchemaName, + TableName = Expression.TableName + }); + + index.Index.Columns.Add(new IndexColumnDefinition + { + Name = Expression.Column.Name + }); + + _context.Expressions.Add(index); + + return this; + } + + public ICreateColumnOptionSyntax PrimaryKey() + { + Expression.Column.IsPrimaryKey = true; + return this; + } + + public ICreateColumnOptionSyntax PrimaryKey(string primaryKeyName) + { + Expression.Column.IsPrimaryKey = true; + Expression.Column.PrimaryKeyName = primaryKeyName; + return this; + } + + public ICreateColumnOptionSyntax Nullable() + { + Expression.Column.IsNullable = true; + return this; + } + + public ICreateColumnOptionSyntax NotNullable() + { + Expression.Column.IsNullable = false; + return this; + } + + public ICreateColumnOptionSyntax Unique() + { + return Unique(null); + } + + public ICreateColumnOptionSyntax Unique(string indexName) + { + Expression.Column.IsUnique = true; + + var index = new CreateIndexExpression(_context, _supportedDatabaseTypes, new IndexDefinition + { + Name = indexName, + SchemaName = Expression.SchemaName, + TableName = Expression.TableName, + IsUnique = true + }); + + index.Index.Columns.Add(new IndexColumnDefinition + { + Name = Expression.Column.Name + }); + + _context.Expressions.Add(index); + + return this; + } + + public ICreateColumnOptionForeignKeyCascadeSyntax ForeignKey(string primaryTableName, string primaryColumnName) + { + return ForeignKey(null, null, primaryTableName, primaryColumnName); + } + + public ICreateColumnOptionForeignKeyCascadeSyntax ForeignKey(string foreignKeyName, string primaryTableName, + string primaryColumnName) + { + return ForeignKey(foreignKeyName, null, primaryTableName, primaryColumnName); + } + + public ICreateColumnOptionForeignKeyCascadeSyntax ForeignKey(string foreignKeyName, string primaryTableSchema, + string primaryTableName, string primaryColumnName) + { + Expression.Column.IsForeignKey = true; + + var fk = new CreateForeignKeyExpression(_context, _supportedDatabaseTypes, new ForeignKeyDefinition + { + Name = foreignKeyName, + PrimaryTable = primaryTableName, + PrimaryTableSchema = primaryTableSchema, + ForeignTable = Expression.TableName, + ForeignTableSchema = Expression.SchemaName + }); + + fk.ForeignKey.PrimaryColumns.Add(primaryColumnName); + fk.ForeignKey.ForeignColumns.Add(Expression.Column.Name); + + _context.Expressions.Add(fk); + CurrentForeignKey = fk.ForeignKey; + return this; + } + + public ICreateColumnOptionForeignKeyCascadeSyntax ForeignKey() + { + Expression.Column.IsForeignKey = true; + return this; + } + + public ICreateColumnOptionForeignKeyCascadeSyntax ReferencedBy(string foreignTableName, string foreignColumnName) + { + return ReferencedBy(null, null, foreignTableName, foreignColumnName); + } + + public ICreateColumnOptionForeignKeyCascadeSyntax ReferencedBy(string foreignKeyName, string foreignTableName, + string foreignColumnName) + { + return ReferencedBy(foreignKeyName, null, foreignTableName, foreignColumnName); + } + + public ICreateColumnOptionForeignKeyCascadeSyntax ReferencedBy(string foreignKeyName, string foreignTableSchema, + string foreignTableName, string foreignColumnName) + { + var fk = new CreateForeignKeyExpression(_context, _supportedDatabaseTypes, new ForeignKeyDefinition + { + Name = foreignKeyName, + PrimaryTable = Expression.TableName, + PrimaryTableSchema = Expression.SchemaName, + ForeignTable = foreignTableName, + ForeignTableSchema = foreignTableSchema + }); + + fk.ForeignKey.PrimaryColumns.Add(Expression.Column.Name); + fk.ForeignKey.ForeignColumns.Add(foreignColumnName); + + _context.Expressions.Add(fk); + CurrentForeignKey = fk.ForeignKey; + return this; + } + + public ICreateColumnOptionForeignKeyCascadeSyntax OnDelete(Rule rule) + { + CurrentForeignKey.OnDelete = rule; + return this; + } + + public ICreateColumnOptionForeignKeyCascadeSyntax OnUpdate(Rule rule) + { + CurrentForeignKey.OnUpdate = rule; + return this; + } + + public ICreateColumnOptionSyntax OnDeleteOrUpdate(Rule rule) + { + OnDelete(rule); + OnUpdate(rule); + return this; + } + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Column/ICreateColumnOnTableSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Create/Column/ICreateColumnOnTableSyntax.cs similarity index 68% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Column/ICreateColumnOnTableSyntax.cs rename to src/Umbraco.Core/Migrations/Syntax/Create/Column/ICreateColumnOnTableSyntax.cs index 099be3cad6..ef2d72a210 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Column/ICreateColumnOnTableSyntax.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Create/Column/ICreateColumnOnTableSyntax.cs @@ -1,7 +1,7 @@ -namespace Umbraco.Core.Persistence.Migrations.Syntax.Create.Column -{ - public interface ICreateColumnOnTableSyntax : IColumnTypeSyntax - { - ICreateColumnTypeSyntax OnTable(string name); - } -} +namespace Umbraco.Core.Migrations.Syntax.Create.Column +{ + public interface ICreateColumnOnTableSyntax : IColumnTypeSyntax + { + ICreateColumnTypeSyntax OnTable(string name); + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Column/ICreateColumnOptionForeignKeyCascadeSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Create/Column/ICreateColumnOptionForeignKeyCascadeSyntax.cs similarity index 77% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Column/ICreateColumnOptionForeignKeyCascadeSyntax.cs rename to src/Umbraco.Core/Migrations/Syntax/Create/Column/ICreateColumnOptionForeignKeyCascadeSyntax.cs index 4ded8def39..29bacacce4 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Column/ICreateColumnOptionForeignKeyCascadeSyntax.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Create/Column/ICreateColumnOptionForeignKeyCascadeSyntax.cs @@ -1,8 +1,8 @@ -namespace Umbraco.Core.Persistence.Migrations.Syntax.Create.Column -{ - public interface ICreateColumnOptionForeignKeyCascadeSyntax : ICreateColumnOptionSyntax, - IForeignKeyCascadeSyntax - { - - } -} +namespace Umbraco.Core.Migrations.Syntax.Create.Column +{ + public interface ICreateColumnOptionForeignKeyCascadeSyntax : ICreateColumnOptionSyntax, + IForeignKeyCascadeSyntax + { + + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Column/ICreateColumnOptionSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Create/Column/ICreateColumnOptionSyntax.cs similarity index 67% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Column/ICreateColumnOptionSyntax.cs rename to src/Umbraco.Core/Migrations/Syntax/Create/Column/ICreateColumnOptionSyntax.cs index a8924f5bbe..b5a1764985 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Column/ICreateColumnOptionSyntax.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Create/Column/ICreateColumnOptionSyntax.cs @@ -1,7 +1,7 @@ -namespace Umbraco.Core.Persistence.Migrations.Syntax.Create.Column -{ - public interface ICreateColumnOptionSyntax : IColumnOptionSyntax - { - - } -} +namespace Umbraco.Core.Migrations.Syntax.Create.Column +{ + public interface ICreateColumnOptionSyntax : IColumnOptionSyntax + { + + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Column/ICreateColumnTypeSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Create/Column/ICreateColumnTypeSyntax.cs similarity index 58% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Column/ICreateColumnTypeSyntax.cs rename to src/Umbraco.Core/Migrations/Syntax/Create/Column/ICreateColumnTypeSyntax.cs index 15562f9a58..7a5e60cb08 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Column/ICreateColumnTypeSyntax.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Create/Column/ICreateColumnTypeSyntax.cs @@ -1,7 +1,7 @@ -namespace Umbraco.Core.Persistence.Migrations.Syntax.Create.Column -{ - public interface ICreateColumnTypeSyntax : IColumnTypeSyntax - { - - } -} +namespace Umbraco.Core.Migrations.Syntax.Create.Column +{ + public interface ICreateColumnTypeSyntax : IColumnTypeSyntax + { + + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Constraint/CreateConstraintBuilder.cs b/src/Umbraco.Core/Migrations/Syntax/Create/Constraint/CreateConstraintBuilder.cs similarity index 83% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Constraint/CreateConstraintBuilder.cs rename to src/Umbraco.Core/Migrations/Syntax/Create/Constraint/CreateConstraintBuilder.cs index 049124411d..73ce66f4bc 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Constraint/CreateConstraintBuilder.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Create/Constraint/CreateConstraintBuilder.cs @@ -1,32 +1,32 @@ -using Umbraco.Core.Persistence.Migrations.Syntax.Create.Expressions; - -namespace Umbraco.Core.Persistence.Migrations.Syntax.Create.Constraint -{ - public class CreateConstraintBuilder : ExpressionBuilderBase, - ICreateConstraintOnTableSyntax, - ICreateConstraintColumnsSyntax - { - public CreateConstraintBuilder(CreateConstraintExpression expression) : base(expression) - { - } - - public ICreateConstraintColumnsSyntax OnTable(string tableName) - { - Expression.Constraint.TableName = tableName; - return this; - } - - public void Column(string columnName) - { - Expression.Constraint.Columns.Add(columnName); - } - - public void Columns(string[] columnNames) - { - foreach (var columnName in columnNames) - { - Expression.Constraint.Columns.Add(columnName); - } - } - } -} +using Umbraco.Core.Migrations.Syntax.Create.Expressions; + +namespace Umbraco.Core.Migrations.Syntax.Create.Constraint +{ + public class CreateConstraintBuilder : ExpressionBuilderBase, + ICreateConstraintOnTableSyntax, + ICreateConstraintColumnsSyntax + { + public CreateConstraintBuilder(CreateConstraintExpression expression) : base(expression) + { + } + + public ICreateConstraintColumnsSyntax OnTable(string tableName) + { + Expression.Constraint.TableName = tableName; + return this; + } + + public void Column(string columnName) + { + Expression.Constraint.Columns.Add(columnName); + } + + public void Columns(string[] columnNames) + { + foreach (var columnName in columnNames) + { + Expression.Constraint.Columns.Add(columnName); + } + } + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Constraint/ICreateConstraintColumnsSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Create/Constraint/ICreateConstraintColumnsSyntax.cs similarity index 67% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Constraint/ICreateConstraintColumnsSyntax.cs rename to src/Umbraco.Core/Migrations/Syntax/Create/Constraint/ICreateConstraintColumnsSyntax.cs index 0aebd42550..4690e1dc6e 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Constraint/ICreateConstraintColumnsSyntax.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Create/Constraint/ICreateConstraintColumnsSyntax.cs @@ -1,8 +1,8 @@ -namespace Umbraco.Core.Persistence.Migrations.Syntax.Create.Constraint -{ - public interface ICreateConstraintColumnsSyntax : IFluentSyntax - { - void Column(string columnName); - void Columns(string[] columnNames); - } -} +namespace Umbraco.Core.Migrations.Syntax.Create.Constraint +{ + public interface ICreateConstraintColumnsSyntax : IFluentSyntax + { + void Column(string columnName); + void Columns(string[] columnNames); + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Constraint/ICreateConstraintOnTableSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Create/Constraint/ICreateConstraintOnTableSyntax.cs similarity index 64% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Constraint/ICreateConstraintOnTableSyntax.cs rename to src/Umbraco.Core/Migrations/Syntax/Create/Constraint/ICreateConstraintOnTableSyntax.cs index d565f56c4e..0655592a22 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Constraint/ICreateConstraintOnTableSyntax.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Create/Constraint/ICreateConstraintOnTableSyntax.cs @@ -1,7 +1,7 @@ -namespace Umbraco.Core.Persistence.Migrations.Syntax.Create.Constraint -{ - public interface ICreateConstraintOnTableSyntax : IFluentSyntax - { - ICreateConstraintColumnsSyntax OnTable(string tableName); - } -} +namespace Umbraco.Core.Migrations.Syntax.Create.Constraint +{ + public interface ICreateConstraintOnTableSyntax : IFluentSyntax + { + ICreateConstraintColumnsSyntax OnTable(string tableName); + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/CreateBuilder.cs b/src/Umbraco.Core/Migrations/Syntax/Create/CreateBuilder.cs similarity index 89% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Create/CreateBuilder.cs rename to src/Umbraco.Core/Migrations/Syntax/Create/CreateBuilder.cs index e84d924001..f7fa947898 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/CreateBuilder.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Create/CreateBuilder.cs @@ -1,152 +1,152 @@ -using System; -using NPoco; -using Umbraco.Core.Persistence.DatabaseModelDefinitions; -using Umbraco.Core.Persistence.Migrations.Syntax.Create.Column; -using Umbraco.Core.Persistence.Migrations.Syntax.Create.Constraint; -using Umbraco.Core.Persistence.Migrations.Syntax.Create.Expressions; -using Umbraco.Core.Persistence.Migrations.Syntax.Create.ForeignKey; -using Umbraco.Core.Persistence.Migrations.Syntax.Create.Index; -using Umbraco.Core.Persistence.Migrations.Syntax.Create.Table; -using Umbraco.Core.Persistence.Migrations.Syntax.Execute.Expressions; -using Umbraco.Core.Persistence.Migrations.Syntax.Expressions; -using Umbraco.Core.Persistence.SqlSyntax; - -namespace Umbraco.Core.Persistence.Migrations.Syntax.Create -{ - public class CreateBuilder : ICreateBuilder - { - private readonly IMigrationContext _context; - private readonly DatabaseType[] _supportedDatabaseTypes; - - public CreateBuilder(IMigrationContext context, params DatabaseType[] supportedDatabaseTypes) - { - _context = context ?? throw new ArgumentNullException(nameof(context)); - _supportedDatabaseTypes = supportedDatabaseTypes; - } - - private ISqlSyntaxProvider SqlSyntax => _context.Database.SqlContext.SqlSyntax; - - public void Table(bool withoutKeysAndIndexes = false) - { - var tableDefinition = DefinitionFactory.GetTableDefinition(typeof(T), SqlSyntax); - - AddSql(SqlSyntax.Format(tableDefinition)); - if (withoutKeysAndIndexes) - return; - - AddSql(SqlSyntax.FormatPrimaryKey(tableDefinition)); - foreach (var sql in SqlSyntax.Format(tableDefinition.ForeignKeys)) - AddSql(sql); - foreach (var sql in SqlSyntax.Format(tableDefinition.Indexes)) - AddSql(sql); - } - - public void KeysAndIndexes() - { - var tableDefinition = DefinitionFactory.GetTableDefinition(typeof(T), SqlSyntax); - - AddSql(SqlSyntax.FormatPrimaryKey(tableDefinition)); - foreach (var sql in SqlSyntax.Format(tableDefinition.Indexes)) - AddSql(sql); - foreach (var sql in SqlSyntax.Format(tableDefinition.ForeignKeys)) - AddSql(sql); - } - - public void KeysAndIndexes(Type typeOfDto) - { - var tableDefinition = DefinitionFactory.GetTableDefinition(typeOfDto, SqlSyntax); - - AddSql(SqlSyntax.FormatPrimaryKey(tableDefinition)); - foreach (var sql in SqlSyntax.Format(tableDefinition.Indexes)) - AddSql(sql); - foreach (var sql in SqlSyntax.Format(tableDefinition.ForeignKeys)) - AddSql(sql); - } - - private void AddSql(string sql) - { - var expression = new ExecuteSqlStatementExpression(_context, _supportedDatabaseTypes) { SqlStatement = sql }; - _context.Expressions.Add(expression); - } - - public ICreateTableWithColumnSyntax Table(string tableName) - { - var expression = new CreateTableExpression(_context, _supportedDatabaseTypes) { TableName = tableName }; - _context.Expressions.Add(expression); - return new CreateTableBuilder(_context, _supportedDatabaseTypes, expression); - } - - public ICreateColumnOnTableSyntax Column(string columnName) - { - var expression = new CreateColumnExpression(_context, _supportedDatabaseTypes) { Column = { Name = columnName } }; - _context.Expressions.Add(expression); - return new CreateColumnBuilder(_context, _supportedDatabaseTypes, expression); - } - - public ICreateForeignKeyFromTableSyntax ForeignKey() - { - var expression = new CreateForeignKeyExpression(_context, _supportedDatabaseTypes); - _context.Expressions.Add(expression); - return new CreateForeignKeyBuilder(expression); - } - - public ICreateForeignKeyFromTableSyntax ForeignKey(string foreignKeyName) - { - var expression = new CreateForeignKeyExpression(_context, _supportedDatabaseTypes) { ForeignKey = { Name = foreignKeyName } }; - _context.Expressions.Add(expression); - return new CreateForeignKeyBuilder(expression); - } - - public ICreateIndexForTableSyntax Index() - { - var expression = new CreateIndexExpression(_context, _supportedDatabaseTypes); - _context.Expressions.Add(expression); - return new CreateIndexBuilder(expression); - } - - public ICreateIndexForTableSyntax Index(string indexName) - { - var expression = new CreateIndexExpression(_context, _supportedDatabaseTypes) { Index = { Name = indexName } }; - _context.Expressions.Add(expression); - return new CreateIndexBuilder(expression); - } - - public ICreateConstraintOnTableSyntax PrimaryKey() - { - var expression = new CreateConstraintExpression(_context, _supportedDatabaseTypes, ConstraintType.PrimaryKey); - _context.Expressions.Add(expression); - return new CreateConstraintBuilder(expression); - } - - public ICreateConstraintOnTableSyntax PrimaryKey(string primaryKeyName) - { - var expression = new CreateConstraintExpression(_context, _supportedDatabaseTypes, ConstraintType.PrimaryKey); - expression.Constraint.ConstraintName = primaryKeyName; - _context.Expressions.Add(expression); - return new CreateConstraintBuilder(expression); - } - - public ICreateConstraintOnTableSyntax UniqueConstraint() - { - var expression = new CreateConstraintExpression(_context, _supportedDatabaseTypes, ConstraintType.Unique); - _context.Expressions.Add(expression); - return new CreateConstraintBuilder(expression); - } - - public ICreateConstraintOnTableSyntax UniqueConstraint(string constraintName) - { - var expression = new CreateConstraintExpression(_context, _supportedDatabaseTypes, ConstraintType.Unique); - expression.Constraint.ConstraintName = constraintName; - _context.Expressions.Add(expression); - return new CreateConstraintBuilder(expression); - } - - public ICreateConstraintOnTableSyntax Constraint(string constraintName) - { - var expression = new CreateConstraintExpression(_context, _supportedDatabaseTypes, ConstraintType.NonUnique); - expression.Constraint.ConstraintName = constraintName; - _context.Expressions.Add(expression); - return new CreateConstraintBuilder(expression); - } - } -} +using System; +using NPoco; +using Umbraco.Core.Migrations.Syntax.Create.Column; +using Umbraco.Core.Migrations.Syntax.Create.Constraint; +using Umbraco.Core.Migrations.Syntax.Create.Expressions; +using Umbraco.Core.Migrations.Syntax.Create.ForeignKey; +using Umbraco.Core.Migrations.Syntax.Create.Index; +using Umbraco.Core.Migrations.Syntax.Create.Table; +using Umbraco.Core.Migrations.Syntax.Execute.Expressions; +using Umbraco.Core.Migrations.Syntax.Expressions; +using Umbraco.Core.Persistence.DatabaseModelDefinitions; +using Umbraco.Core.Persistence.SqlSyntax; + +namespace Umbraco.Core.Migrations.Syntax.Create +{ + public class CreateBuilder : ICreateBuilder + { + private readonly IMigrationContext _context; + private readonly DatabaseType[] _supportedDatabaseTypes; + + public CreateBuilder(IMigrationContext context, params DatabaseType[] supportedDatabaseTypes) + { + _context = context ?? throw new ArgumentNullException(nameof(context)); + _supportedDatabaseTypes = supportedDatabaseTypes; + } + + private ISqlSyntaxProvider SqlSyntax => _context.Database.SqlContext.SqlSyntax; + + public void Table(bool withoutKeysAndIndexes = false) + { + var tableDefinition = DefinitionFactory.GetTableDefinition(typeof(T), SqlSyntax); + + AddSql(SqlSyntax.Format(tableDefinition)); + if (withoutKeysAndIndexes) + return; + + AddSql(SqlSyntax.FormatPrimaryKey(tableDefinition)); + foreach (var sql in SqlSyntax.Format(tableDefinition.ForeignKeys)) + AddSql(sql); + foreach (var sql in SqlSyntax.Format(tableDefinition.Indexes)) + AddSql(sql); + } + + public void KeysAndIndexes() + { + var tableDefinition = DefinitionFactory.GetTableDefinition(typeof(T), SqlSyntax); + + AddSql(SqlSyntax.FormatPrimaryKey(tableDefinition)); + foreach (var sql in SqlSyntax.Format(tableDefinition.Indexes)) + AddSql(sql); + foreach (var sql in SqlSyntax.Format(tableDefinition.ForeignKeys)) + AddSql(sql); + } + + public void KeysAndIndexes(Type typeOfDto) + { + var tableDefinition = DefinitionFactory.GetTableDefinition(typeOfDto, SqlSyntax); + + AddSql(SqlSyntax.FormatPrimaryKey(tableDefinition)); + foreach (var sql in SqlSyntax.Format(tableDefinition.Indexes)) + AddSql(sql); + foreach (var sql in SqlSyntax.Format(tableDefinition.ForeignKeys)) + AddSql(sql); + } + + private void AddSql(string sql) + { + var expression = new ExecuteSqlStatementExpression(_context, _supportedDatabaseTypes) { SqlStatement = sql }; + _context.Expressions.Add(expression); + } + + public ICreateTableWithColumnSyntax Table(string tableName) + { + var expression = new CreateTableExpression(_context, _supportedDatabaseTypes) { TableName = tableName }; + _context.Expressions.Add(expression); + return new CreateTableBuilder(_context, _supportedDatabaseTypes, expression); + } + + public ICreateColumnOnTableSyntax Column(string columnName) + { + var expression = new CreateColumnExpression(_context, _supportedDatabaseTypes) { Column = { Name = columnName } }; + _context.Expressions.Add(expression); + return new CreateColumnBuilder(_context, _supportedDatabaseTypes, expression); + } + + public ICreateForeignKeyFromTableSyntax ForeignKey() + { + var expression = new CreateForeignKeyExpression(_context, _supportedDatabaseTypes); + _context.Expressions.Add(expression); + return new CreateForeignKeyBuilder(expression); + } + + public ICreateForeignKeyFromTableSyntax ForeignKey(string foreignKeyName) + { + var expression = new CreateForeignKeyExpression(_context, _supportedDatabaseTypes) { ForeignKey = { Name = foreignKeyName } }; + _context.Expressions.Add(expression); + return new CreateForeignKeyBuilder(expression); + } + + public ICreateIndexForTableSyntax Index() + { + var expression = new CreateIndexExpression(_context, _supportedDatabaseTypes); + _context.Expressions.Add(expression); + return new CreateIndexBuilder(expression); + } + + public ICreateIndexForTableSyntax Index(string indexName) + { + var expression = new CreateIndexExpression(_context, _supportedDatabaseTypes) { Index = { Name = indexName } }; + _context.Expressions.Add(expression); + return new CreateIndexBuilder(expression); + } + + public ICreateConstraintOnTableSyntax PrimaryKey() + { + var expression = new CreateConstraintExpression(_context, _supportedDatabaseTypes, ConstraintType.PrimaryKey); + _context.Expressions.Add(expression); + return new CreateConstraintBuilder(expression); + } + + public ICreateConstraintOnTableSyntax PrimaryKey(string primaryKeyName) + { + var expression = new CreateConstraintExpression(_context, _supportedDatabaseTypes, ConstraintType.PrimaryKey); + expression.Constraint.ConstraintName = primaryKeyName; + _context.Expressions.Add(expression); + return new CreateConstraintBuilder(expression); + } + + public ICreateConstraintOnTableSyntax UniqueConstraint() + { + var expression = new CreateConstraintExpression(_context, _supportedDatabaseTypes, ConstraintType.Unique); + _context.Expressions.Add(expression); + return new CreateConstraintBuilder(expression); + } + + public ICreateConstraintOnTableSyntax UniqueConstraint(string constraintName) + { + var expression = new CreateConstraintExpression(_context, _supportedDatabaseTypes, ConstraintType.Unique); + expression.Constraint.ConstraintName = constraintName; + _context.Expressions.Add(expression); + return new CreateConstraintBuilder(expression); + } + + public ICreateConstraintOnTableSyntax Constraint(string constraintName) + { + var expression = new CreateConstraintExpression(_context, _supportedDatabaseTypes, ConstraintType.NonUnique); + expression.Constraint.ConstraintName = constraintName; + _context.Expressions.Add(expression); + return new CreateConstraintBuilder(expression); + } + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Expressions/CreateConstraintExpression.cs b/src/Umbraco.Core/Migrations/Syntax/Create/Expressions/CreateConstraintExpression.cs similarity index 92% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Expressions/CreateConstraintExpression.cs rename to src/Umbraco.Core/Migrations/Syntax/Create/Expressions/CreateConstraintExpression.cs index 42fe29ae1f..fb8f0233d0 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Expressions/CreateConstraintExpression.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Create/Expressions/CreateConstraintExpression.cs @@ -1,42 +1,42 @@ -using System.Linq; -using NPoco; -using Umbraco.Core.Persistence.DatabaseModelDefinitions; - -namespace Umbraco.Core.Persistence.Migrations.Syntax.Create.Expressions -{ - public class CreateConstraintExpression : MigrationExpressionBase - { - public CreateConstraintExpression(IMigrationContext context, DatabaseType[] supportedDatabaseTypes, ConstraintType constraint) - : base(context, supportedDatabaseTypes) - { - Constraint = new ConstraintDefinition(constraint); - } - - - public ConstraintDefinition Constraint { get; private set; } - - public override string ToString() - { - var constraintType = (Constraint.IsPrimaryKeyConstraint) ? "PRIMARY KEY" : "UNIQUE"; - - if (Constraint.IsPrimaryKeyConstraint && SqlSyntax.SupportsClustered()) - constraintType += " CLUSTERED"; - - if (Constraint.IsNonUniqueConstraint) - constraintType = string.Empty; - - var columns = new string[Constraint.Columns.Count]; - - for (var i = 0; i < Constraint.Columns.Count; i++) - { - columns[i] = SqlSyntax.GetQuotedColumnName(Constraint.Columns.ElementAt(i)); - } - - return string.Format(SqlSyntax.CreateConstraint, - SqlSyntax.GetQuotedTableName(Constraint.TableName), - SqlSyntax.GetQuotedName(Constraint.ConstraintName), - constraintType, - string.Join(", ", columns)); - } - } -} +using System.Linq; +using NPoco; +using Umbraco.Core.Persistence.DatabaseModelDefinitions; + +namespace Umbraco.Core.Migrations.Syntax.Create.Expressions +{ + public class CreateConstraintExpression : MigrationExpressionBase + { + public CreateConstraintExpression(IMigrationContext context, DatabaseType[] supportedDatabaseTypes, ConstraintType constraint) + : base(context, supportedDatabaseTypes) + { + Constraint = new ConstraintDefinition(constraint); + } + + + public ConstraintDefinition Constraint { get; private set; } + + public override string ToString() + { + var constraintType = (Constraint.IsPrimaryKeyConstraint) ? "PRIMARY KEY" : "UNIQUE"; + + if (Constraint.IsPrimaryKeyConstraint && SqlSyntax.SupportsClustered()) + constraintType += " CLUSTERED"; + + if (Constraint.IsNonUniqueConstraint) + constraintType = string.Empty; + + var columns = new string[Constraint.Columns.Count]; + + for (var i = 0; i < Constraint.Columns.Count; i++) + { + columns[i] = SqlSyntax.GetQuotedColumnName(Constraint.Columns.ElementAt(i)); + } + + return string.Format(SqlSyntax.CreateConstraint, + SqlSyntax.GetQuotedTableName(Constraint.TableName), + SqlSyntax.GetQuotedName(Constraint.ConstraintName), + constraintType, + string.Join(", ", columns)); + } + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Expressions/CreateTableExpression.cs b/src/Umbraco.Core/Migrations/Syntax/Create/Expressions/CreateTableExpression.cs similarity index 89% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Expressions/CreateTableExpression.cs rename to src/Umbraco.Core/Migrations/Syntax/Create/Expressions/CreateTableExpression.cs index 628c0710ed..2889ada3d2 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Expressions/CreateTableExpression.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Create/Expressions/CreateTableExpression.cs @@ -1,26 +1,26 @@ -using System.Collections.Generic; -using NPoco; -using Umbraco.Core.Persistence.DatabaseModelDefinitions; - -namespace Umbraco.Core.Persistence.Migrations.Syntax.Create.Expressions -{ - public class CreateTableExpression : MigrationExpressionBase - { - public CreateTableExpression(IMigrationContext context, DatabaseType[] supportedDatabaseTypes) - : base(context, supportedDatabaseTypes) - { - Columns = new List(); - } - - public virtual string SchemaName { get; set; } - public virtual string TableName { get; set; } - public virtual IList Columns { get; set; } - - public override string ToString() - { - var table = new TableDefinition { Name = TableName, SchemaName = SchemaName, Columns = Columns }; - - return string.Format(SqlSyntax.Format(table)); - } - } -} +using System.Collections.Generic; +using NPoco; +using Umbraco.Core.Persistence.DatabaseModelDefinitions; + +namespace Umbraco.Core.Migrations.Syntax.Create.Expressions +{ + public class CreateTableExpression : MigrationExpressionBase + { + public CreateTableExpression(IMigrationContext context, DatabaseType[] supportedDatabaseTypes) + : base(context, supportedDatabaseTypes) + { + Columns = new List(); + } + + public virtual string SchemaName { get; set; } + public virtual string TableName { get; set; } + public virtual IList Columns { get; set; } + + public override string ToString() + { + var table = new TableDefinition { Name = TableName, SchemaName = SchemaName, Columns = Columns }; + + return string.Format(SqlSyntax.Format(table)); + } + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/ForeignKey/CreateForeignKeyBuilder.cs b/src/Umbraco.Core/Migrations/Syntax/Create/ForeignKey/CreateForeignKeyBuilder.cs similarity index 91% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Create/ForeignKey/CreateForeignKeyBuilder.cs rename to src/Umbraco.Core/Migrations/Syntax/Create/ForeignKey/CreateForeignKeyBuilder.cs index 8742e99ad4..07f9b8ec34 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/ForeignKey/CreateForeignKeyBuilder.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Create/ForeignKey/CreateForeignKeyBuilder.cs @@ -1,73 +1,73 @@ -using System.Data; -using Umbraco.Core.Persistence.Migrations.Syntax.Expressions; - -namespace Umbraco.Core.Persistence.Migrations.Syntax.Create.ForeignKey -{ - public class CreateForeignKeyBuilder : ExpressionBuilderBase, - ICreateForeignKeyFromTableSyntax, - ICreateForeignKeyForeignColumnSyntax, - ICreateForeignKeyToTableSyntax, - ICreateForeignKeyPrimaryColumnSyntax, - ICreateForeignKeyCascadeSyntax - { - public CreateForeignKeyBuilder(CreateForeignKeyExpression expression) : base(expression) - { - } - - public ICreateForeignKeyForeignColumnSyntax FromTable(string table) - { - Expression.ForeignKey.ForeignTable = table; - return this; - } - - public ICreateForeignKeyToTableSyntax ForeignColumn(string column) - { - Expression.ForeignKey.ForeignColumns.Add(column); - return this; - } - - public ICreateForeignKeyToTableSyntax ForeignColumns(params string[] columns) - { - foreach (var column in columns) - Expression.ForeignKey.ForeignColumns.Add(column); - return this; - } - - public ICreateForeignKeyPrimaryColumnSyntax ToTable(string table) - { - Expression.ForeignKey.PrimaryTable = table; - return this; - } - - public ICreateForeignKeyCascadeSyntax PrimaryColumn(string column) - { - Expression.ForeignKey.PrimaryColumns.Add(column); - return this; - } - - public ICreateForeignKeyCascadeSyntax PrimaryColumns(params string[] columns) - { - foreach (var column in columns) - Expression.ForeignKey.PrimaryColumns.Add(column); - return this; - } - - public ICreateForeignKeyCascadeSyntax OnDelete(Rule rule) - { - Expression.ForeignKey.OnDelete = rule; - return this; - } - - public ICreateForeignKeyCascadeSyntax OnUpdate(Rule rule) - { - Expression.ForeignKey.OnUpdate = rule; - return this; - } - - public void OnDeleteOrUpdate(Rule rule) - { - Expression.ForeignKey.OnDelete = rule; - Expression.ForeignKey.OnUpdate = rule; - } - } -} +using System.Data; +using Umbraco.Core.Migrations.Syntax.Expressions; + +namespace Umbraco.Core.Migrations.Syntax.Create.ForeignKey +{ + public class CreateForeignKeyBuilder : ExpressionBuilderBase, + ICreateForeignKeyFromTableSyntax, + ICreateForeignKeyForeignColumnSyntax, + ICreateForeignKeyToTableSyntax, + ICreateForeignKeyPrimaryColumnSyntax, + ICreateForeignKeyCascadeSyntax + { + public CreateForeignKeyBuilder(CreateForeignKeyExpression expression) : base(expression) + { + } + + public ICreateForeignKeyForeignColumnSyntax FromTable(string table) + { + Expression.ForeignKey.ForeignTable = table; + return this; + } + + public ICreateForeignKeyToTableSyntax ForeignColumn(string column) + { + Expression.ForeignKey.ForeignColumns.Add(column); + return this; + } + + public ICreateForeignKeyToTableSyntax ForeignColumns(params string[] columns) + { + foreach (var column in columns) + Expression.ForeignKey.ForeignColumns.Add(column); + return this; + } + + public ICreateForeignKeyPrimaryColumnSyntax ToTable(string table) + { + Expression.ForeignKey.PrimaryTable = table; + return this; + } + + public ICreateForeignKeyCascadeSyntax PrimaryColumn(string column) + { + Expression.ForeignKey.PrimaryColumns.Add(column); + return this; + } + + public ICreateForeignKeyCascadeSyntax PrimaryColumns(params string[] columns) + { + foreach (var column in columns) + Expression.ForeignKey.PrimaryColumns.Add(column); + return this; + } + + public ICreateForeignKeyCascadeSyntax OnDelete(Rule rule) + { + Expression.ForeignKey.OnDelete = rule; + return this; + } + + public ICreateForeignKeyCascadeSyntax OnUpdate(Rule rule) + { + Expression.ForeignKey.OnUpdate = rule; + return this; + } + + public void OnDeleteOrUpdate(Rule rule) + { + Expression.ForeignKey.OnDelete = rule; + Expression.ForeignKey.OnUpdate = rule; + } + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/ForeignKey/ICreateForeignKeyCascadeSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Create/ForeignKey/ICreateForeignKeyCascadeSyntax.cs similarity index 76% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Create/ForeignKey/ICreateForeignKeyCascadeSyntax.cs rename to src/Umbraco.Core/Migrations/Syntax/Create/ForeignKey/ICreateForeignKeyCascadeSyntax.cs index 915968773f..324e5684de 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/ForeignKey/ICreateForeignKeyCascadeSyntax.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Create/ForeignKey/ICreateForeignKeyCascadeSyntax.cs @@ -1,11 +1,11 @@ -using System.Data; - -namespace Umbraco.Core.Persistence.Migrations.Syntax.Create.ForeignKey -{ - public interface ICreateForeignKeyCascadeSyntax : IFluentSyntax - { - ICreateForeignKeyCascadeSyntax OnDelete(Rule rule); - ICreateForeignKeyCascadeSyntax OnUpdate(Rule rule); - void OnDeleteOrUpdate(Rule rule); - } -} +using System.Data; + +namespace Umbraco.Core.Migrations.Syntax.Create.ForeignKey +{ + public interface ICreateForeignKeyCascadeSyntax : IFluentSyntax + { + ICreateForeignKeyCascadeSyntax OnDelete(Rule rule); + ICreateForeignKeyCascadeSyntax OnUpdate(Rule rule); + void OnDeleteOrUpdate(Rule rule); + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/ForeignKey/ICreateForeignKeyForeignColumnSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Create/ForeignKey/ICreateForeignKeyForeignColumnSyntax.cs similarity index 74% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Create/ForeignKey/ICreateForeignKeyForeignColumnSyntax.cs rename to src/Umbraco.Core/Migrations/Syntax/Create/ForeignKey/ICreateForeignKeyForeignColumnSyntax.cs index 1bc60e311e..fb46976c04 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/ForeignKey/ICreateForeignKeyForeignColumnSyntax.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Create/ForeignKey/ICreateForeignKeyForeignColumnSyntax.cs @@ -1,8 +1,8 @@ -namespace Umbraco.Core.Persistence.Migrations.Syntax.Create.ForeignKey -{ - public interface ICreateForeignKeyForeignColumnSyntax : IFluentSyntax - { - ICreateForeignKeyToTableSyntax ForeignColumn(string column); - ICreateForeignKeyToTableSyntax ForeignColumns(params string[] columns); - } -} +namespace Umbraco.Core.Migrations.Syntax.Create.ForeignKey +{ + public interface ICreateForeignKeyForeignColumnSyntax : IFluentSyntax + { + ICreateForeignKeyToTableSyntax ForeignColumn(string column); + ICreateForeignKeyToTableSyntax ForeignColumns(params string[] columns); + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/ForeignKey/ICreateForeignKeyFromTableSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Create/ForeignKey/ICreateForeignKeyFromTableSyntax.cs similarity index 65% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Create/ForeignKey/ICreateForeignKeyFromTableSyntax.cs rename to src/Umbraco.Core/Migrations/Syntax/Create/ForeignKey/ICreateForeignKeyFromTableSyntax.cs index cf420487c5..676aa891d2 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/ForeignKey/ICreateForeignKeyFromTableSyntax.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Create/ForeignKey/ICreateForeignKeyFromTableSyntax.cs @@ -1,7 +1,7 @@ -namespace Umbraco.Core.Persistence.Migrations.Syntax.Create.ForeignKey -{ - public interface ICreateForeignKeyFromTableSyntax : IFluentSyntax - { - ICreateForeignKeyForeignColumnSyntax FromTable(string table); - } -} +namespace Umbraco.Core.Migrations.Syntax.Create.ForeignKey +{ + public interface ICreateForeignKeyFromTableSyntax : IFluentSyntax + { + ICreateForeignKeyForeignColumnSyntax FromTable(string table); + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/ForeignKey/ICreateForeignKeyPrimaryColumnSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Create/ForeignKey/ICreateForeignKeyPrimaryColumnSyntax.cs similarity index 74% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Create/ForeignKey/ICreateForeignKeyPrimaryColumnSyntax.cs rename to src/Umbraco.Core/Migrations/Syntax/Create/ForeignKey/ICreateForeignKeyPrimaryColumnSyntax.cs index 02e449b8a1..e61a3f4334 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/ForeignKey/ICreateForeignKeyPrimaryColumnSyntax.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Create/ForeignKey/ICreateForeignKeyPrimaryColumnSyntax.cs @@ -1,8 +1,8 @@ -namespace Umbraco.Core.Persistence.Migrations.Syntax.Create.ForeignKey -{ - public interface ICreateForeignKeyPrimaryColumnSyntax : IFluentSyntax - { - ICreateForeignKeyCascadeSyntax PrimaryColumn(string column); - ICreateForeignKeyCascadeSyntax PrimaryColumns(params string[] columns); - } -} +namespace Umbraco.Core.Migrations.Syntax.Create.ForeignKey +{ + public interface ICreateForeignKeyPrimaryColumnSyntax : IFluentSyntax + { + ICreateForeignKeyCascadeSyntax PrimaryColumn(string column); + ICreateForeignKeyCascadeSyntax PrimaryColumns(params string[] columns); + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/ForeignKey/ICreateForeignKeyToTableSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Create/ForeignKey/ICreateForeignKeyToTableSyntax.cs similarity index 65% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Create/ForeignKey/ICreateForeignKeyToTableSyntax.cs rename to src/Umbraco.Core/Migrations/Syntax/Create/ForeignKey/ICreateForeignKeyToTableSyntax.cs index d2d614feb6..813fe6be3d 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/ForeignKey/ICreateForeignKeyToTableSyntax.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Create/ForeignKey/ICreateForeignKeyToTableSyntax.cs @@ -1,7 +1,7 @@ -namespace Umbraco.Core.Persistence.Migrations.Syntax.Create.ForeignKey -{ - public interface ICreateForeignKeyToTableSyntax : IFluentSyntax - { - ICreateForeignKeyPrimaryColumnSyntax ToTable(string table); - } -} +namespace Umbraco.Core.Migrations.Syntax.Create.ForeignKey +{ + public interface ICreateForeignKeyToTableSyntax : IFluentSyntax + { + ICreateForeignKeyPrimaryColumnSyntax ToTable(string table); + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/ICreateBuilder.cs b/src/Umbraco.Core/Migrations/Syntax/Create/ICreateBuilder.cs similarity index 68% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Create/ICreateBuilder.cs rename to src/Umbraco.Core/Migrations/Syntax/Create/ICreateBuilder.cs index e9c43dec36..41a06145f8 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/ICreateBuilder.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Create/ICreateBuilder.cs @@ -1,32 +1,32 @@ -using System; -using Umbraco.Core.Persistence.Migrations.Syntax.Create.Column; -using Umbraco.Core.Persistence.Migrations.Syntax.Create.Constraint; -using Umbraco.Core.Persistence.Migrations.Syntax.Create.ForeignKey; -using Umbraco.Core.Persistence.Migrations.Syntax.Create.Index; -using Umbraco.Core.Persistence.Migrations.Syntax.Create.Table; - -namespace Umbraco.Core.Persistence.Migrations.Syntax.Create -{ - public interface ICreateBuilder : IFluentSyntax - { - void Table(bool withoutKeysAndIndexes = false); - void KeysAndIndexes(); - void KeysAndIndexes(Type typeOfDto); - - ICreateTableWithColumnSyntax Table(string tableName); - ICreateColumnOnTableSyntax Column(string columnName); - - ICreateForeignKeyFromTableSyntax ForeignKey(); - ICreateForeignKeyFromTableSyntax ForeignKey(string foreignKeyName); - - ICreateIndexForTableSyntax Index(); - ICreateIndexForTableSyntax Index(string indexName); - - ICreateConstraintOnTableSyntax PrimaryKey(); - ICreateConstraintOnTableSyntax PrimaryKey(string primaryKeyName); - - ICreateConstraintOnTableSyntax UniqueConstraint(); - ICreateConstraintOnTableSyntax UniqueConstraint(string constraintName); - ICreateConstraintOnTableSyntax Constraint(string constraintName); - } -} +using System; +using Umbraco.Core.Migrations.Syntax.Create.Column; +using Umbraco.Core.Migrations.Syntax.Create.Constraint; +using Umbraco.Core.Migrations.Syntax.Create.ForeignKey; +using Umbraco.Core.Migrations.Syntax.Create.Index; +using Umbraco.Core.Migrations.Syntax.Create.Table; + +namespace Umbraco.Core.Migrations.Syntax.Create +{ + public interface ICreateBuilder : IFluentSyntax + { + void Table(bool withoutKeysAndIndexes = false); + void KeysAndIndexes(); + void KeysAndIndexes(Type typeOfDto); + + ICreateTableWithColumnSyntax Table(string tableName); + ICreateColumnOnTableSyntax Column(string columnName); + + ICreateForeignKeyFromTableSyntax ForeignKey(); + ICreateForeignKeyFromTableSyntax ForeignKey(string foreignKeyName); + + ICreateIndexForTableSyntax Index(); + ICreateIndexForTableSyntax Index(string indexName); + + ICreateConstraintOnTableSyntax PrimaryKey(); + ICreateConstraintOnTableSyntax PrimaryKey(string primaryKeyName); + + ICreateConstraintOnTableSyntax UniqueConstraint(); + ICreateConstraintOnTableSyntax UniqueConstraint(string constraintName); + ICreateConstraintOnTableSyntax Constraint(string constraintName); + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Index/CreateIndexBuilder.cs b/src/Umbraco.Core/Migrations/Syntax/Create/Index/CreateIndexBuilder.cs similarity index 91% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Index/CreateIndexBuilder.cs rename to src/Umbraco.Core/Migrations/Syntax/Create/Index/CreateIndexBuilder.cs index 49d6c81be9..34c857d798 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Index/CreateIndexBuilder.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Create/Index/CreateIndexBuilder.cs @@ -1,85 +1,85 @@ -using Umbraco.Core.Persistence.DatabaseAnnotations; -using Umbraco.Core.Persistence.DatabaseModelDefinitions; -using Umbraco.Core.Persistence.Migrations.Syntax.Expressions; - -namespace Umbraco.Core.Persistence.Migrations.Syntax.Create.Index -{ - public class CreateIndexBuilder : ExpressionBuilderBase, - ICreateIndexForTableSyntax, - ICreateIndexOnColumnSyntax, - ICreateIndexColumnOptionsSyntax, - ICreateIndexOptionsSyntax - { - public CreateIndexBuilder(CreateIndexExpression expression) : base(expression) - { - } - - public IndexColumnDefinition CurrentColumn { get; set; } - - public ICreateIndexOnColumnSyntax OnTable(string tableName) - { - Expression.Index.TableName = tableName; - return this; - } - - public ICreateIndexColumnOptionsSyntax OnColumn(string columnName) - { - CurrentColumn = new IndexColumnDefinition { Name = columnName }; - Expression.Index.Columns.Add(CurrentColumn); - return this; - } - - public ICreateIndexOptionsSyntax WithOptions() - { - return this; - } - - public ICreateIndexOnColumnSyntax Ascending() - { - CurrentColumn.Direction = Direction.Ascending; - return this; - } - - public ICreateIndexOnColumnSyntax Descending() - { - CurrentColumn.Direction = Direction.Descending; - return this; - } - - ICreateIndexOnColumnSyntax ICreateIndexColumnOptionsSyntax.Unique() - { - Expression.Index.IsUnique = true; - //if it is Unique then it must be unique nonclustered and set the other flags - Expression.Index.IndexType = IndexTypes.UniqueNonClustered; - Expression.Index.IsClustered = false; - return this; - } - - public ICreateIndexOnColumnSyntax NonClustered() - { - Expression.Index.IndexType = IndexTypes.NonClustered; - Expression.Index.IsClustered = false; - Expression.Index.IndexType = IndexTypes.NonClustered; - Expression.Index.IsUnique = false; - return this; - } - - public ICreateIndexOnColumnSyntax Clustered() - { - Expression.Index.IndexType = IndexTypes.Clustered; - Expression.Index.IsClustered = true; - //if it is clustered then we have to change the index type set the other flags - Expression.Index.IndexType = IndexTypes.Clustered; - Expression.Index.IsClustered = true; - Expression.Index.IsUnique = false; - return this; - } - - ICreateIndexOnColumnSyntax ICreateIndexOptionsSyntax.Unique() - { - Expression.Index.IndexType = IndexTypes.UniqueNonClustered; - Expression.Index.IsUnique = true; - return this; - } - } -} +using Umbraco.Core.Migrations.Syntax.Expressions; +using Umbraco.Core.Persistence.DatabaseAnnotations; +using Umbraco.Core.Persistence.DatabaseModelDefinitions; + +namespace Umbraco.Core.Migrations.Syntax.Create.Index +{ + public class CreateIndexBuilder : ExpressionBuilderBase, + ICreateIndexForTableSyntax, + ICreateIndexOnColumnSyntax, + ICreateIndexColumnOptionsSyntax, + ICreateIndexOptionsSyntax + { + public CreateIndexBuilder(CreateIndexExpression expression) : base(expression) + { + } + + public IndexColumnDefinition CurrentColumn { get; set; } + + public ICreateIndexOnColumnSyntax OnTable(string tableName) + { + Expression.Index.TableName = tableName; + return this; + } + + public ICreateIndexColumnOptionsSyntax OnColumn(string columnName) + { + CurrentColumn = new IndexColumnDefinition { Name = columnName }; + Expression.Index.Columns.Add(CurrentColumn); + return this; + } + + public ICreateIndexOptionsSyntax WithOptions() + { + return this; + } + + public ICreateIndexOnColumnSyntax Ascending() + { + CurrentColumn.Direction = Direction.Ascending; + return this; + } + + public ICreateIndexOnColumnSyntax Descending() + { + CurrentColumn.Direction = Direction.Descending; + return this; + } + + ICreateIndexOnColumnSyntax ICreateIndexColumnOptionsSyntax.Unique() + { + Expression.Index.IsUnique = true; + //if it is Unique then it must be unique nonclustered and set the other flags + Expression.Index.IndexType = IndexTypes.UniqueNonClustered; + Expression.Index.IsClustered = false; + return this; + } + + public ICreateIndexOnColumnSyntax NonClustered() + { + Expression.Index.IndexType = IndexTypes.NonClustered; + Expression.Index.IsClustered = false; + Expression.Index.IndexType = IndexTypes.NonClustered; + Expression.Index.IsUnique = false; + return this; + } + + public ICreateIndexOnColumnSyntax Clustered() + { + Expression.Index.IndexType = IndexTypes.Clustered; + Expression.Index.IsClustered = true; + //if it is clustered then we have to change the index type set the other flags + Expression.Index.IndexType = IndexTypes.Clustered; + Expression.Index.IsClustered = true; + Expression.Index.IsUnique = false; + return this; + } + + ICreateIndexOnColumnSyntax ICreateIndexOptionsSyntax.Unique() + { + Expression.Index.IndexType = IndexTypes.UniqueNonClustered; + Expression.Index.IsUnique = true; + return this; + } + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Index/ICreateIndexColumnOptionsSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Create/Index/ICreateIndexColumnOptionsSyntax.cs similarity index 74% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Index/ICreateIndexColumnOptionsSyntax.cs rename to src/Umbraco.Core/Migrations/Syntax/Create/Index/ICreateIndexColumnOptionsSyntax.cs index 9b344d1ba6..db3bce0387 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Index/ICreateIndexColumnOptionsSyntax.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Create/Index/ICreateIndexColumnOptionsSyntax.cs @@ -1,9 +1,9 @@ -namespace Umbraco.Core.Persistence.Migrations.Syntax.Create.Index -{ - public interface ICreateIndexColumnOptionsSyntax : IFluentSyntax - { - ICreateIndexOnColumnSyntax Ascending(); - ICreateIndexOnColumnSyntax Descending(); - ICreateIndexOnColumnSyntax Unique(); - } -} +namespace Umbraco.Core.Migrations.Syntax.Create.Index +{ + public interface ICreateIndexColumnOptionsSyntax : IFluentSyntax + { + ICreateIndexOnColumnSyntax Ascending(); + ICreateIndexOnColumnSyntax Descending(); + ICreateIndexOnColumnSyntax Unique(); + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Index/ICreateIndexForTableSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Create/Index/ICreateIndexForTableSyntax.cs similarity index 65% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Index/ICreateIndexForTableSyntax.cs rename to src/Umbraco.Core/Migrations/Syntax/Create/Index/ICreateIndexForTableSyntax.cs index 2a424450fa..934a7af023 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Index/ICreateIndexForTableSyntax.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Create/Index/ICreateIndexForTableSyntax.cs @@ -1,7 +1,7 @@ -namespace Umbraco.Core.Persistence.Migrations.Syntax.Create.Index -{ - public interface ICreateIndexForTableSyntax : IFluentSyntax - { - ICreateIndexOnColumnSyntax OnTable(string tableName); - } -} +namespace Umbraco.Core.Migrations.Syntax.Create.Index +{ + public interface ICreateIndexForTableSyntax : IFluentSyntax + { + ICreateIndexOnColumnSyntax OnTable(string tableName); + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Index/ICreateIndexOnColumnSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Create/Index/ICreateIndexOnColumnSyntax.cs similarity index 72% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Index/ICreateIndexOnColumnSyntax.cs rename to src/Umbraco.Core/Migrations/Syntax/Create/Index/ICreateIndexOnColumnSyntax.cs index 5868f5c253..1cb8ea8344 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Index/ICreateIndexOnColumnSyntax.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Create/Index/ICreateIndexOnColumnSyntax.cs @@ -1,8 +1,8 @@ -namespace Umbraco.Core.Persistence.Migrations.Syntax.Create.Index -{ - public interface ICreateIndexOnColumnSyntax : IFluentSyntax - { - ICreateIndexColumnOptionsSyntax OnColumn(string columnName); - ICreateIndexOptionsSyntax WithOptions(); - } -} +namespace Umbraco.Core.Migrations.Syntax.Create.Index +{ + public interface ICreateIndexOnColumnSyntax : IFluentSyntax + { + ICreateIndexColumnOptionsSyntax OnColumn(string columnName); + ICreateIndexOptionsSyntax WithOptions(); + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Index/ICreateIndexOptionsSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Create/Index/ICreateIndexOptionsSyntax.cs similarity index 74% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Index/ICreateIndexOptionsSyntax.cs rename to src/Umbraco.Core/Migrations/Syntax/Create/Index/ICreateIndexOptionsSyntax.cs index 68bbfd5518..46e76c1c6a 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Index/ICreateIndexOptionsSyntax.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Create/Index/ICreateIndexOptionsSyntax.cs @@ -1,9 +1,9 @@ -namespace Umbraco.Core.Persistence.Migrations.Syntax.Create.Index -{ - public interface ICreateIndexOptionsSyntax : IFluentSyntax - { - ICreateIndexOnColumnSyntax Unique(); - ICreateIndexOnColumnSyntax NonClustered(); - ICreateIndexOnColumnSyntax Clustered(); - } -} +namespace Umbraco.Core.Migrations.Syntax.Create.Index +{ + public interface ICreateIndexOptionsSyntax : IFluentSyntax + { + ICreateIndexOnColumnSyntax Unique(); + ICreateIndexOnColumnSyntax NonClustered(); + ICreateIndexOnColumnSyntax Clustered(); + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Table/CreateTableBuilder.cs b/src/Umbraco.Core/Migrations/Syntax/Create/Table/CreateTableBuilder.cs similarity index 95% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Table/CreateTableBuilder.cs rename to src/Umbraco.Core/Migrations/Syntax/Create/Table/CreateTableBuilder.cs index 591a378848..37475f59e6 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Table/CreateTableBuilder.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Create/Table/CreateTableBuilder.cs @@ -1,271 +1,271 @@ -using System.Data; -using NPoco; -using Umbraco.Core.Persistence.DatabaseModelDefinitions; -using Umbraco.Core.Persistence.Migrations.Syntax.Create.Expressions; -using Umbraco.Core.Persistence.Migrations.Syntax.Expressions; -using Umbraco.Core.Persistence.SqlSyntax; - -namespace Umbraco.Core.Persistence.Migrations.Syntax.Create.Table -{ - public class CreateTableBuilder : ExpressionBuilder, - ICreateTableWithColumnSyntax, - ICreateTableColumnAsTypeSyntax, - ICreateTableColumnOptionForeignKeyCascadeSyntax - { - private readonly IMigrationContext _context; - private readonly DatabaseType[] _supportedDatabaseTypes; - - public CreateTableBuilder(IMigrationContext context, DatabaseType[] supportedDatabaseTypes, CreateTableExpression expression) - : base(expression) - { - _context = context; - _supportedDatabaseTypes = supportedDatabaseTypes; - } - - public ColumnDefinition CurrentColumn { get; set; } - - public ForeignKeyDefinition CurrentForeignKey { get; set; } - - public override ColumnDefinition GetColumnForType() - { - return CurrentColumn; - } - - public ICreateTableColumnAsTypeSyntax WithColumn(string name) - { - var column = new ColumnDefinition { Name = name, TableName = Expression.TableName, ModificationType = ModificationType.Create }; - Expression.Columns.Add(column); - CurrentColumn = column; - return this; - } - - public ICreateTableColumnOptionSyntax WithDefault(SystemMethods method) - { - CurrentColumn.DefaultValue = method; - return this; - } - - public ICreateTableColumnOptionSyntax WithDefaultValue(object value) - { - CurrentColumn.DefaultValue = value; - return this; - } - - public ICreateTableColumnOptionSyntax Identity() - { - CurrentColumn.IsIdentity = true; - return this; - } - - public ICreateTableColumnOptionSyntax Indexed() - { - return Indexed(null); - } - - public ICreateTableColumnOptionSyntax Indexed(string indexName) - { - CurrentColumn.IsIndexed = true; - - var index = new CreateIndexExpression(_context, _supportedDatabaseTypes, new IndexDefinition - { - Name = indexName, - SchemaName = Expression.SchemaName, - TableName = Expression.TableName - }); - - index.Index.Columns.Add(new IndexColumnDefinition - { - Name = CurrentColumn.Name - }); - - _context.Expressions.Add(index); - - return this; - } - - public ICreateTableColumnOptionSyntax PrimaryKey() - { - CurrentColumn.IsPrimaryKey = true; - - //For MySQL, the PK will be created WITH the create table expression, however for - // SQL Server, the PK get's created in a different Alter table expression afterwords. - // MySQL will choke if the same constraint is again added afterword - // TODO: This is a super hack, I'd rather not add another property like 'CreatesPkInCreateTableDefinition' to check - // for this, but I don't see another way around. MySQL doesn't support checking for a constraint before creating - // it... except in a very strange way but it doesn't actually provider error feedback if it doesn't work so we cannot use - // it. For now, this is what I'm doing - if (Expression.CurrentDatabaseType.IsMySql() == false) - { - var expression = new CreateConstraintExpression(_context, _supportedDatabaseTypes, ConstraintType.PrimaryKey) - { - Constraint = - { - TableName = CurrentColumn.TableName, - Columns = new[] { CurrentColumn.Name } - } - }; - _context.Expressions.Add(expression); - } - - return this; - } - - public ICreateTableColumnOptionSyntax PrimaryKey(string primaryKeyName) - { - CurrentColumn.IsPrimaryKey = true; - CurrentColumn.PrimaryKeyName = primaryKeyName; - - //For MySQL, the PK will be created WITH the create table expression, however for - // SQL Server, the PK get's created in a different Alter table expression afterwords. - // MySQL will choke if the same constraint is again added afterword - // TODO: This is a super hack, I'd rather not add another property like 'CreatesPkInCreateTableDefinition' to check - // for this, but I don't see another way around. MySQL doesn't support checking for a constraint before creating - // it... except in a very strange way but it doesn't actually provider error feedback if it doesn't work so we cannot use - // it. For now, this is what I'm doing - - if (Expression.CurrentDatabaseType.IsMySql() == false) - { - var expression = new CreateConstraintExpression(_context, _supportedDatabaseTypes, ConstraintType.PrimaryKey) - { - Constraint = - { - ConstraintName = primaryKeyName, - TableName = CurrentColumn.TableName, - Columns = new[] { CurrentColumn.Name } - } - }; - _context.Expressions.Add(expression); - } - - return this; - } - - public ICreateTableColumnOptionSyntax Nullable() - { - CurrentColumn.IsNullable = true; - return this; - } - - public ICreateTableColumnOptionSyntax NotNullable() - { - CurrentColumn.IsNullable = false; - return this; - } - - public ICreateTableColumnOptionSyntax Unique() - { - return Unique(null); - } - - public ICreateTableColumnOptionSyntax Unique(string indexName) - { - CurrentColumn.IsUnique = true; - - var index = new CreateIndexExpression(_context, _supportedDatabaseTypes, new IndexDefinition - { - Name = indexName, - SchemaName = Expression.SchemaName, - TableName = Expression.TableName, - IsUnique = true - }); - - index.Index.Columns.Add(new IndexColumnDefinition - { - Name = CurrentColumn.Name - }); - - _context.Expressions.Add(index); - - return this; - } - - public ICreateTableColumnOptionForeignKeyCascadeSyntax ForeignKey(string primaryTableName, string primaryColumnName) - { - return ForeignKey(null, null, primaryTableName, primaryColumnName); - } - - public ICreateTableColumnOptionForeignKeyCascadeSyntax ForeignKey(string foreignKeyName, string primaryTableName, - string primaryColumnName) - { - return ForeignKey(foreignKeyName, null, primaryTableName, primaryColumnName); - } - - public ICreateTableColumnOptionForeignKeyCascadeSyntax ForeignKey(string foreignKeyName, string primaryTableSchema, - string primaryTableName, string primaryColumnName) - { - CurrentColumn.IsForeignKey = true; - - var fk = new CreateForeignKeyExpression(_context, _supportedDatabaseTypes, new ForeignKeyDefinition - { - Name = foreignKeyName, - PrimaryTable = primaryTableName, - PrimaryTableSchema = primaryTableSchema, - ForeignTable = Expression.TableName, - ForeignTableSchema = Expression.SchemaName - }); - - fk.ForeignKey.PrimaryColumns.Add(primaryColumnName); - fk.ForeignKey.ForeignColumns.Add(CurrentColumn.Name); - - _context.Expressions.Add(fk); - CurrentForeignKey = fk.ForeignKey; - return this; - } - - public ICreateTableColumnOptionForeignKeyCascadeSyntax ForeignKey() - { - CurrentColumn.IsForeignKey = true; - return this; - } - - public ICreateTableColumnOptionForeignKeyCascadeSyntax ReferencedBy(string foreignTableName, string foreignColumnName) - { - return ReferencedBy(null, null, foreignTableName, foreignColumnName); - } - - public ICreateTableColumnOptionForeignKeyCascadeSyntax ReferencedBy(string foreignKeyName, string foreignTableName, - string foreignColumnName) - { - return ReferencedBy(foreignKeyName, null, foreignTableName, foreignColumnName); - } - - public ICreateTableColumnOptionForeignKeyCascadeSyntax ReferencedBy(string foreignKeyName, string foreignTableSchema, - string foreignTableName, string foreignColumnName) - { - var fk = new CreateForeignKeyExpression(_context, _supportedDatabaseTypes, new ForeignKeyDefinition - { - Name = foreignKeyName, - PrimaryTable = Expression.TableName, - PrimaryTableSchema = Expression.SchemaName, - ForeignTable = foreignTableName, - ForeignTableSchema = foreignTableSchema - }); - - fk.ForeignKey.PrimaryColumns.Add(CurrentColumn.Name); - fk.ForeignKey.ForeignColumns.Add(foreignColumnName); - - _context.Expressions.Add(fk); - CurrentForeignKey = fk.ForeignKey; - return this; - } - - public ICreateTableColumnOptionForeignKeyCascadeSyntax OnDelete(Rule rule) - { - CurrentForeignKey.OnDelete = rule; - return this; - } - - public ICreateTableColumnOptionForeignKeyCascadeSyntax OnUpdate(Rule rule) - { - CurrentForeignKey.OnUpdate = rule; - return this; - } - - public ICreateTableColumnOptionSyntax OnDeleteOrUpdate(Rule rule) - { - OnDelete(rule); - OnUpdate(rule); - return this; - } - } -} +using System.Data; +using NPoco; +using Umbraco.Core.Migrations.Syntax.Create.Expressions; +using Umbraco.Core.Migrations.Syntax.Expressions; +using Umbraco.Core.Persistence; +using Umbraco.Core.Persistence.DatabaseModelDefinitions; + +namespace Umbraco.Core.Migrations.Syntax.Create.Table +{ + public class CreateTableBuilder : ExpressionBuilder, + ICreateTableWithColumnSyntax, + ICreateTableColumnAsTypeSyntax, + ICreateTableColumnOptionForeignKeyCascadeSyntax + { + private readonly IMigrationContext _context; + private readonly DatabaseType[] _supportedDatabaseTypes; + + public CreateTableBuilder(IMigrationContext context, DatabaseType[] supportedDatabaseTypes, CreateTableExpression expression) + : base(expression) + { + _context = context; + _supportedDatabaseTypes = supportedDatabaseTypes; + } + + public ColumnDefinition CurrentColumn { get; set; } + + public ForeignKeyDefinition CurrentForeignKey { get; set; } + + public override ColumnDefinition GetColumnForType() + { + return CurrentColumn; + } + + public ICreateTableColumnAsTypeSyntax WithColumn(string name) + { + var column = new ColumnDefinition { Name = name, TableName = Expression.TableName, ModificationType = ModificationType.Create }; + Expression.Columns.Add(column); + CurrentColumn = column; + return this; + } + + public ICreateTableColumnOptionSyntax WithDefault(SystemMethods method) + { + CurrentColumn.DefaultValue = method; + return this; + } + + public ICreateTableColumnOptionSyntax WithDefaultValue(object value) + { + CurrentColumn.DefaultValue = value; + return this; + } + + public ICreateTableColumnOptionSyntax Identity() + { + CurrentColumn.IsIdentity = true; + return this; + } + + public ICreateTableColumnOptionSyntax Indexed() + { + return Indexed(null); + } + + public ICreateTableColumnOptionSyntax Indexed(string indexName) + { + CurrentColumn.IsIndexed = true; + + var index = new CreateIndexExpression(_context, _supportedDatabaseTypes, new IndexDefinition + { + Name = indexName, + SchemaName = Expression.SchemaName, + TableName = Expression.TableName + }); + + index.Index.Columns.Add(new IndexColumnDefinition + { + Name = CurrentColumn.Name + }); + + _context.Expressions.Add(index); + + return this; + } + + public ICreateTableColumnOptionSyntax PrimaryKey() + { + CurrentColumn.IsPrimaryKey = true; + + //For MySQL, the PK will be created WITH the create table expression, however for + // SQL Server, the PK get's created in a different Alter table expression afterwords. + // MySQL will choke if the same constraint is again added afterword + // TODO: This is a super hack, I'd rather not add another property like 'CreatesPkInCreateTableDefinition' to check + // for this, but I don't see another way around. MySQL doesn't support checking for a constraint before creating + // it... except in a very strange way but it doesn't actually provider error feedback if it doesn't work so we cannot use + // it. For now, this is what I'm doing + if (Expression.CurrentDatabaseType.IsMySql() == false) + { + var expression = new CreateConstraintExpression(_context, _supportedDatabaseTypes, ConstraintType.PrimaryKey) + { + Constraint = + { + TableName = CurrentColumn.TableName, + Columns = new[] { CurrentColumn.Name } + } + }; + _context.Expressions.Add(expression); + } + + return this; + } + + public ICreateTableColumnOptionSyntax PrimaryKey(string primaryKeyName) + { + CurrentColumn.IsPrimaryKey = true; + CurrentColumn.PrimaryKeyName = primaryKeyName; + + //For MySQL, the PK will be created WITH the create table expression, however for + // SQL Server, the PK get's created in a different Alter table expression afterwords. + // MySQL will choke if the same constraint is again added afterword + // TODO: This is a super hack, I'd rather not add another property like 'CreatesPkInCreateTableDefinition' to check + // for this, but I don't see another way around. MySQL doesn't support checking for a constraint before creating + // it... except in a very strange way but it doesn't actually provider error feedback if it doesn't work so we cannot use + // it. For now, this is what I'm doing + + if (Expression.CurrentDatabaseType.IsMySql() == false) + { + var expression = new CreateConstraintExpression(_context, _supportedDatabaseTypes, ConstraintType.PrimaryKey) + { + Constraint = + { + ConstraintName = primaryKeyName, + TableName = CurrentColumn.TableName, + Columns = new[] { CurrentColumn.Name } + } + }; + _context.Expressions.Add(expression); + } + + return this; + } + + public ICreateTableColumnOptionSyntax Nullable() + { + CurrentColumn.IsNullable = true; + return this; + } + + public ICreateTableColumnOptionSyntax NotNullable() + { + CurrentColumn.IsNullable = false; + return this; + } + + public ICreateTableColumnOptionSyntax Unique() + { + return Unique(null); + } + + public ICreateTableColumnOptionSyntax Unique(string indexName) + { + CurrentColumn.IsUnique = true; + + var index = new CreateIndexExpression(_context, _supportedDatabaseTypes, new IndexDefinition + { + Name = indexName, + SchemaName = Expression.SchemaName, + TableName = Expression.TableName, + IsUnique = true + }); + + index.Index.Columns.Add(new IndexColumnDefinition + { + Name = CurrentColumn.Name + }); + + _context.Expressions.Add(index); + + return this; + } + + public ICreateTableColumnOptionForeignKeyCascadeSyntax ForeignKey(string primaryTableName, string primaryColumnName) + { + return ForeignKey(null, null, primaryTableName, primaryColumnName); + } + + public ICreateTableColumnOptionForeignKeyCascadeSyntax ForeignKey(string foreignKeyName, string primaryTableName, + string primaryColumnName) + { + return ForeignKey(foreignKeyName, null, primaryTableName, primaryColumnName); + } + + public ICreateTableColumnOptionForeignKeyCascadeSyntax ForeignKey(string foreignKeyName, string primaryTableSchema, + string primaryTableName, string primaryColumnName) + { + CurrentColumn.IsForeignKey = true; + + var fk = new CreateForeignKeyExpression(_context, _supportedDatabaseTypes, new ForeignKeyDefinition + { + Name = foreignKeyName, + PrimaryTable = primaryTableName, + PrimaryTableSchema = primaryTableSchema, + ForeignTable = Expression.TableName, + ForeignTableSchema = Expression.SchemaName + }); + + fk.ForeignKey.PrimaryColumns.Add(primaryColumnName); + fk.ForeignKey.ForeignColumns.Add(CurrentColumn.Name); + + _context.Expressions.Add(fk); + CurrentForeignKey = fk.ForeignKey; + return this; + } + + public ICreateTableColumnOptionForeignKeyCascadeSyntax ForeignKey() + { + CurrentColumn.IsForeignKey = true; + return this; + } + + public ICreateTableColumnOptionForeignKeyCascadeSyntax ReferencedBy(string foreignTableName, string foreignColumnName) + { + return ReferencedBy(null, null, foreignTableName, foreignColumnName); + } + + public ICreateTableColumnOptionForeignKeyCascadeSyntax ReferencedBy(string foreignKeyName, string foreignTableName, + string foreignColumnName) + { + return ReferencedBy(foreignKeyName, null, foreignTableName, foreignColumnName); + } + + public ICreateTableColumnOptionForeignKeyCascadeSyntax ReferencedBy(string foreignKeyName, string foreignTableSchema, + string foreignTableName, string foreignColumnName) + { + var fk = new CreateForeignKeyExpression(_context, _supportedDatabaseTypes, new ForeignKeyDefinition + { + Name = foreignKeyName, + PrimaryTable = Expression.TableName, + PrimaryTableSchema = Expression.SchemaName, + ForeignTable = foreignTableName, + ForeignTableSchema = foreignTableSchema + }); + + fk.ForeignKey.PrimaryColumns.Add(CurrentColumn.Name); + fk.ForeignKey.ForeignColumns.Add(foreignColumnName); + + _context.Expressions.Add(fk); + CurrentForeignKey = fk.ForeignKey; + return this; + } + + public ICreateTableColumnOptionForeignKeyCascadeSyntax OnDelete(Rule rule) + { + CurrentForeignKey.OnDelete = rule; + return this; + } + + public ICreateTableColumnOptionForeignKeyCascadeSyntax OnUpdate(Rule rule) + { + CurrentForeignKey.OnUpdate = rule; + return this; + } + + public ICreateTableColumnOptionSyntax OnDeleteOrUpdate(Rule rule) + { + OnDelete(rule); + OnUpdate(rule); + return this; + } + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Table/ICreateTableColumnAsTypeSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Create/Table/ICreateTableColumnAsTypeSyntax.cs similarity index 61% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Table/ICreateTableColumnAsTypeSyntax.cs rename to src/Umbraco.Core/Migrations/Syntax/Create/Table/ICreateTableColumnAsTypeSyntax.cs index fa3b89183f..3ea94316e5 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Table/ICreateTableColumnAsTypeSyntax.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Create/Table/ICreateTableColumnAsTypeSyntax.cs @@ -1,7 +1,7 @@ -namespace Umbraco.Core.Persistence.Migrations.Syntax.Create.Table -{ - public interface ICreateTableColumnAsTypeSyntax : IColumnTypeSyntax - { - - } -} +namespace Umbraco.Core.Migrations.Syntax.Create.Table +{ + public interface ICreateTableColumnAsTypeSyntax : IColumnTypeSyntax + { + + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Table/ICreateTableColumnOptionForeignKeyCascadeSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Create/Table/ICreateTableColumnOptionForeignKeyCascadeSyntax.cs similarity index 75% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Table/ICreateTableColumnOptionForeignKeyCascadeSyntax.cs rename to src/Umbraco.Core/Migrations/Syntax/Create/Table/ICreateTableColumnOptionForeignKeyCascadeSyntax.cs index f4748f1861..203e653064 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Table/ICreateTableColumnOptionForeignKeyCascadeSyntax.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Create/Table/ICreateTableColumnOptionForeignKeyCascadeSyntax.cs @@ -1,9 +1,9 @@ -namespace Umbraco.Core.Persistence.Migrations.Syntax.Create.Table -{ - public interface ICreateTableColumnOptionForeignKeyCascadeSyntax : - ICreateTableColumnOptionSyntax, - IForeignKeyCascadeSyntax - { - - } -} +namespace Umbraco.Core.Migrations.Syntax.Create.Table +{ + public interface ICreateTableColumnOptionForeignKeyCascadeSyntax : + ICreateTableColumnOptionSyntax, + IForeignKeyCascadeSyntax + { + + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Table/ICreateTableColumnOptionSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Create/Table/ICreateTableColumnOptionSyntax.cs similarity index 73% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Table/ICreateTableColumnOptionSyntax.cs rename to src/Umbraco.Core/Migrations/Syntax/Create/Table/ICreateTableColumnOptionSyntax.cs index 2f52836f1c..290e21f599 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Table/ICreateTableColumnOptionSyntax.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Create/Table/ICreateTableColumnOptionSyntax.cs @@ -1,9 +1,9 @@ -namespace Umbraco.Core.Persistence.Migrations.Syntax.Create.Table -{ - public interface ICreateTableColumnOptionSyntax : - IColumnOptionSyntax, - ICreateTableWithColumnSyntax - { - - } -} +namespace Umbraco.Core.Migrations.Syntax.Create.Table +{ + public interface ICreateTableColumnOptionSyntax : + IColumnOptionSyntax, + ICreateTableWithColumnSyntax + { + + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Table/ICreateTableWithColumnSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Create/Table/ICreateTableWithColumnSyntax.cs similarity index 65% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Table/ICreateTableWithColumnSyntax.cs rename to src/Umbraco.Core/Migrations/Syntax/Create/Table/ICreateTableWithColumnSyntax.cs index a5dc4d2523..b7b6eeb4ee 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/Table/ICreateTableWithColumnSyntax.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Create/Table/ICreateTableWithColumnSyntax.cs @@ -1,7 +1,7 @@ -namespace Umbraco.Core.Persistence.Migrations.Syntax.Create.Table -{ - public interface ICreateTableWithColumnSyntax : IFluentSyntax - { - ICreateTableColumnAsTypeSyntax WithColumn(string name); - } -} +namespace Umbraco.Core.Migrations.Syntax.Create.Table +{ + public interface ICreateTableWithColumnSyntax : IFluentSyntax + { + ICreateTableColumnAsTypeSyntax WithColumn(string name); + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Column/DeleteColumnBuilder.cs b/src/Umbraco.Core/Migrations/Syntax/Delete/Column/DeleteColumnBuilder.cs similarity index 76% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Column/DeleteColumnBuilder.cs rename to src/Umbraco.Core/Migrations/Syntax/Delete/Column/DeleteColumnBuilder.cs index 150f1b4a72..ca298adeba 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Column/DeleteColumnBuilder.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Delete/Column/DeleteColumnBuilder.cs @@ -1,22 +1,22 @@ -using Umbraco.Core.Persistence.Migrations.Syntax.Delete.Expressions; - -namespace Umbraco.Core.Persistence.Migrations.Syntax.Delete.Column -{ - public class DeleteColumnBuilder : ExpressionBuilderBase, IDeleteColumnFromTableSyntax - { - public DeleteColumnBuilder(DeleteColumnExpression expression) : base(expression) - { - } - - public void FromTable(string tableName) - { - Expression.TableName = tableName; - } - - public IDeleteColumnFromTableSyntax Column(string columnName) - { - Expression.ColumnNames.Add(columnName); - return this; - } - } -} +using Umbraco.Core.Migrations.Syntax.Delete.Expressions; + +namespace Umbraco.Core.Migrations.Syntax.Delete.Column +{ + public class DeleteColumnBuilder : ExpressionBuilderBase, IDeleteColumnFromTableSyntax + { + public DeleteColumnBuilder(DeleteColumnExpression expression) : base(expression) + { + } + + public void FromTable(string tableName) + { + Expression.TableName = tableName; + } + + public IDeleteColumnFromTableSyntax Column(string columnName) + { + Expression.ColumnNames.Add(columnName); + return this; + } + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Column/IDeleteColumnFromTableSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Delete/Column/IDeleteColumnFromTableSyntax.cs similarity index 70% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Column/IDeleteColumnFromTableSyntax.cs rename to src/Umbraco.Core/Migrations/Syntax/Delete/Column/IDeleteColumnFromTableSyntax.cs index ec95e384b5..87f10d7dec 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Column/IDeleteColumnFromTableSyntax.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Delete/Column/IDeleteColumnFromTableSyntax.cs @@ -1,8 +1,8 @@ -namespace Umbraco.Core.Persistence.Migrations.Syntax.Delete.Column -{ - public interface IDeleteColumnFromTableSyntax : IFluentSyntax - { - void FromTable(string tableName); - IDeleteColumnFromTableSyntax Column(string columnName); - } -} +namespace Umbraco.Core.Migrations.Syntax.Delete.Column +{ + public interface IDeleteColumnFromTableSyntax : IFluentSyntax + { + void FromTable(string tableName); + IDeleteColumnFromTableSyntax Column(string columnName); + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Constraint/DeleteConstraintBuilder.cs b/src/Umbraco.Core/Migrations/Syntax/Delete/Constraint/DeleteConstraintBuilder.cs similarity index 70% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Constraint/DeleteConstraintBuilder.cs rename to src/Umbraco.Core/Migrations/Syntax/Delete/Constraint/DeleteConstraintBuilder.cs index ac3cd6e714..20287319a5 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Constraint/DeleteConstraintBuilder.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Delete/Constraint/DeleteConstraintBuilder.cs @@ -1,16 +1,16 @@ -using Umbraco.Core.Persistence.Migrations.Syntax.Delete.Expressions; - -namespace Umbraco.Core.Persistence.Migrations.Syntax.Delete.Constraint -{ - public class DeleteConstraintBuilder : ExpressionBuilderBase, IDeleteConstraintOnTableSyntax - { - public DeleteConstraintBuilder(DeleteConstraintExpression expression) : base(expression) - { - } - - public void FromTable(string tableName) - { - Expression.Constraint.TableName = tableName; - } - } -} +using Umbraco.Core.Migrations.Syntax.Delete.Expressions; + +namespace Umbraco.Core.Migrations.Syntax.Delete.Constraint +{ + public class DeleteConstraintBuilder : ExpressionBuilderBase, IDeleteConstraintOnTableSyntax + { + public DeleteConstraintBuilder(DeleteConstraintExpression expression) : base(expression) + { + } + + public void FromTable(string tableName) + { + Expression.Constraint.TableName = tableName; + } + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Constraint/IDeleteConstraintOnTableSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Delete/Constraint/IDeleteConstraintOnTableSyntax.cs similarity index 60% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Constraint/IDeleteConstraintOnTableSyntax.cs rename to src/Umbraco.Core/Migrations/Syntax/Delete/Constraint/IDeleteConstraintOnTableSyntax.cs index 891693696c..c1c5f1428f 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Constraint/IDeleteConstraintOnTableSyntax.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Delete/Constraint/IDeleteConstraintOnTableSyntax.cs @@ -1,7 +1,7 @@ -namespace Umbraco.Core.Persistence.Migrations.Syntax.Delete.Constraint -{ - public interface IDeleteConstraintOnTableSyntax : IFluentSyntax - { - void FromTable(string tableName); - } -} +namespace Umbraco.Core.Migrations.Syntax.Delete.Constraint +{ + public interface IDeleteConstraintOnTableSyntax : IFluentSyntax + { + void FromTable(string tableName); + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/DefaultConstraint/DeleteDefaultConstraintBuilder.cs b/src/Umbraco.Core/Migrations/Syntax/Delete/DefaultConstraint/DeleteDefaultConstraintBuilder.cs similarity index 80% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/DefaultConstraint/DeleteDefaultConstraintBuilder.cs rename to src/Umbraco.Core/Migrations/Syntax/Delete/DefaultConstraint/DeleteDefaultConstraintBuilder.cs index e5f99b67a1..5ae0b923ef 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/DefaultConstraint/DeleteDefaultConstraintBuilder.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Delete/DefaultConstraint/DeleteDefaultConstraintBuilder.cs @@ -1,25 +1,25 @@ -using Umbraco.Core.Persistence.Migrations.Syntax.Delete.Expressions; - -namespace Umbraco.Core.Persistence.Migrations.Syntax.Delete.DefaultConstraint -{ - public class DeleteDefaultConstraintBuilder : ExpressionBuilderBase, - IDeleteDefaultConstraintOnTableSyntax, - IDeleteDefaultConstraintOnColumnSyntax - { - public DeleteDefaultConstraintBuilder(DeleteDefaultConstraintExpression expression) - : base(expression) - { - } - - public IDeleteDefaultConstraintOnColumnSyntax OnTable(string tableName) - { - Expression.TableName = tableName; - return this; - } - - public void OnColumn(string columnName) - { - Expression.ColumnName = columnName; - } - } -} +using Umbraco.Core.Migrations.Syntax.Delete.Expressions; + +namespace Umbraco.Core.Migrations.Syntax.Delete.DefaultConstraint +{ + public class DeleteDefaultConstraintBuilder : ExpressionBuilderBase, + IDeleteDefaultConstraintOnTableSyntax, + IDeleteDefaultConstraintOnColumnSyntax + { + public DeleteDefaultConstraintBuilder(DeleteDefaultConstraintExpression expression) + : base(expression) + { + } + + public IDeleteDefaultConstraintOnColumnSyntax OnTable(string tableName) + { + Expression.TableName = tableName; + return this; + } + + public void OnColumn(string columnName) + { + Expression.ColumnName = columnName; + } + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/DefaultConstraint/IDeleteDefaultConstraintOnColumnSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Delete/DefaultConstraint/IDeleteDefaultConstraintOnColumnSyntax.cs similarity index 60% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/DefaultConstraint/IDeleteDefaultConstraintOnColumnSyntax.cs rename to src/Umbraco.Core/Migrations/Syntax/Delete/DefaultConstraint/IDeleteDefaultConstraintOnColumnSyntax.cs index ecf04b1e69..faacc9e5dc 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/DefaultConstraint/IDeleteDefaultConstraintOnColumnSyntax.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Delete/DefaultConstraint/IDeleteDefaultConstraintOnColumnSyntax.cs @@ -1,7 +1,7 @@ -namespace Umbraco.Core.Persistence.Migrations.Syntax.Delete.DefaultConstraint -{ - public interface IDeleteDefaultConstraintOnColumnSyntax : IFluentSyntax - { - void OnColumn(string columnName); - } -} +namespace Umbraco.Core.Migrations.Syntax.Delete.DefaultConstraint +{ + public interface IDeleteDefaultConstraintOnColumnSyntax : IFluentSyntax + { + void OnColumn(string columnName); + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/DefaultConstraint/IDeleteDefaultConstraintOnTableSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Delete/DefaultConstraint/IDeleteDefaultConstraintOnTableSyntax.cs similarity index 65% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/DefaultConstraint/IDeleteDefaultConstraintOnTableSyntax.cs rename to src/Umbraco.Core/Migrations/Syntax/Delete/DefaultConstraint/IDeleteDefaultConstraintOnTableSyntax.cs index 288bf5ba0f..36b08c8e15 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/DefaultConstraint/IDeleteDefaultConstraintOnTableSyntax.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Delete/DefaultConstraint/IDeleteDefaultConstraintOnTableSyntax.cs @@ -1,7 +1,7 @@ -namespace Umbraco.Core.Persistence.Migrations.Syntax.Delete.DefaultConstraint -{ - public interface IDeleteDefaultConstraintOnTableSyntax : IFluentSyntax - { - IDeleteDefaultConstraintOnColumnSyntax OnTable(string tableName); - } -} +namespace Umbraco.Core.Migrations.Syntax.Delete.DefaultConstraint +{ + public interface IDeleteDefaultConstraintOnTableSyntax : IFluentSyntax + { + IDeleteDefaultConstraintOnColumnSyntax OnTable(string tableName); + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/DeleteBuilder.cs b/src/Umbraco.Core/Migrations/Syntax/Delete/DeleteBuilder.cs similarity index 86% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/DeleteBuilder.cs rename to src/Umbraco.Core/Migrations/Syntax/Delete/DeleteBuilder.cs index 150e9b7155..4a3847f254 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/DeleteBuilder.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Delete/DeleteBuilder.cs @@ -1,99 +1,98 @@ -using System; -using NPoco; -using Umbraco.Core.Persistence.DatabaseModelDefinitions; -using Umbraco.Core.Persistence.Migrations.Syntax.Delete.Column; -using Umbraco.Core.Persistence.Migrations.Syntax.Delete.Constraint; -using Umbraco.Core.Persistence.Migrations.Syntax.Delete.DefaultConstraint; -using Umbraco.Core.Persistence.Migrations.Syntax.Delete.Expressions; -using Umbraco.Core.Persistence.Migrations.Syntax.Delete.ForeignKey; -using Umbraco.Core.Persistence.Migrations.Syntax.Delete.Index; - -namespace Umbraco.Core.Persistence.Migrations.Syntax.Delete -{ - public class DeleteBuilder : IDeleteBuilder - { - private readonly IMigrationContext _context; - private readonly DatabaseType[] _supportedDatabaseTypes; - - public DeleteBuilder(IMigrationContext context, params DatabaseType[] supportedDatabaseTypes) - { - _context = context; - _supportedDatabaseTypes = supportedDatabaseTypes; - } - - public void Table(string tableName) - { - var expression = new DeleteTableExpression(_context, _supportedDatabaseTypes) { TableName = tableName }; - _context.Expressions.Add(expression); - } - - public IDeleteColumnFromTableSyntax Column(string columnName) - { - var expression = new DeleteColumnExpression(_context, _supportedDatabaseTypes) {ColumnNames = {columnName}}; - _context.Expressions.Add(expression); - return new DeleteColumnBuilder(expression); - } - - public IDeleteForeignKeyFromTableSyntax ForeignKey() - { - var expression = new DeleteForeignKeyExpression(_context, _supportedDatabaseTypes); - _context.Expressions.Add(expression); - return new DeleteForeignKeyBuilder(expression); - } - - public IDeleteForeignKeyOnTableSyntax ForeignKey(string foreignKeyName) - { - var expression = new DeleteForeignKeyExpression(_context, _supportedDatabaseTypes) {ForeignKey = {Name = foreignKeyName}}; - _context.Expressions.Add(expression); - return new DeleteForeignKeyBuilder(expression); - } - - public IDeleteDataSyntax FromTable(string tableName) - { - var expression = new DeleteDataExpression(_context, _supportedDatabaseTypes) { TableName = tableName }; - _context.Expressions.Add(expression); - return new DeleteDataBuilder(expression); - } - - public IDeleteIndexForTableSyntax Index() - { - var expression = new DeleteIndexExpression(_context, _supportedDatabaseTypes); - _context.Expressions.Add(expression); - return new DeleteIndexBuilder(expression); - } - - public IDeleteIndexForTableSyntax Index(string indexName) - { - var expression = new DeleteIndexExpression(_context, _supportedDatabaseTypes) { Index = { Name = indexName } }; - _context.Expressions.Add(expression); - return new DeleteIndexBuilder(expression); - } - - public IDeleteConstraintOnTableSyntax PrimaryKey(string primaryKeyName) - { - var expression = new DeleteConstraintExpression(_context, _supportedDatabaseTypes, ConstraintType.PrimaryKey) - { - Constraint = { ConstraintName = primaryKeyName } - }; - _context.Expressions.Add(expression); - return new DeleteConstraintBuilder(expression); - } - - public IDeleteConstraintOnTableSyntax UniqueConstraint(string constraintName) - { - var expression = new DeleteConstraintExpression(_context, _supportedDatabaseTypes, ConstraintType.Unique) - { - Constraint = { ConstraintName = constraintName } - }; - _context.Expressions.Add(expression); - return new DeleteConstraintBuilder(expression); - } - - public IDeleteDefaultConstraintOnTableSyntax DefaultConstraint() - { - var expression = new DeleteDefaultConstraintExpression(_context, _supportedDatabaseTypes); - _context.Expressions.Add(expression); - return new DeleteDefaultConstraintBuilder(expression); - } - } -} +using NPoco; +using Umbraco.Core.Migrations.Syntax.Delete.Column; +using Umbraco.Core.Migrations.Syntax.Delete.Constraint; +using Umbraco.Core.Migrations.Syntax.Delete.DefaultConstraint; +using Umbraco.Core.Migrations.Syntax.Delete.Expressions; +using Umbraco.Core.Migrations.Syntax.Delete.ForeignKey; +using Umbraco.Core.Migrations.Syntax.Delete.Index; +using Umbraco.Core.Persistence.DatabaseModelDefinitions; + +namespace Umbraco.Core.Migrations.Syntax.Delete +{ + public class DeleteBuilder : IDeleteBuilder + { + private readonly IMigrationContext _context; + private readonly DatabaseType[] _supportedDatabaseTypes; + + public DeleteBuilder(IMigrationContext context, params DatabaseType[] supportedDatabaseTypes) + { + _context = context; + _supportedDatabaseTypes = supportedDatabaseTypes; + } + + public void Table(string tableName) + { + var expression = new DeleteTableExpression(_context, _supportedDatabaseTypes) { TableName = tableName }; + _context.Expressions.Add(expression); + } + + public IDeleteColumnFromTableSyntax Column(string columnName) + { + var expression = new DeleteColumnExpression(_context, _supportedDatabaseTypes) {ColumnNames = {columnName}}; + _context.Expressions.Add(expression); + return new DeleteColumnBuilder(expression); + } + + public IDeleteForeignKeyFromTableSyntax ForeignKey() + { + var expression = new DeleteForeignKeyExpression(_context, _supportedDatabaseTypes); + _context.Expressions.Add(expression); + return new DeleteForeignKeyBuilder(expression); + } + + public IDeleteForeignKeyOnTableSyntax ForeignKey(string foreignKeyName) + { + var expression = new DeleteForeignKeyExpression(_context, _supportedDatabaseTypes) {ForeignKey = {Name = foreignKeyName}}; + _context.Expressions.Add(expression); + return new DeleteForeignKeyBuilder(expression); + } + + public IDeleteDataSyntax FromTable(string tableName) + { + var expression = new DeleteDataExpression(_context, _supportedDatabaseTypes) { TableName = tableName }; + _context.Expressions.Add(expression); + return new DeleteDataBuilder(expression); + } + + public IDeleteIndexForTableSyntax Index() + { + var expression = new DeleteIndexExpression(_context, _supportedDatabaseTypes); + _context.Expressions.Add(expression); + return new DeleteIndexBuilder(expression); + } + + public IDeleteIndexForTableSyntax Index(string indexName) + { + var expression = new DeleteIndexExpression(_context, _supportedDatabaseTypes) { Index = { Name = indexName } }; + _context.Expressions.Add(expression); + return new DeleteIndexBuilder(expression); + } + + public IDeleteConstraintOnTableSyntax PrimaryKey(string primaryKeyName) + { + var expression = new DeleteConstraintExpression(_context, _supportedDatabaseTypes, ConstraintType.PrimaryKey) + { + Constraint = { ConstraintName = primaryKeyName } + }; + _context.Expressions.Add(expression); + return new DeleteConstraintBuilder(expression); + } + + public IDeleteConstraintOnTableSyntax UniqueConstraint(string constraintName) + { + var expression = new DeleteConstraintExpression(_context, _supportedDatabaseTypes, ConstraintType.Unique) + { + Constraint = { ConstraintName = constraintName } + }; + _context.Expressions.Add(expression); + return new DeleteConstraintBuilder(expression); + } + + public IDeleteDefaultConstraintOnTableSyntax DefaultConstraint() + { + var expression = new DeleteDefaultConstraintExpression(_context, _supportedDatabaseTypes); + _context.Expressions.Add(expression); + return new DeleteDefaultConstraintBuilder(expression); + } + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/DeleteDataBuilder.cs b/src/Umbraco.Core/Migrations/Syntax/Delete/DeleteDataBuilder.cs similarity index 89% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/DeleteDataBuilder.cs rename to src/Umbraco.Core/Migrations/Syntax/Delete/DeleteDataBuilder.cs index 451d2592f3..904f382ea0 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/DeleteDataBuilder.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Delete/DeleteDataBuilder.cs @@ -1,55 +1,55 @@ -using System.Collections.Generic; -using System.ComponentModel; -using Umbraco.Core.Persistence.DatabaseModelDefinitions; -using Umbraco.Core.Persistence.Migrations.Syntax.Delete.Expressions; - -namespace Umbraco.Core.Persistence.Migrations.Syntax.Delete -{ - public class DeleteDataBuilder : IDeleteDataSyntax - { - private readonly DeleteDataExpression _expression; - - public DeleteDataBuilder(DeleteDataExpression expression) - { - _expression = expression; - } - - public void IsNull(string columnName) - { - _expression.Rows.Add(new DeletionDataDefinition - { - new KeyValuePair(columnName, null) - }); - } - - public IDeleteDataSyntax Row(object dataAsAnonymousType) - { - _expression.Rows.Add(GetData(dataAsAnonymousType)); - return this; - } - - public IDeleteDataSyntax InSchema(string schemaName) - { - _expression.SchemaName = schemaName; - return this; - } - - public void AllRows() - { - _expression.IsAllRows = true; - } - - private static DeletionDataDefinition GetData(object dataAsAnonymousType) - { - var data = new DeletionDataDefinition(); - var properties = TypeDescriptor.GetProperties(dataAsAnonymousType); - - foreach (PropertyDescriptor property in properties) - { - data.Add(new KeyValuePair(property.Name, property.GetValue(dataAsAnonymousType))); - } - - return data; - } - } -} +using System.Collections.Generic; +using System.ComponentModel; +using Umbraco.Core.Migrations.Syntax.Delete.Expressions; +using Umbraco.Core.Persistence.DatabaseModelDefinitions; + +namespace Umbraco.Core.Migrations.Syntax.Delete +{ + public class DeleteDataBuilder : IDeleteDataSyntax + { + private readonly DeleteDataExpression _expression; + + public DeleteDataBuilder(DeleteDataExpression expression) + { + _expression = expression; + } + + public void IsNull(string columnName) + { + _expression.Rows.Add(new DeletionDataDefinition + { + new KeyValuePair(columnName, null) + }); + } + + public IDeleteDataSyntax Row(object dataAsAnonymousType) + { + _expression.Rows.Add(GetData(dataAsAnonymousType)); + return this; + } + + public IDeleteDataSyntax InSchema(string schemaName) + { + _expression.SchemaName = schemaName; + return this; + } + + public void AllRows() + { + _expression.IsAllRows = true; + } + + private static DeletionDataDefinition GetData(object dataAsAnonymousType) + { + var data = new DeletionDataDefinition(); + var properties = TypeDescriptor.GetProperties(dataAsAnonymousType); + + foreach (PropertyDescriptor property in properties) + { + data.Add(new KeyValuePair(property.Name, property.GetValue(dataAsAnonymousType))); + } + + return data; + } + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Expressions/DeleteColumnExpression.cs b/src/Umbraco.Core/Migrations/Syntax/Delete/Expressions/DeleteColumnExpression.cs similarity index 91% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Expressions/DeleteColumnExpression.cs rename to src/Umbraco.Core/Migrations/Syntax/Delete/Expressions/DeleteColumnExpression.cs index 1ad7b47de1..800d756c5d 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Expressions/DeleteColumnExpression.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Delete/Expressions/DeleteColumnExpression.cs @@ -1,37 +1,37 @@ -using System.Collections.Generic; -using System.Linq; -using System.Text; -using NPoco; - -namespace Umbraco.Core.Persistence.Migrations.Syntax.Delete.Expressions -{ - public class DeleteColumnExpression : MigrationExpressionBase - { - public DeleteColumnExpression(IMigrationContext context, DatabaseType[] supportedDatabaseTypes) - : base(context, supportedDatabaseTypes) - { - ColumnNames = new List(); - } - - public virtual string SchemaName { get; set; } - public virtual string TableName { get; set; } - public ICollection ColumnNames { get; set; } - - public override string ToString() - { - if (IsExpressionSupported() == false) - return string.Empty; - - var sb = new StringBuilder(); - foreach (string columnName in ColumnNames) - { - if (ColumnNames.First() != columnName) sb.AppendLine(";"); - sb.AppendFormat(SqlSyntax.DropColumn, - SqlSyntax.GetQuotedTableName(TableName), - SqlSyntax.GetQuotedColumnName(columnName)); - } - - return sb.ToString(); - } - } -} +using System.Collections.Generic; +using System.Linq; +using System.Text; +using NPoco; + +namespace Umbraco.Core.Migrations.Syntax.Delete.Expressions +{ + public class DeleteColumnExpression : MigrationExpressionBase + { + public DeleteColumnExpression(IMigrationContext context, DatabaseType[] supportedDatabaseTypes) + : base(context, supportedDatabaseTypes) + { + ColumnNames = new List(); + } + + public virtual string SchemaName { get; set; } + public virtual string TableName { get; set; } + public ICollection ColumnNames { get; set; } + + public override string ToString() + { + if (IsExpressionSupported() == false) + return string.Empty; + + var sb = new StringBuilder(); + foreach (string columnName in ColumnNames) + { + if (ColumnNames.First() != columnName) sb.AppendLine(";"); + sb.AppendFormat(SqlSyntax.DropColumn, + SqlSyntax.GetQuotedTableName(TableName), + SqlSyntax.GetQuotedColumnName(columnName)); + } + + return sb.ToString(); + } + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Expressions/DeleteConstraintExpression.cs b/src/Umbraco.Core/Migrations/Syntax/Delete/Expressions/DeleteConstraintExpression.cs similarity index 93% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Expressions/DeleteConstraintExpression.cs rename to src/Umbraco.Core/Migrations/Syntax/Delete/Expressions/DeleteConstraintExpression.cs index 5af4406928..75bc7d6eae 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Expressions/DeleteConstraintExpression.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Delete/Expressions/DeleteConstraintExpression.cs @@ -1,44 +1,45 @@ -using NPoco; -using Umbraco.Core.Persistence.DatabaseModelDefinitions; - -namespace Umbraco.Core.Persistence.Migrations.Syntax.Delete.Expressions -{ - public class DeleteConstraintExpression : MigrationExpressionBase - { - public DeleteConstraintExpression(IMigrationContext context, DatabaseType[] supportedDatabaseTypes, ConstraintType type) - : base(context, supportedDatabaseTypes) - { - Constraint = new ConstraintDefinition(type); - } - - public ConstraintDefinition Constraint { get; } - - public override string ToString() - { - // Test for MySQL primary key situation. - if (CurrentDatabaseType.IsMySql()) - { - if (Constraint.IsPrimaryKeyConstraint) - { - return string.Format(SqlSyntax.DeleteConstraint, - SqlSyntax.GetQuotedTableName(Constraint.TableName), - "PRIMARY KEY", - ""); - } - else - { - return string.Format(SqlSyntax.DeleteConstraint, - SqlSyntax.GetQuotedTableName(Constraint.TableName), - "FOREIGN KEY", - ""); - } - } - else - { - return string.Format(SqlSyntax.DeleteConstraint, - SqlSyntax.GetQuotedTableName(Constraint.TableName), - SqlSyntax.GetQuotedName(Constraint.ConstraintName)); - } - } - } -} +using NPoco; +using Umbraco.Core.Persistence; +using Umbraco.Core.Persistence.DatabaseModelDefinitions; + +namespace Umbraco.Core.Migrations.Syntax.Delete.Expressions +{ + public class DeleteConstraintExpression : MigrationExpressionBase + { + public DeleteConstraintExpression(IMigrationContext context, DatabaseType[] supportedDatabaseTypes, ConstraintType type) + : base(context, supportedDatabaseTypes) + { + Constraint = new ConstraintDefinition(type); + } + + public ConstraintDefinition Constraint { get; } + + public override string ToString() + { + // Test for MySQL primary key situation. + if (CurrentDatabaseType.IsMySql()) + { + if (Constraint.IsPrimaryKeyConstraint) + { + return string.Format(SqlSyntax.DeleteConstraint, + SqlSyntax.GetQuotedTableName(Constraint.TableName), + "PRIMARY KEY", + ""); + } + else + { + return string.Format(SqlSyntax.DeleteConstraint, + SqlSyntax.GetQuotedTableName(Constraint.TableName), + "FOREIGN KEY", + ""); + } + } + else + { + return string.Format(SqlSyntax.DeleteConstraint, + SqlSyntax.GetQuotedTableName(Constraint.TableName), + SqlSyntax.GetQuotedName(Constraint.ConstraintName)); + } + } + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Expressions/DeleteDataExpression.cs b/src/Umbraco.Core/Migrations/Syntax/Delete/Expressions/DeleteDataExpression.cs similarity index 93% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Expressions/DeleteDataExpression.cs rename to src/Umbraco.Core/Migrations/Syntax/Delete/Expressions/DeleteDataExpression.cs index 192c4d542c..561df84f7d 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Expressions/DeleteDataExpression.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Delete/Expressions/DeleteDataExpression.cs @@ -1,52 +1,52 @@ -using System; -using System.Collections.Generic; -using NPoco; -using Umbraco.Core.Persistence.DatabaseModelDefinitions; - -namespace Umbraco.Core.Persistence.Migrations.Syntax.Delete.Expressions -{ - public class DeleteDataExpression : MigrationExpressionBase - { - private readonly List _rows = new List(); - - public DeleteDataExpression(IMigrationContext context, DatabaseType[] supportedDatabaseTypes) - : base(context, supportedDatabaseTypes) - { } - - public virtual string SchemaName { get; set; } - public string TableName { get; set; } - public virtual bool IsAllRows { get; set; } - - public List Rows => _rows; - - public override string ToString() - { - var deleteItems = new List(); - - if (IsAllRows) - { - deleteItems.Add(string.Format(SqlSyntax.DeleteData, SqlSyntax.GetQuotedTableName(TableName), "1 = 1")); - } - else - { - foreach (var row in Rows) - { - var whereClauses = new List(); - foreach (KeyValuePair item in row) - { - whereClauses.Add(string.Format("{0} {1} {2}", - SqlSyntax.GetQuotedColumnName(item.Key), - item.Value == null ? "IS" : "=", - GetQuotedValue(item.Value))); - } - - deleteItems.Add(string.Format(SqlSyntax.DeleteData, - SqlSyntax.GetQuotedTableName(TableName), - String.Join(" AND ", whereClauses.ToArray()))); - } - } - - return String.Join("; ", deleteItems.ToArray()); - } - } -} +using System; +using System.Collections.Generic; +using NPoco; +using Umbraco.Core.Persistence.DatabaseModelDefinitions; + +namespace Umbraco.Core.Migrations.Syntax.Delete.Expressions +{ + public class DeleteDataExpression : MigrationExpressionBase + { + private readonly List _rows = new List(); + + public DeleteDataExpression(IMigrationContext context, DatabaseType[] supportedDatabaseTypes) + : base(context, supportedDatabaseTypes) + { } + + public virtual string SchemaName { get; set; } + public string TableName { get; set; } + public virtual bool IsAllRows { get; set; } + + public List Rows => _rows; + + public override string ToString() + { + var deleteItems = new List(); + + if (IsAllRows) + { + deleteItems.Add(string.Format(SqlSyntax.DeleteData, SqlSyntax.GetQuotedTableName(TableName), "1 = 1")); + } + else + { + foreach (var row in Rows) + { + var whereClauses = new List(); + foreach (KeyValuePair item in row) + { + whereClauses.Add(string.Format("{0} {1} {2}", + SqlSyntax.GetQuotedColumnName(item.Key), + item.Value == null ? "IS" : "=", + GetQuotedValue(item.Value))); + } + + deleteItems.Add(string.Format(SqlSyntax.DeleteData, + SqlSyntax.GetQuotedTableName(TableName), + String.Join(" AND ", whereClauses.ToArray()))); + } + } + + return String.Join("; ", deleteItems.ToArray()); + } + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Expressions/DeleteDefaultConstraintExpression.cs b/src/Umbraco.Core/Migrations/Syntax/Delete/Expressions/DeleteDefaultConstraintExpression.cs similarity index 88% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Expressions/DeleteDefaultConstraintExpression.cs rename to src/Umbraco.Core/Migrations/Syntax/Delete/Expressions/DeleteDefaultConstraintExpression.cs index 9053aa6ac6..f3177af500 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Expressions/DeleteDefaultConstraintExpression.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Delete/Expressions/DeleteDefaultConstraintExpression.cs @@ -1,25 +1,25 @@ -using NPoco; - -namespace Umbraco.Core.Persistence.Migrations.Syntax.Delete.Expressions -{ - public class DeleteDefaultConstraintExpression : MigrationExpressionBase - { - public DeleteDefaultConstraintExpression(IMigrationContext context, DatabaseType[] supportedDatabaseTypes) - : base(context, supportedDatabaseTypes) - { } - - public virtual string SchemaName { get; set; } - public virtual string TableName { get; set; } - public virtual string ColumnName { get; set; } - - public override string ToString() - { - if (IsExpressionSupported() == false) - return string.Empty; - - return string.Format(SqlSyntax.DeleteDefaultConstraint, - TableName, - ColumnName); - } - } -} +using NPoco; + +namespace Umbraco.Core.Migrations.Syntax.Delete.Expressions +{ + public class DeleteDefaultConstraintExpression : MigrationExpressionBase + { + public DeleteDefaultConstraintExpression(IMigrationContext context, DatabaseType[] supportedDatabaseTypes) + : base(context, supportedDatabaseTypes) + { } + + public virtual string SchemaName { get; set; } + public virtual string TableName { get; set; } + public virtual string ColumnName { get; set; } + + public override string ToString() + { + if (IsExpressionSupported() == false) + return string.Empty; + + return string.Format(SqlSyntax.DeleteDefaultConstraint, + TableName, + ColumnName); + } + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Expressions/DeleteForeignKeyExpression.cs b/src/Umbraco.Core/Migrations/Syntax/Delete/Expressions/DeleteForeignKeyExpression.cs similarity index 94% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Expressions/DeleteForeignKeyExpression.cs rename to src/Umbraco.Core/Migrations/Syntax/Delete/Expressions/DeleteForeignKeyExpression.cs index d4b196cfa1..3a12272509 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Expressions/DeleteForeignKeyExpression.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Delete/Expressions/DeleteForeignKeyExpression.cs @@ -1,48 +1,49 @@ -using System; -using System.Linq; -using NPoco; -using Umbraco.Core.Persistence.DatabaseModelDefinitions; - -namespace Umbraco.Core.Persistence.Migrations.Syntax.Delete.Expressions -{ - public class DeleteForeignKeyExpression : MigrationExpressionBase - { - public DeleteForeignKeyExpression(IMigrationContext context, DatabaseType[] supportedDatabaseTypes) - : base(context, supportedDatabaseTypes) - { - ForeignKey = new ForeignKeyDefinition(); - } - - public ForeignKeyDefinition ForeignKey { get; set; } - - public override string ToString() - { - if (IsExpressionSupported() == false) - return string.Empty; - - if (ForeignKey.ForeignTable == null) - throw new ArgumentNullException("Table name not specified, ensure you have appended the OnTable extension. Format should be Delete.ForeignKey(KeyName).OnTable(TableName)"); - - if (CurrentDatabaseType.IsMySql()) - { - //MySql naming "convention" for foreignkeys, which aren't explicitly named - if (string.IsNullOrEmpty(ForeignKey.Name)) - ForeignKey.Name = string.Format("{0}_ibfk_1", ForeignKey.ForeignTable.ToLower()); - - return string.Format(SqlSyntax.DeleteConstraint, - SqlSyntax.GetQuotedTableName(ForeignKey.ForeignTable), - "FOREIGN KEY", - SqlSyntax.GetQuotedName(ForeignKey.Name)); - } - - if (string.IsNullOrEmpty(ForeignKey.Name)) - { - ForeignKey.Name = string.Format("FK_{0}_{1}_{2}", ForeignKey.ForeignTable, ForeignKey.PrimaryTable, ForeignKey.PrimaryColumns.First()); - } - - return string.Format(SqlSyntax.DeleteConstraint, - SqlSyntax.GetQuotedTableName(ForeignKey.ForeignTable), - SqlSyntax.GetQuotedName(ForeignKey.Name)); - } - } -} +using System; +using System.Linq; +using NPoco; +using Umbraco.Core.Persistence; +using Umbraco.Core.Persistence.DatabaseModelDefinitions; + +namespace Umbraco.Core.Migrations.Syntax.Delete.Expressions +{ + public class DeleteForeignKeyExpression : MigrationExpressionBase + { + public DeleteForeignKeyExpression(IMigrationContext context, DatabaseType[] supportedDatabaseTypes) + : base(context, supportedDatabaseTypes) + { + ForeignKey = new ForeignKeyDefinition(); + } + + public ForeignKeyDefinition ForeignKey { get; set; } + + public override string ToString() + { + if (IsExpressionSupported() == false) + return string.Empty; + + if (ForeignKey.ForeignTable == null) + throw new ArgumentNullException("Table name not specified, ensure you have appended the OnTable extension. Format should be Delete.ForeignKey(KeyName).OnTable(TableName)"); + + if (CurrentDatabaseType.IsMySql()) + { + //MySql naming "convention" for foreignkeys, which aren't explicitly named + if (string.IsNullOrEmpty(ForeignKey.Name)) + ForeignKey.Name = string.Format("{0}_ibfk_1", ForeignKey.ForeignTable.ToLower()); + + return string.Format(SqlSyntax.DeleteConstraint, + SqlSyntax.GetQuotedTableName(ForeignKey.ForeignTable), + "FOREIGN KEY", + SqlSyntax.GetQuotedName(ForeignKey.Name)); + } + + if (string.IsNullOrEmpty(ForeignKey.Name)) + { + ForeignKey.Name = string.Format("FK_{0}_{1}_{2}", ForeignKey.ForeignTable, ForeignKey.PrimaryTable, ForeignKey.PrimaryColumns.First()); + } + + return string.Format(SqlSyntax.DeleteConstraint, + SqlSyntax.GetQuotedTableName(ForeignKey.ForeignTable), + SqlSyntax.GetQuotedName(ForeignKey.Name)); + } + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Expressions/DeleteIndexExpression.cs b/src/Umbraco.Core/Migrations/Syntax/Delete/Expressions/DeleteIndexExpression.cs similarity index 90% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Expressions/DeleteIndexExpression.cs rename to src/Umbraco.Core/Migrations/Syntax/Delete/Expressions/DeleteIndexExpression.cs index 9c3eca9f60..31cdba5be8 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Expressions/DeleteIndexExpression.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Delete/Expressions/DeleteIndexExpression.cs @@ -1,29 +1,29 @@ -using NPoco; -using Umbraco.Core.Persistence.DatabaseModelDefinitions; - -namespace Umbraco.Core.Persistence.Migrations.Syntax.Delete.Expressions -{ - public class DeleteIndexExpression : MigrationExpressionBase - { - public DeleteIndexExpression(IMigrationContext context, DatabaseType[] supportedDatabaseTypes) - : base(context, supportedDatabaseTypes) - { - Index = new IndexDefinition(); - } - - public DeleteIndexExpression(IMigrationContext context, DatabaseType[] supportedDatabaseTypes, IndexDefinition index) - : base(context, supportedDatabaseTypes) - { - Index = index; - } - - public IndexDefinition Index { get; } - - public override string ToString() - { - return string.Format(SqlSyntax.DropIndex, - SqlSyntax.GetQuotedName(Index.Name), - SqlSyntax.GetQuotedTableName(Index.TableName)); - } - } -} +using NPoco; +using Umbraco.Core.Persistence.DatabaseModelDefinitions; + +namespace Umbraco.Core.Migrations.Syntax.Delete.Expressions +{ + public class DeleteIndexExpression : MigrationExpressionBase + { + public DeleteIndexExpression(IMigrationContext context, DatabaseType[] supportedDatabaseTypes) + : base(context, supportedDatabaseTypes) + { + Index = new IndexDefinition(); + } + + public DeleteIndexExpression(IMigrationContext context, DatabaseType[] supportedDatabaseTypes, IndexDefinition index) + : base(context, supportedDatabaseTypes) + { + Index = index; + } + + public IndexDefinition Index { get; } + + public override string ToString() + { + return string.Format(SqlSyntax.DropIndex, + SqlSyntax.GetQuotedName(Index.Name), + SqlSyntax.GetQuotedTableName(Index.TableName)); + } + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Expressions/DeleteTableExpression.cs b/src/Umbraco.Core/Migrations/Syntax/Delete/Expressions/DeleteTableExpression.cs similarity index 86% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Expressions/DeleteTableExpression.cs rename to src/Umbraco.Core/Migrations/Syntax/Delete/Expressions/DeleteTableExpression.cs index c4f7e753db..a663213240 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Expressions/DeleteTableExpression.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Delete/Expressions/DeleteTableExpression.cs @@ -1,20 +1,20 @@ -using NPoco; - -namespace Umbraco.Core.Persistence.Migrations.Syntax.Delete.Expressions -{ - public class DeleteTableExpression : MigrationExpressionBase - { - public DeleteTableExpression(IMigrationContext context, DatabaseType[] supportedDatabaseTypes) - : base(context, supportedDatabaseTypes) - { } - - public virtual string SchemaName { get; set; } - public virtual string TableName { get; set; } - - public override string ToString() - { - return string.Format(SqlSyntax.DropTable, - SqlSyntax.GetQuotedTableName(TableName)); - } - } -} +using NPoco; + +namespace Umbraco.Core.Migrations.Syntax.Delete.Expressions +{ + public class DeleteTableExpression : MigrationExpressionBase + { + public DeleteTableExpression(IMigrationContext context, DatabaseType[] supportedDatabaseTypes) + : base(context, supportedDatabaseTypes) + { } + + public virtual string SchemaName { get; set; } + public virtual string TableName { get; set; } + + public override string ToString() + { + return string.Format(SqlSyntax.DropTable, + SqlSyntax.GetQuotedTableName(TableName)); + } + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/ForeignKey/DeleteForeignKeyBuilder.cs b/src/Umbraco.Core/Migrations/Syntax/Delete/ForeignKey/DeleteForeignKeyBuilder.cs similarity index 90% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/ForeignKey/DeleteForeignKeyBuilder.cs rename to src/Umbraco.Core/Migrations/Syntax/Delete/ForeignKey/DeleteForeignKeyBuilder.cs index 6f5c1a2284..792fcebf43 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/ForeignKey/DeleteForeignKeyBuilder.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Delete/ForeignKey/DeleteForeignKeyBuilder.cs @@ -1,62 +1,62 @@ -using Umbraco.Core.Persistence.Migrations.Syntax.Delete.Expressions; - -namespace Umbraco.Core.Persistence.Migrations.Syntax.Delete.ForeignKey -{ - public class DeleteForeignKeyBuilder : ExpressionBuilderBase, - IDeleteForeignKeyFromTableSyntax, - IDeleteForeignKeyForeignColumnSyntax, - IDeleteForeignKeyToTableSyntax, - IDeleteForeignKeyPrimaryColumnSyntax, - IDeleteForeignKeyOnTableSyntax - { - public DeleteForeignKeyBuilder(DeleteForeignKeyExpression expression) : base(expression) - { - } - - public IDeleteForeignKeyForeignColumnSyntax FromTable(string foreignTableName) - { - Expression.ForeignKey.ForeignTable = foreignTableName; - return this; - } - - public IDeleteForeignKeyToTableSyntax ForeignColumn(string column) - { - Expression.ForeignKey.ForeignColumns.Add(column); - return this; - } - - public IDeleteForeignKeyToTableSyntax ForeignColumns(params string[] columns) - { - foreach (var column in columns) - { - Expression.ForeignKey.ForeignColumns.Add(column); - } - - return this; - } - - public IDeleteForeignKeyPrimaryColumnSyntax ToTable(string table) - { - Expression.ForeignKey.PrimaryTable = table; - return this; - } - - public void PrimaryColumn(string column) - { - Expression.ForeignKey.PrimaryColumns.Add(column); - } - - public void PrimaryColumns(params string[] columns) - { - foreach (var column in columns) - { - Expression.ForeignKey.PrimaryColumns.Add(column); - } - } - - public void OnTable(string foreignTableName) - { - Expression.ForeignKey.ForeignTable = foreignTableName; - } - } -} +using Umbraco.Core.Migrations.Syntax.Delete.Expressions; + +namespace Umbraco.Core.Migrations.Syntax.Delete.ForeignKey +{ + public class DeleteForeignKeyBuilder : ExpressionBuilderBase, + IDeleteForeignKeyFromTableSyntax, + IDeleteForeignKeyForeignColumnSyntax, + IDeleteForeignKeyToTableSyntax, + IDeleteForeignKeyPrimaryColumnSyntax, + IDeleteForeignKeyOnTableSyntax + { + public DeleteForeignKeyBuilder(DeleteForeignKeyExpression expression) : base(expression) + { + } + + public IDeleteForeignKeyForeignColumnSyntax FromTable(string foreignTableName) + { + Expression.ForeignKey.ForeignTable = foreignTableName; + return this; + } + + public IDeleteForeignKeyToTableSyntax ForeignColumn(string column) + { + Expression.ForeignKey.ForeignColumns.Add(column); + return this; + } + + public IDeleteForeignKeyToTableSyntax ForeignColumns(params string[] columns) + { + foreach (var column in columns) + { + Expression.ForeignKey.ForeignColumns.Add(column); + } + + return this; + } + + public IDeleteForeignKeyPrimaryColumnSyntax ToTable(string table) + { + Expression.ForeignKey.PrimaryTable = table; + return this; + } + + public void PrimaryColumn(string column) + { + Expression.ForeignKey.PrimaryColumns.Add(column); + } + + public void PrimaryColumns(params string[] columns) + { + foreach (var column in columns) + { + Expression.ForeignKey.PrimaryColumns.Add(column); + } + } + + public void OnTable(string foreignTableName) + { + Expression.ForeignKey.ForeignTable = foreignTableName; + } + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/ForeignKey/IDeleteForeignKeyForeignColumnSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Delete/ForeignKey/IDeleteForeignKeyForeignColumnSyntax.cs similarity index 74% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/ForeignKey/IDeleteForeignKeyForeignColumnSyntax.cs rename to src/Umbraco.Core/Migrations/Syntax/Delete/ForeignKey/IDeleteForeignKeyForeignColumnSyntax.cs index 3fc27948db..b3d3afdb18 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/ForeignKey/IDeleteForeignKeyForeignColumnSyntax.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Delete/ForeignKey/IDeleteForeignKeyForeignColumnSyntax.cs @@ -1,8 +1,8 @@ -namespace Umbraco.Core.Persistence.Migrations.Syntax.Delete.ForeignKey -{ - public interface IDeleteForeignKeyForeignColumnSyntax : IFluentSyntax - { - IDeleteForeignKeyToTableSyntax ForeignColumn(string column); - IDeleteForeignKeyToTableSyntax ForeignColumns(params string[] columns); - } -} +namespace Umbraco.Core.Migrations.Syntax.Delete.ForeignKey +{ + public interface IDeleteForeignKeyForeignColumnSyntax : IFluentSyntax + { + IDeleteForeignKeyToTableSyntax ForeignColumn(string column); + IDeleteForeignKeyToTableSyntax ForeignColumns(params string[] columns); + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/ForeignKey/IDeleteForeignKeyFromTableSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Delete/ForeignKey/IDeleteForeignKeyFromTableSyntax.cs similarity index 67% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/ForeignKey/IDeleteForeignKeyFromTableSyntax.cs rename to src/Umbraco.Core/Migrations/Syntax/Delete/ForeignKey/IDeleteForeignKeyFromTableSyntax.cs index 4ec1e789e0..f8b198b636 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/ForeignKey/IDeleteForeignKeyFromTableSyntax.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Delete/ForeignKey/IDeleteForeignKeyFromTableSyntax.cs @@ -1,7 +1,7 @@ -namespace Umbraco.Core.Persistence.Migrations.Syntax.Delete.ForeignKey -{ - public interface IDeleteForeignKeyFromTableSyntax : IFluentSyntax - { - IDeleteForeignKeyForeignColumnSyntax FromTable(string foreignTableName); - } -} +namespace Umbraco.Core.Migrations.Syntax.Delete.ForeignKey +{ + public interface IDeleteForeignKeyFromTableSyntax : IFluentSyntax + { + IDeleteForeignKeyForeignColumnSyntax FromTable(string foreignTableName); + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/ForeignKey/IDeleteForeignKeyOnTableSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Delete/ForeignKey/IDeleteForeignKeyOnTableSyntax.cs similarity index 61% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/ForeignKey/IDeleteForeignKeyOnTableSyntax.cs rename to src/Umbraco.Core/Migrations/Syntax/Delete/ForeignKey/IDeleteForeignKeyOnTableSyntax.cs index c69addd5a8..37edd643f6 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/ForeignKey/IDeleteForeignKeyOnTableSyntax.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Delete/ForeignKey/IDeleteForeignKeyOnTableSyntax.cs @@ -1,7 +1,7 @@ -namespace Umbraco.Core.Persistence.Migrations.Syntax.Delete.ForeignKey -{ - public interface IDeleteForeignKeyOnTableSyntax : IFluentSyntax - { - void OnTable(string foreignTableName); - } -} +namespace Umbraco.Core.Migrations.Syntax.Delete.ForeignKey +{ + public interface IDeleteForeignKeyOnTableSyntax : IFluentSyntax + { + void OnTable(string foreignTableName); + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/ForeignKey/IDeleteForeignKeyPrimaryColumnSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Delete/ForeignKey/IDeleteForeignKeyPrimaryColumnSyntax.cs similarity index 69% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/ForeignKey/IDeleteForeignKeyPrimaryColumnSyntax.cs rename to src/Umbraco.Core/Migrations/Syntax/Delete/ForeignKey/IDeleteForeignKeyPrimaryColumnSyntax.cs index a7d8477132..27f4335b24 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/ForeignKey/IDeleteForeignKeyPrimaryColumnSyntax.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Delete/ForeignKey/IDeleteForeignKeyPrimaryColumnSyntax.cs @@ -1,8 +1,8 @@ -namespace Umbraco.Core.Persistence.Migrations.Syntax.Delete.ForeignKey -{ - public interface IDeleteForeignKeyPrimaryColumnSyntax : IFluentSyntax - { - void PrimaryColumn(string column); - void PrimaryColumns(params string[] columns); - } -} +namespace Umbraco.Core.Migrations.Syntax.Delete.ForeignKey +{ + public interface IDeleteForeignKeyPrimaryColumnSyntax : IFluentSyntax + { + void PrimaryColumn(string column); + void PrimaryColumns(params string[] columns); + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/ForeignKey/IDeleteForeignKeyToTableSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Delete/ForeignKey/IDeleteForeignKeyToTableSyntax.cs similarity index 65% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/ForeignKey/IDeleteForeignKeyToTableSyntax.cs rename to src/Umbraco.Core/Migrations/Syntax/Delete/ForeignKey/IDeleteForeignKeyToTableSyntax.cs index 95526b19be..0b351ab73a 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/ForeignKey/IDeleteForeignKeyToTableSyntax.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Delete/ForeignKey/IDeleteForeignKeyToTableSyntax.cs @@ -1,7 +1,7 @@ -namespace Umbraco.Core.Persistence.Migrations.Syntax.Delete.ForeignKey -{ - public interface IDeleteForeignKeyToTableSyntax : IFluentSyntax - { - IDeleteForeignKeyPrimaryColumnSyntax ToTable(string table); - } -} +namespace Umbraco.Core.Migrations.Syntax.Delete.ForeignKey +{ + public interface IDeleteForeignKeyToTableSyntax : IFluentSyntax + { + IDeleteForeignKeyPrimaryColumnSyntax ToTable(string table); + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/IDeleteBuilder.cs b/src/Umbraco.Core/Migrations/Syntax/Delete/IDeleteBuilder.cs similarity index 61% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/IDeleteBuilder.cs rename to src/Umbraco.Core/Migrations/Syntax/Delete/IDeleteBuilder.cs index 28f2bbd30d..3319a94d27 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/IDeleteBuilder.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Delete/IDeleteBuilder.cs @@ -1,22 +1,22 @@ -using Umbraco.Core.Persistence.Migrations.Syntax.Delete.Column; -using Umbraco.Core.Persistence.Migrations.Syntax.Delete.Constraint; -using Umbraco.Core.Persistence.Migrations.Syntax.Delete.DefaultConstraint; -using Umbraco.Core.Persistence.Migrations.Syntax.Delete.ForeignKey; -using Umbraco.Core.Persistence.Migrations.Syntax.Delete.Index; - -namespace Umbraco.Core.Persistence.Migrations.Syntax.Delete -{ - public interface IDeleteBuilder : IFluentSyntax - { - void Table(string tableName); - IDeleteColumnFromTableSyntax Column(string columnName); - IDeleteForeignKeyFromTableSyntax ForeignKey(); - IDeleteForeignKeyOnTableSyntax ForeignKey(string foreignKeyName); - IDeleteDataSyntax FromTable(string tableName); - IDeleteIndexForTableSyntax Index(); - IDeleteIndexForTableSyntax Index(string indexName); - IDeleteConstraintOnTableSyntax PrimaryKey(string primaryKeyName); - IDeleteConstraintOnTableSyntax UniqueConstraint(string constraintName); - IDeleteDefaultConstraintOnTableSyntax DefaultConstraint(); - } -} +using Umbraco.Core.Migrations.Syntax.Delete.Column; +using Umbraco.Core.Migrations.Syntax.Delete.Constraint; +using Umbraco.Core.Migrations.Syntax.Delete.DefaultConstraint; +using Umbraco.Core.Migrations.Syntax.Delete.ForeignKey; +using Umbraco.Core.Migrations.Syntax.Delete.Index; + +namespace Umbraco.Core.Migrations.Syntax.Delete +{ + public interface IDeleteBuilder : IFluentSyntax + { + void Table(string tableName); + IDeleteColumnFromTableSyntax Column(string columnName); + IDeleteForeignKeyFromTableSyntax ForeignKey(); + IDeleteForeignKeyOnTableSyntax ForeignKey(string foreignKeyName); + IDeleteDataSyntax FromTable(string tableName); + IDeleteIndexForTableSyntax Index(); + IDeleteIndexForTableSyntax Index(string indexName); + IDeleteConstraintOnTableSyntax PrimaryKey(string primaryKeyName); + IDeleteConstraintOnTableSyntax UniqueConstraint(string constraintName); + IDeleteDefaultConstraintOnTableSyntax DefaultConstraint(); + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/IDeleteDataSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Delete/IDeleteDataSyntax.cs similarity index 72% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/IDeleteDataSyntax.cs rename to src/Umbraco.Core/Migrations/Syntax/Delete/IDeleteDataSyntax.cs index ea9bbab45e..64709b864a 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/IDeleteDataSyntax.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Delete/IDeleteDataSyntax.cs @@ -1,9 +1,9 @@ -namespace Umbraco.Core.Persistence.Migrations.Syntax.Delete -{ - public interface IDeleteDataSyntax : IFluentSyntax - { - IDeleteDataSyntax Row(object dataAsAnonymousType); - void AllRows(); - void IsNull(string columnName); - } -} +namespace Umbraco.Core.Migrations.Syntax.Delete +{ + public interface IDeleteDataSyntax : IFluentSyntax + { + IDeleteDataSyntax Row(object dataAsAnonymousType); + void AllRows(); + void IsNull(string columnName); + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Index/DeleteIndexBuilder.cs b/src/Umbraco.Core/Migrations/Syntax/Delete/Index/DeleteIndexBuilder.cs similarity index 87% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Index/DeleteIndexBuilder.cs rename to src/Umbraco.Core/Migrations/Syntax/Delete/Index/DeleteIndexBuilder.cs index 146f486675..fbdd3d0222 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Index/DeleteIndexBuilder.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Delete/Index/DeleteIndexBuilder.cs @@ -1,37 +1,37 @@ -using System; -using Umbraco.Core.Persistence.DatabaseModelDefinitions; -using Umbraco.Core.Persistence.Migrations.Syntax.Delete.Expressions; - -namespace Umbraco.Core.Persistence.Migrations.Syntax.Delete.Index -{ - public class DeleteIndexBuilder : ExpressionBuilderBase, IDeleteIndexForTableSyntax, IDeleteIndexOnColumnSyntax - { - public DeleteIndexBuilder(DeleteIndexExpression expression) : base(expression) - { - } - - public IndexColumnDefinition CurrentColumn { get; set; } - - public IDeleteIndexOnColumnSyntax OnTable(string tableName) - { - Expression.Index.TableName = tableName; - return this; - } - - [Obsolete("I don't think this would ever be used when dropping an index, see DeleteIndexExpression.ToString")] - public void OnColumn(string columnName) - { - var column = new IndexColumnDefinition { Name = columnName }; - Expression.Index.Columns.Add(column); - } - - [Obsolete("I don't think this would ever be used when dropping an index, see DeleteIndexExpression.ToString")] - public void OnColumns(params string[] columnNames) - { - foreach (string columnName in columnNames) - { - Expression.Index.Columns.Add(new IndexColumnDefinition { Name = columnName }); - } - } - } -} +using System; +using Umbraco.Core.Migrations.Syntax.Delete.Expressions; +using Umbraco.Core.Persistence.DatabaseModelDefinitions; + +namespace Umbraco.Core.Migrations.Syntax.Delete.Index +{ + public class DeleteIndexBuilder : ExpressionBuilderBase, IDeleteIndexForTableSyntax, IDeleteIndexOnColumnSyntax + { + public DeleteIndexBuilder(DeleteIndexExpression expression) : base(expression) + { + } + + public IndexColumnDefinition CurrentColumn { get; set; } + + public IDeleteIndexOnColumnSyntax OnTable(string tableName) + { + Expression.Index.TableName = tableName; + return this; + } + + [Obsolete("I don't think this would ever be used when dropping an index, see DeleteIndexExpression.ToString")] + public void OnColumn(string columnName) + { + var column = new IndexColumnDefinition { Name = columnName }; + Expression.Index.Columns.Add(column); + } + + [Obsolete("I don't think this would ever be used when dropping an index, see DeleteIndexExpression.ToString")] + public void OnColumns(params string[] columnNames) + { + foreach (string columnName in columnNames) + { + Expression.Index.Columns.Add(new IndexColumnDefinition { Name = columnName }); + } + } + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Index/IDeleteIndexForTableSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Delete/Index/IDeleteIndexForTableSyntax.cs similarity index 65% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Index/IDeleteIndexForTableSyntax.cs rename to src/Umbraco.Core/Migrations/Syntax/Delete/Index/IDeleteIndexForTableSyntax.cs index fc9e272c4d..68fd10e237 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Index/IDeleteIndexForTableSyntax.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Delete/Index/IDeleteIndexForTableSyntax.cs @@ -1,7 +1,7 @@ -namespace Umbraco.Core.Persistence.Migrations.Syntax.Delete.Index -{ - public interface IDeleteIndexForTableSyntax : IFluentSyntax - { - IDeleteIndexOnColumnSyntax OnTable(string tableName); - } -} +namespace Umbraco.Core.Migrations.Syntax.Delete.Index +{ + public interface IDeleteIndexForTableSyntax : IFluentSyntax + { + IDeleteIndexOnColumnSyntax OnTable(string tableName); + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Index/IDeleteIndexOnColumnSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Delete/Index/IDeleteIndexOnColumnSyntax.cs similarity index 84% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Index/IDeleteIndexOnColumnSyntax.cs rename to src/Umbraco.Core/Migrations/Syntax/Delete/Index/IDeleteIndexOnColumnSyntax.cs index b8e0776aa4..bb97622980 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Index/IDeleteIndexOnColumnSyntax.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Delete/Index/IDeleteIndexOnColumnSyntax.cs @@ -1,13 +1,13 @@ -using System; - -namespace Umbraco.Core.Persistence.Migrations.Syntax.Delete.Index -{ - public interface IDeleteIndexOnColumnSyntax : IFluentSyntax - { - [Obsolete("I don't think this would ever be used when dropping an index, see DeleteIndexExpression.ToString")] - void OnColumn(string columnName); - - [Obsolete("I don't think this would ever be used when dropping an index, see DeleteIndexExpression.ToString")] - void OnColumns(params string[] columnNames); - } -} +using System; + +namespace Umbraco.Core.Migrations.Syntax.Delete.Index +{ + public interface IDeleteIndexOnColumnSyntax : IFluentSyntax + { + [Obsolete("I don't think this would ever be used when dropping an index, see DeleteIndexExpression.ToString")] + void OnColumn(string columnName); + + [Obsolete("I don't think this would ever be used when dropping an index, see DeleteIndexExpression.ToString")] + void OnColumns(params string[] columnNames); + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Table/DeleteTableBuilder.cs b/src/Umbraco.Core/Migrations/Syntax/Delete/Table/DeleteTableBuilder.cs similarity index 58% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Table/DeleteTableBuilder.cs rename to src/Umbraco.Core/Migrations/Syntax/Delete/Table/DeleteTableBuilder.cs index c76a5a061e..f9939f2730 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Delete/Table/DeleteTableBuilder.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Delete/Table/DeleteTableBuilder.cs @@ -1,11 +1,11 @@ -using Umbraco.Core.Persistence.Migrations.Syntax.Delete.Expressions; - -namespace Umbraco.Core.Persistence.Migrations.Syntax.Delete.Table -{ - public class DeleteTableBuilder : ExpressionBuilderBase - { - public DeleteTableBuilder(DeleteTableExpression expression) : base(expression) - { - } - } -} +using Umbraco.Core.Migrations.Syntax.Delete.Expressions; + +namespace Umbraco.Core.Migrations.Syntax.Delete.Table +{ + public class DeleteTableBuilder : ExpressionBuilderBase + { + public DeleteTableBuilder(DeleteTableExpression expression) : base(expression) + { + } + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Execute/ExecuteBuilder.cs b/src/Umbraco.Core/Migrations/Syntax/Execute/ExecuteBuilder.cs similarity index 82% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Execute/ExecuteBuilder.cs rename to src/Umbraco.Core/Migrations/Syntax/Execute/ExecuteBuilder.cs index 858e261ff7..c6f428ad94 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Execute/ExecuteBuilder.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Execute/ExecuteBuilder.cs @@ -1,31 +1,30 @@ -using System; -using NPoco; -using Umbraco.Core.Persistence.Migrations.Syntax.Execute.Expressions; -using Umbraco.Core.Persistence.SqlSyntax; - -namespace Umbraco.Core.Persistence.Migrations.Syntax.Execute -{ - public class ExecuteBuilder : IExecuteBuilder - { - private readonly IMigrationContext _context; - private readonly DatabaseType[] _supportedDatabaseTypes; - - public ExecuteBuilder(IMigrationContext context, params DatabaseType[] supportedDatabaseTypes) - { - _context = context; - _supportedDatabaseTypes = supportedDatabaseTypes; - } - - public void Sql(string sqlStatement) - { - var expression = new ExecuteSqlStatementExpression(_context, _supportedDatabaseTypes) {SqlStatement = sqlStatement}; - _context.Expressions.Add(expression); - } - - public void Code(Func codeStatement) - { - var expression = new ExecuteCodeStatementExpression(_context, _supportedDatabaseTypes) { CodeStatement = codeStatement }; - _context.Expressions.Add(expression); - } - } -} +using System; +using NPoco; +using Umbraco.Core.Migrations.Syntax.Execute.Expressions; + +namespace Umbraco.Core.Migrations.Syntax.Execute +{ + public class ExecuteBuilder : IExecuteBuilder + { + private readonly IMigrationContext _context; + private readonly DatabaseType[] _supportedDatabaseTypes; + + public ExecuteBuilder(IMigrationContext context, params DatabaseType[] supportedDatabaseTypes) + { + _context = context; + _supportedDatabaseTypes = supportedDatabaseTypes; + } + + public void Sql(string sqlStatement) + { + var expression = new ExecuteSqlStatementExpression(_context, _supportedDatabaseTypes) {SqlStatement = sqlStatement}; + _context.Expressions.Add(expression); + } + + public void Code(Func codeStatement) + { + var expression = new ExecuteCodeStatementExpression(_context, _supportedDatabaseTypes) { CodeStatement = codeStatement }; + _context.Expressions.Add(expression); + } + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Execute/ExecuteBuilderExtensions.cs b/src/Umbraco.Core/Migrations/Syntax/Execute/ExecuteBuilderExtensions.cs similarity index 97% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Execute/ExecuteBuilderExtensions.cs rename to src/Umbraco.Core/Migrations/Syntax/Execute/ExecuteBuilderExtensions.cs index 8fdd13a32d..9b6e6756d6 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Execute/ExecuteBuilderExtensions.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Execute/ExecuteBuilderExtensions.cs @@ -1,7 +1,7 @@ using System.Linq; using Umbraco.Core.Persistence.SqlSyntax; -namespace Umbraco.Core.Persistence.Migrations.Syntax.Execute +namespace Umbraco.Core.Migrations.Syntax.Execute { public static class ExecuteBuilderExtensions { diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Execute/Expressions/ExecuteCodeStatementExpression.cs b/src/Umbraco.Core/Migrations/Syntax/Execute/Expressions/ExecuteCodeStatementExpression.cs similarity index 85% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Execute/Expressions/ExecuteCodeStatementExpression.cs rename to src/Umbraco.Core/Migrations/Syntax/Execute/Expressions/ExecuteCodeStatementExpression.cs index ca589af16a..372112aedb 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Execute/Expressions/ExecuteCodeStatementExpression.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Execute/Expressions/ExecuteCodeStatementExpression.cs @@ -1,19 +1,19 @@ -using System; -using NPoco; - -namespace Umbraco.Core.Persistence.Migrations.Syntax.Execute.Expressions -{ - public class ExecuteCodeStatementExpression : MigrationExpressionBase - { - public ExecuteCodeStatementExpression(IMigrationContext context, DatabaseType[] supportedDatabaseTypes) - : base(context, supportedDatabaseTypes) - { } - - public virtual Func CodeStatement { get; set; } - - public override string Process(IMigrationContext context) - { - return CodeStatement != null ? CodeStatement(context) : base.Process(context); - } - } -} +using System; +using NPoco; + +namespace Umbraco.Core.Migrations.Syntax.Execute.Expressions +{ + public class ExecuteCodeStatementExpression : MigrationExpressionBase + { + public ExecuteCodeStatementExpression(IMigrationContext context, DatabaseType[] supportedDatabaseTypes) + : base(context, supportedDatabaseTypes) + { } + + public virtual Func CodeStatement { get; set; } + + public override string Process(IMigrationContext context) + { + return CodeStatement != null ? CodeStatement(context) : base.Process(context); + } + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Execute/Expressions/ExecuteSqlStatementExpression.cs b/src/Umbraco.Core/Migrations/Syntax/Execute/Expressions/ExecuteSqlStatementExpression.cs similarity index 84% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Execute/Expressions/ExecuteSqlStatementExpression.cs rename to src/Umbraco.Core/Migrations/Syntax/Execute/Expressions/ExecuteSqlStatementExpression.cs index db36f0887b..c9487cce55 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Execute/Expressions/ExecuteSqlStatementExpression.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Execute/Expressions/ExecuteSqlStatementExpression.cs @@ -1,21 +1,21 @@ -using NPoco; - -namespace Umbraco.Core.Persistence.Migrations.Syntax.Execute.Expressions -{ - public class ExecuteSqlStatementExpression : MigrationExpressionBase - { - public ExecuteSqlStatementExpression(IMigrationContext context, DatabaseType[] supportedDatabaseTypes) - : base(context, supportedDatabaseTypes) - { } - - public virtual string SqlStatement { get; set; } - - public override string ToString() - { - if (IsExpressionSupported() == false) - return string.Empty; - - return SqlStatement; - } - } -} +using NPoco; + +namespace Umbraco.Core.Migrations.Syntax.Execute.Expressions +{ + public class ExecuteSqlStatementExpression : MigrationExpressionBase + { + public ExecuteSqlStatementExpression(IMigrationContext context, DatabaseType[] supportedDatabaseTypes) + : base(context, supportedDatabaseTypes) + { } + + public virtual string SqlStatement { get; set; } + + public override string ToString() + { + if (IsExpressionSupported() == false) + return string.Empty; + + return SqlStatement; + } + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Execute/IExecuteBuilder.cs b/src/Umbraco.Core/Migrations/Syntax/Execute/IExecuteBuilder.cs similarity index 73% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Execute/IExecuteBuilder.cs rename to src/Umbraco.Core/Migrations/Syntax/Execute/IExecuteBuilder.cs index 7c18e3cf4e..3b8e1021bb 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Execute/IExecuteBuilder.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Execute/IExecuteBuilder.cs @@ -1,10 +1,10 @@ -using System; - -namespace Umbraco.Core.Persistence.Migrations.Syntax.Execute -{ - public interface IExecuteBuilder : IFluentSyntax - { - void Sql(string sqlStatement); - void Code(Func codeStatement); - } -} +using System; + +namespace Umbraco.Core.Migrations.Syntax.Execute +{ + public interface IExecuteBuilder : IFluentSyntax + { + void Sql(string sqlStatement); + void Code(Func codeStatement); + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/ExpressionBuilder.cs b/src/Umbraco.Core/Migrations/Syntax/ExpressionBuilder.cs similarity index 94% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/ExpressionBuilder.cs rename to src/Umbraco.Core/Migrations/Syntax/ExpressionBuilder.cs index 5ea9559167..4aca632b3f 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/ExpressionBuilder.cs +++ b/src/Umbraco.Core/Migrations/Syntax/ExpressionBuilder.cs @@ -1,181 +1,181 @@ -using System.Data; -using Umbraco.Core.Persistence.DatabaseModelDefinitions; - -namespace Umbraco.Core.Persistence.Migrations.Syntax -{ - public abstract class ExpressionBuilder : ExpressionBuilderBase - where ExpressionT : IMigrationExpression - where NextT : IFluentSyntax - { - protected ExpressionBuilder(ExpressionT expression) - : base(expression) - { - } - - public abstract ColumnDefinition GetColumnForType(); - - private ColumnDefinition Column - { - get { return GetColumnForType(); } - } - - public NextT AsAnsiString() - { - Column.Type = DbType.AnsiString; - return (NextT)(object)this; - } - - public NextT AsAnsiString(int size) - { - Column.Type = DbType.AnsiString; - Column.Size = size; - return (NextT)(object)this; - } - - public NextT AsBinary() - { - Column.Type = DbType.Binary; - return (NextT)(object)this; - } - - public NextT AsBinary(int size) - { - Column.Type = DbType.Binary; - Column.Size = size; - return (NextT)(object)this; - } - - public NextT AsBoolean() - { - Column.Type = DbType.Boolean; - return (NextT)(object)this; - } - - public NextT AsByte() - { - Column.Type = DbType.Byte; - return (NextT)(object)this; - } - - public NextT AsCurrency() - { - Column.Type = DbType.Currency; - return (NextT)(object)this; - } - - public NextT AsDate() - { - Column.Type = DbType.Date; - return (NextT)(object)this; - } - - public NextT AsDateTime() - { - Column.Type = DbType.DateTime; - return (NextT)(object)this; - } - - public NextT AsDecimal() - { - Column.Type = DbType.Decimal; - return (NextT)(object)this; - } - - public NextT AsDecimal(int size, int precision) - { - Column.Type = DbType.Decimal; - Column.Size = size; - Column.Precision = precision; - return (NextT)(object)this; - } - - public NextT AsDouble() - { - Column.Type = DbType.Double; - return (NextT)(object)this; - } - - public NextT AsFixedLengthString(int size) - { - Column.Type = DbType.StringFixedLength; - Column.Size = size; - return (NextT)(object)this; - } - - public NextT AsFixedLengthAnsiString(int size) - { - Column.Type = DbType.AnsiStringFixedLength; - Column.Size = size; - return (NextT)(object)this; - } - - public NextT AsFloat() - { - Column.Type = DbType.Single; - return (NextT)(object)this; - } - - public NextT AsGuid() - { - Column.Type = DbType.Guid; - return (NextT)(object)this; - } - - public NextT AsInt16() - { - Column.Type = DbType.Int16; - return (NextT)(object)this; - } - - public NextT AsInt32() - { - Column.Type = DbType.Int32; - return (NextT)(object)this; - } - - public NextT AsInt64() - { - Column.Type = DbType.Int64; - return (NextT)(object)this; - } - - public NextT AsString() - { - Column.Type = DbType.String; - return (NextT)(object)this; - } - - public NextT AsString(int size) - { - Column.Type = DbType.String; - Column.Size = size; - return (NextT)(object)this; - } - - public NextT AsTime() - { - Column.Type = DbType.Time; - return (NextT)(object)this; - } - - public NextT AsXml() - { - Column.Type = DbType.Xml; - return (NextT)(object)this; - } - - public NextT AsXml(int size) - { - Column.Type = DbType.Xml; - Column.Size = size; - return (NextT)(object)this; - } - - public NextT AsCustom(string customType) - { - Column.Type = null; - Column.CustomType = customType; - return (NextT)(object)this; - } - } -} +using System.Data; +using Umbraco.Core.Persistence.DatabaseModelDefinitions; + +namespace Umbraco.Core.Migrations.Syntax +{ + public abstract class ExpressionBuilder : ExpressionBuilderBase + where ExpressionT : IMigrationExpression + where NextT : IFluentSyntax + { + protected ExpressionBuilder(ExpressionT expression) + : base(expression) + { + } + + public abstract ColumnDefinition GetColumnForType(); + + private ColumnDefinition Column + { + get { return GetColumnForType(); } + } + + public NextT AsAnsiString() + { + Column.Type = DbType.AnsiString; + return (NextT)(object)this; + } + + public NextT AsAnsiString(int size) + { + Column.Type = DbType.AnsiString; + Column.Size = size; + return (NextT)(object)this; + } + + public NextT AsBinary() + { + Column.Type = DbType.Binary; + return (NextT)(object)this; + } + + public NextT AsBinary(int size) + { + Column.Type = DbType.Binary; + Column.Size = size; + return (NextT)(object)this; + } + + public NextT AsBoolean() + { + Column.Type = DbType.Boolean; + return (NextT)(object)this; + } + + public NextT AsByte() + { + Column.Type = DbType.Byte; + return (NextT)(object)this; + } + + public NextT AsCurrency() + { + Column.Type = DbType.Currency; + return (NextT)(object)this; + } + + public NextT AsDate() + { + Column.Type = DbType.Date; + return (NextT)(object)this; + } + + public NextT AsDateTime() + { + Column.Type = DbType.DateTime; + return (NextT)(object)this; + } + + public NextT AsDecimal() + { + Column.Type = DbType.Decimal; + return (NextT)(object)this; + } + + public NextT AsDecimal(int size, int precision) + { + Column.Type = DbType.Decimal; + Column.Size = size; + Column.Precision = precision; + return (NextT)(object)this; + } + + public NextT AsDouble() + { + Column.Type = DbType.Double; + return (NextT)(object)this; + } + + public NextT AsFixedLengthString(int size) + { + Column.Type = DbType.StringFixedLength; + Column.Size = size; + return (NextT)(object)this; + } + + public NextT AsFixedLengthAnsiString(int size) + { + Column.Type = DbType.AnsiStringFixedLength; + Column.Size = size; + return (NextT)(object)this; + } + + public NextT AsFloat() + { + Column.Type = DbType.Single; + return (NextT)(object)this; + } + + public NextT AsGuid() + { + Column.Type = DbType.Guid; + return (NextT)(object)this; + } + + public NextT AsInt16() + { + Column.Type = DbType.Int16; + return (NextT)(object)this; + } + + public NextT AsInt32() + { + Column.Type = DbType.Int32; + return (NextT)(object)this; + } + + public NextT AsInt64() + { + Column.Type = DbType.Int64; + return (NextT)(object)this; + } + + public NextT AsString() + { + Column.Type = DbType.String; + return (NextT)(object)this; + } + + public NextT AsString(int size) + { + Column.Type = DbType.String; + Column.Size = size; + return (NextT)(object)this; + } + + public NextT AsTime() + { + Column.Type = DbType.Time; + return (NextT)(object)this; + } + + public NextT AsXml() + { + Column.Type = DbType.Xml; + return (NextT)(object)this; + } + + public NextT AsXml(int size) + { + Column.Type = DbType.Xml; + Column.Size = size; + return (NextT)(object)this; + } + + public NextT AsCustom(string customType) + { + Column.Type = null; + Column.CustomType = customType; + return (NextT)(object)this; + } + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/ExpressionBuilderBase.cs b/src/Umbraco.Core/Migrations/Syntax/ExpressionBuilderBase.cs similarity index 79% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/ExpressionBuilderBase.cs rename to src/Umbraco.Core/Migrations/Syntax/ExpressionBuilderBase.cs index 3418ed5a28..b4d8938fd1 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/ExpressionBuilderBase.cs +++ b/src/Umbraco.Core/Migrations/Syntax/ExpressionBuilderBase.cs @@ -1,13 +1,13 @@ -namespace Umbraco.Core.Persistence.Migrations.Syntax -{ - public abstract class ExpressionBuilderBase - where T : IMigrationExpression - { - public T Expression { get; private set; } - - protected ExpressionBuilderBase(T expression) - { - Expression = expression; - } - } -} +namespace Umbraco.Core.Migrations.Syntax +{ + public abstract class ExpressionBuilderBase + where T : IMigrationExpression + { + public T Expression { get; private set; } + + protected ExpressionBuilderBase(T expression) + { + Expression = expression; + } + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Expressions/CreateColumnExpression.cs b/src/Umbraco.Core/Migrations/Syntax/Expressions/CreateColumnExpression.cs similarity index 91% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Expressions/CreateColumnExpression.cs rename to src/Umbraco.Core/Migrations/Syntax/Expressions/CreateColumnExpression.cs index 9ba7787f26..19e9f03f43 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Expressions/CreateColumnExpression.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Expressions/CreateColumnExpression.cs @@ -1,31 +1,31 @@ -using NPoco; -using Umbraco.Core.Persistence.DatabaseModelDefinitions; - -namespace Umbraco.Core.Persistence.Migrations.Syntax.Expressions -{ - public class CreateColumnExpression : MigrationExpressionBase - { - public CreateColumnExpression(IMigrationContext context, DatabaseType[] supportedDatabaseTypes) - : base(context, supportedDatabaseTypes) - { - Column = new ColumnDefinition { ModificationType = ModificationType.Create }; - } - - public string SchemaName { get; set; } - public string TableName { get; set; } - public ColumnDefinition Column { get; set; } - - public override string ToString() - { - if (IsExpressionSupported() == false) - return string.Empty; - - if (string.IsNullOrEmpty(Column.TableName)) - Column.TableName = TableName; - - return string.Format(SqlSyntax.AddColumn, - SqlSyntax.GetQuotedTableName(Column.TableName), - SqlSyntax.Format(Column)); - } - } -} +using NPoco; +using Umbraco.Core.Persistence.DatabaseModelDefinitions; + +namespace Umbraco.Core.Migrations.Syntax.Expressions +{ + public class CreateColumnExpression : MigrationExpressionBase + { + public CreateColumnExpression(IMigrationContext context, DatabaseType[] supportedDatabaseTypes) + : base(context, supportedDatabaseTypes) + { + Column = new ColumnDefinition { ModificationType = ModificationType.Create }; + } + + public string SchemaName { get; set; } + public string TableName { get; set; } + public ColumnDefinition Column { get; set; } + + public override string ToString() + { + if (IsExpressionSupported() == false) + return string.Empty; + + if (string.IsNullOrEmpty(Column.TableName)) + Column.TableName = TableName; + + return string.Format(SqlSyntax.AddColumn, + SqlSyntax.GetQuotedTableName(Column.TableName), + SqlSyntax.Format(Column)); + } + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Expressions/CreateForeignKeyExpression.cs b/src/Umbraco.Core/Migrations/Syntax/Expressions/CreateForeignKeyExpression.cs similarity index 90% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Expressions/CreateForeignKeyExpression.cs rename to src/Umbraco.Core/Migrations/Syntax/Expressions/CreateForeignKeyExpression.cs index 215a494697..29337520a9 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Expressions/CreateForeignKeyExpression.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Expressions/CreateForeignKeyExpression.cs @@ -1,30 +1,30 @@ -using NPoco; -using Umbraco.Core.Persistence.DatabaseModelDefinitions; - -namespace Umbraco.Core.Persistence.Migrations.Syntax.Expressions -{ - public class CreateForeignKeyExpression : MigrationExpressionBase - { - public CreateForeignKeyExpression(IMigrationContext context, DatabaseType[] supportedDatabaseTypes, ForeignKeyDefinition fkDef) - : base(context, supportedDatabaseTypes) - { - ForeignKey = fkDef; - } - - public CreateForeignKeyExpression(IMigrationContext context, DatabaseType[] supportedDatabaseTypes) - : base(context, supportedDatabaseTypes) - { - ForeignKey = new ForeignKeyDefinition(); - } - - public ForeignKeyDefinition ForeignKey { get; set; } - - public override string ToString() - { - if (IsExpressionSupported() == false) - return string.Empty; - - return SqlSyntax.Format(ForeignKey); - } - } -} +using NPoco; +using Umbraco.Core.Persistence.DatabaseModelDefinitions; + +namespace Umbraco.Core.Migrations.Syntax.Expressions +{ + public class CreateForeignKeyExpression : MigrationExpressionBase + { + public CreateForeignKeyExpression(IMigrationContext context, DatabaseType[] supportedDatabaseTypes, ForeignKeyDefinition fkDef) + : base(context, supportedDatabaseTypes) + { + ForeignKey = fkDef; + } + + public CreateForeignKeyExpression(IMigrationContext context, DatabaseType[] supportedDatabaseTypes) + : base(context, supportedDatabaseTypes) + { + ForeignKey = new ForeignKeyDefinition(); + } + + public ForeignKeyDefinition ForeignKey { get; set; } + + public override string ToString() + { + if (IsExpressionSupported() == false) + return string.Empty; + + return SqlSyntax.Format(ForeignKey); + } + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Expressions/CreateIndexExpression.cs b/src/Umbraco.Core/Migrations/Syntax/Expressions/CreateIndexExpression.cs similarity index 89% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Expressions/CreateIndexExpression.cs rename to src/Umbraco.Core/Migrations/Syntax/Expressions/CreateIndexExpression.cs index f56a9ba4a3..b14b627d44 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Expressions/CreateIndexExpression.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Expressions/CreateIndexExpression.cs @@ -1,28 +1,28 @@ -using NPoco; -using Umbraco.Core.Persistence.DatabaseModelDefinitions; - -namespace Umbraco.Core.Persistence.Migrations.Syntax.Expressions -{ - public class CreateIndexExpression : MigrationExpressionBase - { - - public CreateIndexExpression(IMigrationContext context, DatabaseType[] supportedDatabaseTypes, IndexDefinition index) - : base(context, supportedDatabaseTypes) - { - Index = index; - } - - public CreateIndexExpression(IMigrationContext context, DatabaseType[] supportedDatabaseTypes) - : base(context, supportedDatabaseTypes) - { - Index = new IndexDefinition(); - } - - public IndexDefinition Index { get; set; } - - public override string ToString() - { - return SqlSyntax.Format(Index); - } - } -} +using NPoco; +using Umbraco.Core.Persistence.DatabaseModelDefinitions; + +namespace Umbraco.Core.Migrations.Syntax.Expressions +{ + public class CreateIndexExpression : MigrationExpressionBase + { + + public CreateIndexExpression(IMigrationContext context, DatabaseType[] supportedDatabaseTypes, IndexDefinition index) + : base(context, supportedDatabaseTypes) + { + Index = index; + } + + public CreateIndexExpression(IMigrationContext context, DatabaseType[] supportedDatabaseTypes) + : base(context, supportedDatabaseTypes) + { + Index = new IndexDefinition(); + } + + public IndexDefinition Index { get; set; } + + public override string ToString() + { + return SqlSyntax.Format(Index); + } + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/IColumnOptionSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/IColumnOptionSyntax.cs similarity index 93% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/IColumnOptionSyntax.cs rename to src/Umbraco.Core/Migrations/Syntax/IColumnOptionSyntax.cs index 8721f90b87..72ff552cf0 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/IColumnOptionSyntax.cs +++ b/src/Umbraco.Core/Migrations/Syntax/IColumnOptionSyntax.cs @@ -1,31 +1,31 @@ -using Umbraco.Core.Persistence.DatabaseModelDefinitions; - -namespace Umbraco.Core.Persistence.Migrations.Syntax -{ - public interface IColumnOptionSyntax : IFluentSyntax - where TNext : IFluentSyntax - where TNextFk : IFluentSyntax - { - TNext WithDefault(SystemMethods method); - TNext WithDefaultValue(object value); - TNext Identity(); - TNext Indexed(); - TNext Indexed(string indexName); - - TNext PrimaryKey(); - TNext PrimaryKey(string primaryKeyName); - TNext Nullable(); - TNext NotNullable(); - TNext Unique(); - TNext Unique(string indexName); - - TNextFk ForeignKey(string primaryTableName, string primaryColumnName); - TNextFk ForeignKey(string foreignKeyName, string primaryTableName, string primaryColumnName); - TNextFk ForeignKey(string foreignKeyName, string primaryTableSchema, string primaryTableName, string primaryColumnName); - TNextFk ForeignKey(); - - TNextFk ReferencedBy(string foreignTableName, string foreignColumnName); - TNextFk ReferencedBy(string foreignKeyName, string foreignTableName, string foreignColumnName); - TNextFk ReferencedBy(string foreignKeyName, string foreignTableSchema, string foreignTableName, string foreignColumnName); - } -} +using Umbraco.Core.Persistence.DatabaseModelDefinitions; + +namespace Umbraco.Core.Migrations.Syntax +{ + public interface IColumnOptionSyntax : IFluentSyntax + where TNext : IFluentSyntax + where TNextFk : IFluentSyntax + { + TNext WithDefault(SystemMethods method); + TNext WithDefaultValue(object value); + TNext Identity(); + TNext Indexed(); + TNext Indexed(string indexName); + + TNext PrimaryKey(); + TNext PrimaryKey(string primaryKeyName); + TNext Nullable(); + TNext NotNullable(); + TNext Unique(); + TNext Unique(string indexName); + + TNextFk ForeignKey(string primaryTableName, string primaryColumnName); + TNextFk ForeignKey(string foreignKeyName, string primaryTableName, string primaryColumnName); + TNextFk ForeignKey(string foreignKeyName, string primaryTableSchema, string primaryTableName, string primaryColumnName); + TNextFk ForeignKey(); + + TNextFk ReferencedBy(string foreignTableName, string foreignColumnName); + TNextFk ReferencedBy(string foreignKeyName, string foreignTableName, string foreignColumnName); + TNextFk ReferencedBy(string foreignKeyName, string foreignTableSchema, string foreignTableName, string foreignColumnName); + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/IColumnTypeSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/IColumnTypeSyntax.cs similarity index 90% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/IColumnTypeSyntax.cs rename to src/Umbraco.Core/Migrations/Syntax/IColumnTypeSyntax.cs index fc07933a41..a1bb09de8e 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/IColumnTypeSyntax.cs +++ b/src/Umbraco.Core/Migrations/Syntax/IColumnTypeSyntax.cs @@ -1,32 +1,32 @@ -namespace Umbraco.Core.Persistence.Migrations.Syntax -{ - public interface IColumnTypeSyntax : IFluentSyntax - where TNext : IFluentSyntax - { - TNext AsAnsiString(); - TNext AsAnsiString(int size); - TNext AsBinary(); - TNext AsBinary(int size); - TNext AsBoolean(); - TNext AsByte(); - TNext AsCurrency(); - TNext AsDate(); - TNext AsDateTime(); - TNext AsDecimal(); - TNext AsDecimal(int size, int precision); - TNext AsDouble(); - TNext AsGuid(); - TNext AsFixedLengthString(int size); - TNext AsFixedLengthAnsiString(int size); - TNext AsFloat(); - TNext AsInt16(); - TNext AsInt32(); - TNext AsInt64(); - TNext AsString(); - TNext AsString(int size); - TNext AsTime(); - TNext AsXml(); - TNext AsXml(int size); - TNext AsCustom(string customType); - } -} +namespace Umbraco.Core.Migrations.Syntax +{ + public interface IColumnTypeSyntax : IFluentSyntax + where TNext : IFluentSyntax + { + TNext AsAnsiString(); + TNext AsAnsiString(int size); + TNext AsBinary(); + TNext AsBinary(int size); + TNext AsBoolean(); + TNext AsByte(); + TNext AsCurrency(); + TNext AsDate(); + TNext AsDateTime(); + TNext AsDecimal(); + TNext AsDecimal(int size, int precision); + TNext AsDouble(); + TNext AsGuid(); + TNext AsFixedLengthString(int size); + TNext AsFixedLengthAnsiString(int size); + TNext AsFloat(); + TNext AsInt16(); + TNext AsInt32(); + TNext AsInt64(); + TNext AsString(); + TNext AsString(int size); + TNext AsTime(); + TNext AsXml(); + TNext AsXml(int size); + TNext AsCustom(string customType); + } +} diff --git a/src/Umbraco.Core/Migrations/Syntax/IFluentSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/IFluentSyntax.cs new file mode 100644 index 0000000000..c1b6d7c2e5 --- /dev/null +++ b/src/Umbraco.Core/Migrations/Syntax/IFluentSyntax.cs @@ -0,0 +1,7 @@ +namespace Umbraco.Core.Migrations.Syntax +{ + public interface IFluentSyntax + { + + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/IForeignKeyCascadeSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/IForeignKeyCascadeSyntax.cs similarity index 82% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/IForeignKeyCascadeSyntax.cs rename to src/Umbraco.Core/Migrations/Syntax/IForeignKeyCascadeSyntax.cs index ff254a8a18..36fc624631 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/IForeignKeyCascadeSyntax.cs +++ b/src/Umbraco.Core/Migrations/Syntax/IForeignKeyCascadeSyntax.cs @@ -1,13 +1,13 @@ -using System.Data; - -namespace Umbraco.Core.Persistence.Migrations.Syntax -{ - public interface IForeignKeyCascadeSyntax : IFluentSyntax - where TNext : IFluentSyntax - where TNextFk : IFluentSyntax - { - TNextFk OnDelete(Rule rule); - TNextFk OnUpdate(Rule rule); - TNext OnDeleteOrUpdate(Rule rule); - } -} +using System.Data; + +namespace Umbraco.Core.Migrations.Syntax +{ + public interface IForeignKeyCascadeSyntax : IFluentSyntax + where TNext : IFluentSyntax + where TNextFk : IFluentSyntax + { + TNextFk OnDelete(Rule rule); + TNextFk OnUpdate(Rule rule); + TNext OnDeleteOrUpdate(Rule rule); + } +} diff --git a/src/Umbraco.Core/Migrations/Syntax/IfDatabase/IIfDatabaseBuilder.cs b/src/Umbraco.Core/Migrations/Syntax/IfDatabase/IIfDatabaseBuilder.cs new file mode 100644 index 0000000000..e26e6ff45d --- /dev/null +++ b/src/Umbraco.Core/Migrations/Syntax/IfDatabase/IIfDatabaseBuilder.cs @@ -0,0 +1,17 @@ +using Umbraco.Core.Migrations.Syntax.Create; +using Umbraco.Core.Migrations.Syntax.Delete; +using Umbraco.Core.Migrations.Syntax.Execute; +using Umbraco.Core.Migrations.Syntax.Rename; +using Umbraco.Core.Migrations.Syntax.Update; + +namespace Umbraco.Core.Migrations.Syntax.IfDatabase +{ + public interface IIfDatabaseBuilder : IFluentSyntax + { + ICreateBuilder Create { get; } + IExecuteBuilder Execute { get; } + IDeleteBuilder Delete { get; } + IRenameBuilder Rename { get; } + IUpdateBuilder Update { get; } + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/IfDatabase/IfDatabaseBuilder.cs b/src/Umbraco.Core/Migrations/Syntax/IfDatabase/IfDatabaseBuilder.cs similarity index 68% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/IfDatabase/IfDatabaseBuilder.cs rename to src/Umbraco.Core/Migrations/Syntax/IfDatabase/IfDatabaseBuilder.cs index ba0134cef4..02d1483c0a 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/IfDatabase/IfDatabaseBuilder.cs +++ b/src/Umbraco.Core/Migrations/Syntax/IfDatabase/IfDatabaseBuilder.cs @@ -1,32 +1,31 @@ -using NPoco; -using Umbraco.Core.Persistence.Migrations.Syntax.Create; -using Umbraco.Core.Persistence.Migrations.Syntax.Delete; -using Umbraco.Core.Persistence.Migrations.Syntax.Execute; -using Umbraco.Core.Persistence.Migrations.Syntax.Rename; -using Umbraco.Core.Persistence.Migrations.Syntax.Update; -using Umbraco.Core.Persistence.SqlSyntax; - -namespace Umbraco.Core.Persistence.Migrations.Syntax.IfDatabase -{ - public class IfDatabaseBuilder : IIfDatabaseBuilder - { - private readonly IMigrationContext _context; - private readonly DatabaseType[] _supportedDatabaseTypes; - - public IfDatabaseBuilder(IMigrationContext context, params DatabaseType[] supportedDatabaseTypes) - { - _context = context; - _supportedDatabaseTypes = supportedDatabaseTypes; - } - - public ICreateBuilder Create => new CreateBuilder(_context, _supportedDatabaseTypes); - - public IExecuteBuilder Execute => new ExecuteBuilder(_context, _supportedDatabaseTypes); - - public IDeleteBuilder Delete => new DeleteBuilder(_context, _supportedDatabaseTypes); - - public IRenameBuilder Rename => new RenameBuilder(_context, _supportedDatabaseTypes); - - public IUpdateBuilder Update => new UpdateBuilder(_context, _supportedDatabaseTypes); - } -} +using NPoco; +using Umbraco.Core.Migrations.Syntax.Create; +using Umbraco.Core.Migrations.Syntax.Delete; +using Umbraco.Core.Migrations.Syntax.Execute; +using Umbraco.Core.Migrations.Syntax.Rename; +using Umbraco.Core.Migrations.Syntax.Update; + +namespace Umbraco.Core.Migrations.Syntax.IfDatabase +{ + public class IfDatabaseBuilder : IIfDatabaseBuilder + { + private readonly IMigrationContext _context; + private readonly DatabaseType[] _supportedDatabaseTypes; + + public IfDatabaseBuilder(IMigrationContext context, params DatabaseType[] supportedDatabaseTypes) + { + _context = context; + _supportedDatabaseTypes = supportedDatabaseTypes; + } + + public ICreateBuilder Create => new CreateBuilder(_context, _supportedDatabaseTypes); + + public IExecuteBuilder Execute => new ExecuteBuilder(_context, _supportedDatabaseTypes); + + public IDeleteBuilder Delete => new DeleteBuilder(_context, _supportedDatabaseTypes); + + public IRenameBuilder Rename => new RenameBuilder(_context, _supportedDatabaseTypes); + + public IUpdateBuilder Update => new UpdateBuilder(_context, _supportedDatabaseTypes); + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Insert/Expressions/InsertDataExpression.cs b/src/Umbraco.Core/Migrations/Syntax/Insert/Expressions/InsertDataExpression.cs similarity index 94% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Insert/Expressions/InsertDataExpression.cs rename to src/Umbraco.Core/Migrations/Syntax/Insert/Expressions/InsertDataExpression.cs index 08eb2ead05..c7022f7d15 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Insert/Expressions/InsertDataExpression.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Insert/Expressions/InsertDataExpression.cs @@ -1,81 +1,82 @@ -using System.Collections.Generic; -using System.Text; -using NPoco; -using Umbraco.Core.Persistence.DatabaseModelDefinitions; - -namespace Umbraco.Core.Persistence.Migrations.Syntax.Insert.Expressions -{ - public class InsertDataExpression : MigrationExpressionBase - { - private readonly List _rows = new List(); - - public InsertDataExpression(IMigrationContext context, DatabaseType[] supportedDatabaseTypes) - : base(context, supportedDatabaseTypes) - { } - - public string SchemaName { get; set; } - public string TableName { get; set; } - public bool EnabledIdentityInsert { get; set; } - - public List Rows => _rows; - - public override string ToString() - { - if (IsExpressionSupported() == false) - return string.Empty; - - var sb = new StringBuilder(); - - if (EnabledIdentityInsert && SqlSyntax.SupportsIdentityInsert()) - { - sb.AppendLine(string.Format("SET IDENTITY_INSERT {0} ON;", SqlSyntax.GetQuotedTableName(TableName))); - if (CurrentDatabaseType.IsSqlServerOrCe()) - { - sb.AppendLine("GO"); - } - } - - try - { - foreach (var item in Rows) - { - var cols = ""; - var vals = ""; - foreach (var keyVal in item) - { - cols += SqlSyntax.GetQuotedColumnName(keyVal.Key) + ","; - vals += GetQuotedValue(keyVal.Value) + ","; - } - cols = cols.TrimEnd(','); - vals = vals.TrimEnd(','); - - - var sql = string.Format(SqlSyntax.InsertData, - SqlSyntax.GetQuotedTableName(TableName), - cols, vals); - - sb.AppendLine(string.Format("{0};", sql)); - if (CurrentDatabaseType.IsSqlServerOrCe()) - { - sb.AppendLine("GO"); - } - } - } - finally - { - if (EnabledIdentityInsert && SqlSyntax.SupportsIdentityInsert()) - { - sb.AppendLine(string.Format("SET IDENTITY_INSERT {0} OFF;", SqlSyntax.GetQuotedTableName(TableName))); - if (CurrentDatabaseType.IsSqlServerOrCe()) - { - sb.AppendLine("GO"); - } - } - } - - return sb.ToString(); - } - - - } -} +using System.Collections.Generic; +using System.Text; +using NPoco; +using Umbraco.Core.Persistence; +using Umbraco.Core.Persistence.DatabaseModelDefinitions; + +namespace Umbraco.Core.Migrations.Syntax.Insert.Expressions +{ + public class InsertDataExpression : MigrationExpressionBase + { + private readonly List _rows = new List(); + + public InsertDataExpression(IMigrationContext context, DatabaseType[] supportedDatabaseTypes) + : base(context, supportedDatabaseTypes) + { } + + public string SchemaName { get; set; } + public string TableName { get; set; } + public bool EnabledIdentityInsert { get; set; } + + public List Rows => _rows; + + public override string ToString() + { + if (IsExpressionSupported() == false) + return string.Empty; + + var sb = new StringBuilder(); + + if (EnabledIdentityInsert && SqlSyntax.SupportsIdentityInsert()) + { + sb.AppendLine(string.Format("SET IDENTITY_INSERT {0} ON;", SqlSyntax.GetQuotedTableName(TableName))); + if (CurrentDatabaseType.IsSqlServerOrCe()) + { + sb.AppendLine("GO"); + } + } + + try + { + foreach (var item in Rows) + { + var cols = ""; + var vals = ""; + foreach (var keyVal in item) + { + cols += SqlSyntax.GetQuotedColumnName(keyVal.Key) + ","; + vals += GetQuotedValue(keyVal.Value) + ","; + } + cols = cols.TrimEnd(','); + vals = vals.TrimEnd(','); + + + var sql = string.Format(SqlSyntax.InsertData, + SqlSyntax.GetQuotedTableName(TableName), + cols, vals); + + sb.AppendLine(string.Format("{0};", sql)); + if (CurrentDatabaseType.IsSqlServerOrCe()) + { + sb.AppendLine("GO"); + } + } + } + finally + { + if (EnabledIdentityInsert && SqlSyntax.SupportsIdentityInsert()) + { + sb.AppendLine(string.Format("SET IDENTITY_INSERT {0} OFF;", SqlSyntax.GetQuotedTableName(TableName))); + if (CurrentDatabaseType.IsSqlServerOrCe()) + { + sb.AppendLine("GO"); + } + } + } + + return sb.ToString(); + } + + + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Insert/IInsertBuilder.cs b/src/Umbraco.Core/Migrations/Syntax/Insert/IInsertBuilder.cs similarity index 63% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Insert/IInsertBuilder.cs rename to src/Umbraco.Core/Migrations/Syntax/Insert/IInsertBuilder.cs index e2a97a01c8..eb5ba5ac90 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Insert/IInsertBuilder.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Insert/IInsertBuilder.cs @@ -1,7 +1,7 @@ -namespace Umbraco.Core.Persistence.Migrations.Syntax.Insert -{ - public interface IInsertBuilder : IFluentSyntax - { - IInsertDataSyntax IntoTable(string tableName); - } -} +namespace Umbraco.Core.Migrations.Syntax.Insert +{ + public interface IInsertBuilder : IFluentSyntax + { + IInsertDataSyntax IntoTable(string tableName); + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Insert/IInsertDataSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Insert/IInsertDataSyntax.cs similarity index 71% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Insert/IInsertDataSyntax.cs rename to src/Umbraco.Core/Migrations/Syntax/Insert/IInsertDataSyntax.cs index 0bdc4a5cd5..b875640dc2 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Insert/IInsertDataSyntax.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Insert/IInsertDataSyntax.cs @@ -1,8 +1,8 @@ -namespace Umbraco.Core.Persistence.Migrations.Syntax.Insert -{ - public interface IInsertDataSyntax : IFluentSyntax - { - IInsertDataSyntax EnableIdentityInsert(); - IInsertDataSyntax Row(object dataAsAnonymousType); - } -} +namespace Umbraco.Core.Migrations.Syntax.Insert +{ + public interface IInsertDataSyntax : IFluentSyntax + { + IInsertDataSyntax EnableIdentityInsert(); + IInsertDataSyntax Row(object dataAsAnonymousType); + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Insert/InsertBuilder.cs b/src/Umbraco.Core/Migrations/Syntax/Insert/InsertBuilder.cs similarity index 84% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Insert/InsertBuilder.cs rename to src/Umbraco.Core/Migrations/Syntax/Insert/InsertBuilder.cs index 1f4dad0c99..d1ae17ffef 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Insert/InsertBuilder.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Insert/InsertBuilder.cs @@ -1,26 +1,26 @@ -using NPoco; -using Umbraco.Core.Persistence.Migrations.Syntax.Insert.Expressions; -using Umbraco.Core.Persistence.SqlSyntax; - -namespace Umbraco.Core.Persistence.Migrations.Syntax.Insert -{ - public class InsertBuilder : IInsertBuilder - { - private readonly IMigrationContext _context; - private readonly ISqlSyntaxProvider _sqlSyntax; - private readonly DatabaseType[] _supportedDatabaseTypes; - - public InsertBuilder(IMigrationContext context, params DatabaseType[] supportedDatabaseTypes) - { - _context = context; - _supportedDatabaseTypes = supportedDatabaseTypes; - } - - public IInsertDataSyntax IntoTable(string tableName) - { - var expression = new InsertDataExpression(_context, _supportedDatabaseTypes) { TableName = tableName }; - _context.Expressions.Add(expression); - return new InsertDataBuilder(expression); - } - } -} +using NPoco; +using Umbraco.Core.Migrations.Syntax.Insert.Expressions; +using Umbraco.Core.Persistence.SqlSyntax; + +namespace Umbraco.Core.Migrations.Syntax.Insert +{ + public class InsertBuilder : IInsertBuilder + { + private readonly IMigrationContext _context; + private readonly ISqlSyntaxProvider _sqlSyntax; + private readonly DatabaseType[] _supportedDatabaseTypes; + + public InsertBuilder(IMigrationContext context, params DatabaseType[] supportedDatabaseTypes) + { + _context = context; + _supportedDatabaseTypes = supportedDatabaseTypes; + } + + public IInsertDataSyntax IntoTable(string tableName) + { + var expression = new InsertDataExpression(_context, _supportedDatabaseTypes) { TableName = tableName }; + _context.Expressions.Add(expression); + return new InsertDataBuilder(expression); + } + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Insert/InsertDataBuilder.cs b/src/Umbraco.Core/Migrations/Syntax/Insert/InsertDataBuilder.cs similarity index 87% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Insert/InsertDataBuilder.cs rename to src/Umbraco.Core/Migrations/Syntax/Insert/InsertDataBuilder.cs index 8a8ce11e15..734e6be39d 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Insert/InsertDataBuilder.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Insert/InsertDataBuilder.cs @@ -1,42 +1,42 @@ -using System.Collections.Generic; -using System.ComponentModel; -using Umbraco.Core.Persistence.DatabaseModelDefinitions; -using Umbraco.Core.Persistence.Migrations.Syntax.Insert.Expressions; - -namespace Umbraco.Core.Persistence.Migrations.Syntax.Insert -{ - public class InsertDataBuilder : IInsertDataSyntax - { - private readonly InsertDataExpression _expression; - - public InsertDataBuilder(InsertDataExpression expression) - { - _expression = expression; - } - - public IInsertDataSyntax EnableIdentityInsert() - { - _expression.EnabledIdentityInsert = true; - return this; - } - - public IInsertDataSyntax Row(object dataAsAnonymousType) - { - _expression.Rows.Add(GetData(dataAsAnonymousType)); - return this; - } - - private static InsertionDataDefinition GetData(object dataAsAnonymousType) - { - var data = new InsertionDataDefinition(); - var properties = TypeDescriptor.GetProperties(dataAsAnonymousType); - - foreach (PropertyDescriptor property in properties) - { - data.Add(new KeyValuePair(property.Name, property.GetValue(dataAsAnonymousType))); - } - - return data; - } - } -} +using System.Collections.Generic; +using System.ComponentModel; +using Umbraco.Core.Migrations.Syntax.Insert.Expressions; +using Umbraco.Core.Persistence.DatabaseModelDefinitions; + +namespace Umbraco.Core.Migrations.Syntax.Insert +{ + public class InsertDataBuilder : IInsertDataSyntax + { + private readonly InsertDataExpression _expression; + + public InsertDataBuilder(InsertDataExpression expression) + { + _expression = expression; + } + + public IInsertDataSyntax EnableIdentityInsert() + { + _expression.EnabledIdentityInsert = true; + return this; + } + + public IInsertDataSyntax Row(object dataAsAnonymousType) + { + _expression.Rows.Add(GetData(dataAsAnonymousType)); + return this; + } + + private static InsertionDataDefinition GetData(object dataAsAnonymousType) + { + var data = new InsertionDataDefinition(); + var properties = TypeDescriptor.GetProperties(dataAsAnonymousType); + + foreach (PropertyDescriptor property in properties) + { + data.Add(new KeyValuePair(property.Name, property.GetValue(dataAsAnonymousType))); + } + + return data; + } + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Rename/Column/IRenameColumnTableSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Rename/Column/IRenameColumnTableSyntax.cs similarity index 63% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Rename/Column/IRenameColumnTableSyntax.cs rename to src/Umbraco.Core/Migrations/Syntax/Rename/Column/IRenameColumnTableSyntax.cs index 5456483efc..340749947b 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Rename/Column/IRenameColumnTableSyntax.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Rename/Column/IRenameColumnTableSyntax.cs @@ -1,7 +1,7 @@ -namespace Umbraco.Core.Persistence.Migrations.Syntax.Rename.Column -{ - public interface IRenameColumnTableSyntax : IFluentSyntax - { - IRenameColumnToSyntax OnTable(string tableName); - } -} +namespace Umbraco.Core.Migrations.Syntax.Rename.Column +{ + public interface IRenameColumnTableSyntax : IFluentSyntax + { + IRenameColumnToSyntax OnTable(string tableName); + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Rename/Column/IRenameColumnToSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Rename/Column/IRenameColumnToSyntax.cs similarity index 57% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Rename/Column/IRenameColumnToSyntax.cs rename to src/Umbraco.Core/Migrations/Syntax/Rename/Column/IRenameColumnToSyntax.cs index d78b6cb540..166a07e05c 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Rename/Column/IRenameColumnToSyntax.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Rename/Column/IRenameColumnToSyntax.cs @@ -1,7 +1,7 @@ -namespace Umbraco.Core.Persistence.Migrations.Syntax.Rename.Column -{ - public interface IRenameColumnToSyntax : IFluentSyntax - { - void To(string name); - } -} +namespace Umbraco.Core.Migrations.Syntax.Rename.Column +{ + public interface IRenameColumnToSyntax : IFluentSyntax + { + void To(string name); + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Rename/Column/RenameColumnBuilder.cs b/src/Umbraco.Core/Migrations/Syntax/Rename/Column/RenameColumnBuilder.cs similarity index 76% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Rename/Column/RenameColumnBuilder.cs rename to src/Umbraco.Core/Migrations/Syntax/Rename/Column/RenameColumnBuilder.cs index 05146bee66..e432abb9e2 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Rename/Column/RenameColumnBuilder.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Rename/Column/RenameColumnBuilder.cs @@ -1,22 +1,22 @@ -using Umbraco.Core.Persistence.Migrations.Syntax.Rename.Expressions; - -namespace Umbraco.Core.Persistence.Migrations.Syntax.Rename.Column -{ - public class RenameColumnBuilder : ExpressionBuilderBase, IRenameColumnToSyntax, IRenameColumnTableSyntax - { - public RenameColumnBuilder(RenameColumnExpression expression) : base(expression) - { - } - - public void To(string name) - { - Expression.NewName = name; - } - - public IRenameColumnToSyntax OnTable(string tableName) - { - Expression.TableName = tableName; - return this; - } - } -} +using Umbraco.Core.Migrations.Syntax.Rename.Expressions; + +namespace Umbraco.Core.Migrations.Syntax.Rename.Column +{ + public class RenameColumnBuilder : ExpressionBuilderBase, IRenameColumnToSyntax, IRenameColumnTableSyntax + { + public RenameColumnBuilder(RenameColumnExpression expression) : base(expression) + { + } + + public void To(string name) + { + Expression.NewName = name; + } + + public IRenameColumnToSyntax OnTable(string tableName) + { + Expression.TableName = tableName; + return this; + } + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Rename/Expressions/RenameColumnExpression.cs b/src/Umbraco.Core/Migrations/Syntax/Rename/Expressions/RenameColumnExpression.cs similarity index 93% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Rename/Expressions/RenameColumnExpression.cs rename to src/Umbraco.Core/Migrations/Syntax/Rename/Expressions/RenameColumnExpression.cs index 1042a60402..c390cd4c54 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Rename/Expressions/RenameColumnExpression.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Rename/Expressions/RenameColumnExpression.cs @@ -1,53 +1,54 @@ -using NPoco; - -namespace Umbraco.Core.Persistence.Migrations.Syntax.Rename.Expressions -{ - public class RenameColumnExpression : MigrationExpressionBase - { - public RenameColumnExpression(IMigrationContext context, DatabaseType[] supportedDatabaseTypes) - : base(context, supportedDatabaseTypes) - { } - - public virtual string SchemaName { get; set; } - public virtual string TableName { get; set; } - public virtual string OldName { get; set; } - public virtual string NewName { get; set; } - - public override string Process(IMigrationContext context) - { - if (CurrentDatabaseType.IsMySql()) - { - string columnDefinitionSql = string.Format(@" -SELECT CONCAT( - CAST(COLUMN_TYPE AS CHAR), - IF(ISNULL(CHARACTER_SET_NAME), - '', - CONCAT(' CHARACTER SET ', CHARACTER_SET_NAME)), - IF(ISNULL(COLLATION_NAME), - '', - CONCAT(' COLLATE ', COLLATION_NAME)), - ' ', - IF(IS_NULLABLE = 'NO', 'NOT NULL ', ''), - IF(IS_NULLABLE = 'NO' AND COLUMN_DEFAULT IS NULL, - '', - CONCAT('DEFAULT ', QUOTE(COLUMN_DEFAULT), ' ')), - UPPER(extra)) - FROM INFORMATION_SCHEMA.COLUMNS - WHERE TABLE_NAME = '{0}' AND COLUMN_NAME = '{1}'", TableName, OldName); - - var columnDefinition = context.Database.ExecuteScalar(columnDefinitionSql); - return this.ToString() + " " + columnDefinition; - } - - return this.ToString(); - } - - public override string ToString() - { - if (IsExpressionSupported() == false) - return string.Empty; - - return SqlSyntax.FormatColumnRename(TableName, OldName, NewName); - } - } -} +using NPoco; +using Umbraco.Core.Persistence; + +namespace Umbraco.Core.Migrations.Syntax.Rename.Expressions +{ + public class RenameColumnExpression : MigrationExpressionBase + { + public RenameColumnExpression(IMigrationContext context, DatabaseType[] supportedDatabaseTypes) + : base(context, supportedDatabaseTypes) + { } + + public virtual string SchemaName { get; set; } + public virtual string TableName { get; set; } + public virtual string OldName { get; set; } + public virtual string NewName { get; set; } + + public override string Process(IMigrationContext context) + { + if (CurrentDatabaseType.IsMySql()) + { + string columnDefinitionSql = string.Format(@" +SELECT CONCAT( + CAST(COLUMN_TYPE AS CHAR), + IF(ISNULL(CHARACTER_SET_NAME), + '', + CONCAT(' CHARACTER SET ', CHARACTER_SET_NAME)), + IF(ISNULL(COLLATION_NAME), + '', + CONCAT(' COLLATE ', COLLATION_NAME)), + ' ', + IF(IS_NULLABLE = 'NO', 'NOT NULL ', ''), + IF(IS_NULLABLE = 'NO' AND COLUMN_DEFAULT IS NULL, + '', + CONCAT('DEFAULT ', QUOTE(COLUMN_DEFAULT), ' ')), + UPPER(extra)) + FROM INFORMATION_SCHEMA.COLUMNS + WHERE TABLE_NAME = '{0}' AND COLUMN_NAME = '{1}'", TableName, OldName); + + var columnDefinition = context.Database.ExecuteScalar(columnDefinitionSql); + return this.ToString() + " " + columnDefinition; + } + + return this.ToString(); + } + + public override string ToString() + { + if (IsExpressionSupported() == false) + return string.Empty; + + return SqlSyntax.FormatColumnRename(TableName, OldName, NewName); + } + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Rename/Expressions/RenameTableExpression.cs b/src/Umbraco.Core/Migrations/Syntax/Rename/Expressions/RenameTableExpression.cs similarity index 87% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Rename/Expressions/RenameTableExpression.cs rename to src/Umbraco.Core/Migrations/Syntax/Rename/Expressions/RenameTableExpression.cs index 6608882566..fc854a9e4d 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Rename/Expressions/RenameTableExpression.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Rename/Expressions/RenameTableExpression.cs @@ -1,23 +1,23 @@ -using NPoco; - -namespace Umbraco.Core.Persistence.Migrations.Syntax.Rename.Expressions -{ - public class RenameTableExpression : MigrationExpressionBase - { - public RenameTableExpression(IMigrationContext context, DatabaseType[] supportedDatabaseTypes) - : base(context, supportedDatabaseTypes) - { } - - public virtual string SchemaName { get; set; } - public virtual string OldName { get; set; } - public virtual string NewName { get; set; } - - public override string ToString() - { - if (IsExpressionSupported() == false) - return string.Empty; - - return SqlSyntax.FormatTableRename(OldName, NewName); - } - } -} +using NPoco; + +namespace Umbraco.Core.Migrations.Syntax.Rename.Expressions +{ + public class RenameTableExpression : MigrationExpressionBase + { + public RenameTableExpression(IMigrationContext context, DatabaseType[] supportedDatabaseTypes) + : base(context, supportedDatabaseTypes) + { } + + public virtual string SchemaName { get; set; } + public virtual string OldName { get; set; } + public virtual string NewName { get; set; } + + public override string ToString() + { + if (IsExpressionSupported() == false) + return string.Empty; + + return SqlSyntax.FormatTableRename(OldName, NewName); + } + } +} diff --git a/src/Umbraco.Core/Migrations/Syntax/Rename/IRenameBuilder.cs b/src/Umbraco.Core/Migrations/Syntax/Rename/IRenameBuilder.cs new file mode 100644 index 0000000000..baad503753 --- /dev/null +++ b/src/Umbraco.Core/Migrations/Syntax/Rename/IRenameBuilder.cs @@ -0,0 +1,11 @@ +using Umbraco.Core.Migrations.Syntax.Rename.Column; +using Umbraco.Core.Migrations.Syntax.Rename.Table; + +namespace Umbraco.Core.Migrations.Syntax.Rename +{ + public interface IRenameBuilder : IFluentSyntax + { + IRenameTableSyntax Table(string oldName); + IRenameColumnTableSyntax Column(string oldName); + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Rename/RenameBuilder.cs b/src/Umbraco.Core/Migrations/Syntax/Rename/RenameBuilder.cs similarity index 75% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Rename/RenameBuilder.cs rename to src/Umbraco.Core/Migrations/Syntax/Rename/RenameBuilder.cs index 36e96df5f0..d3a158d87e 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Rename/RenameBuilder.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Rename/RenameBuilder.cs @@ -1,34 +1,33 @@ -using NPoco; -using Umbraco.Core.Persistence.Migrations.Syntax.Rename.Column; -using Umbraco.Core.Persistence.Migrations.Syntax.Rename.Expressions; -using Umbraco.Core.Persistence.Migrations.Syntax.Rename.Table; -using Umbraco.Core.Persistence.SqlSyntax; - -namespace Umbraco.Core.Persistence.Migrations.Syntax.Rename -{ - public class RenameBuilder : IRenameBuilder - { - private readonly IMigrationContext _context; - private readonly DatabaseType[] _supportedDatabaseTypes; - - public RenameBuilder(IMigrationContext context, params DatabaseType[] supportedDatabaseTypes) - { - _context = context; - _supportedDatabaseTypes = supportedDatabaseTypes; - } - - public IRenameTableSyntax Table(string oldName) - { - var expression = new RenameTableExpression(_context, _supportedDatabaseTypes) { OldName = oldName }; - _context.Expressions.Add(expression); - return new RenameTableBuilder(expression); - } - - public IRenameColumnTableSyntax Column(string oldName) - { - var expression = new RenameColumnExpression(_context, _supportedDatabaseTypes) { OldName = oldName }; - _context.Expressions.Add(expression); - return new RenameColumnBuilder(expression); - } - } -} +using NPoco; +using Umbraco.Core.Migrations.Syntax.Rename.Column; +using Umbraco.Core.Migrations.Syntax.Rename.Expressions; +using Umbraco.Core.Migrations.Syntax.Rename.Table; + +namespace Umbraco.Core.Migrations.Syntax.Rename +{ + public class RenameBuilder : IRenameBuilder + { + private readonly IMigrationContext _context; + private readonly DatabaseType[] _supportedDatabaseTypes; + + public RenameBuilder(IMigrationContext context, params DatabaseType[] supportedDatabaseTypes) + { + _context = context; + _supportedDatabaseTypes = supportedDatabaseTypes; + } + + public IRenameTableSyntax Table(string oldName) + { + var expression = new RenameTableExpression(_context, _supportedDatabaseTypes) { OldName = oldName }; + _context.Expressions.Add(expression); + return new RenameTableBuilder(expression); + } + + public IRenameColumnTableSyntax Column(string oldName) + { + var expression = new RenameColumnExpression(_context, _supportedDatabaseTypes) { OldName = oldName }; + _context.Expressions.Add(expression); + return new RenameColumnBuilder(expression); + } + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Rename/Table/IRenameTableSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Rename/Table/IRenameTableSyntax.cs similarity index 57% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Rename/Table/IRenameTableSyntax.cs rename to src/Umbraco.Core/Migrations/Syntax/Rename/Table/IRenameTableSyntax.cs index 220990b8c2..77962d0f78 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Rename/Table/IRenameTableSyntax.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Rename/Table/IRenameTableSyntax.cs @@ -1,7 +1,7 @@ -namespace Umbraco.Core.Persistence.Migrations.Syntax.Rename.Table -{ - public interface IRenameTableSyntax : IFluentSyntax - { - void To(string name); - } -} +namespace Umbraco.Core.Migrations.Syntax.Rename.Table +{ + public interface IRenameTableSyntax : IFluentSyntax + { + void To(string name); + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Rename/Table/RenameTableBuilder.cs b/src/Umbraco.Core/Migrations/Syntax/Rename/Table/RenameTableBuilder.cs similarity index 67% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Rename/Table/RenameTableBuilder.cs rename to src/Umbraco.Core/Migrations/Syntax/Rename/Table/RenameTableBuilder.cs index e40a41d305..c1e2700028 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Rename/Table/RenameTableBuilder.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Rename/Table/RenameTableBuilder.cs @@ -1,16 +1,16 @@ -using Umbraco.Core.Persistence.Migrations.Syntax.Rename.Expressions; - -namespace Umbraco.Core.Persistence.Migrations.Syntax.Rename.Table -{ - public class RenameTableBuilder : ExpressionBuilderBase, IRenameTableSyntax - { - public RenameTableBuilder(RenameTableExpression expression) : base(expression) - { - } - - public void To(string name) - { - Expression.NewName = name; - } - } -} +using Umbraco.Core.Migrations.Syntax.Rename.Expressions; + +namespace Umbraco.Core.Migrations.Syntax.Rename.Table +{ + public class RenameTableBuilder : ExpressionBuilderBase, IRenameTableSyntax + { + public RenameTableBuilder(RenameTableExpression expression) : base(expression) + { + } + + public void To(string name) + { + Expression.NewName = name; + } + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Update/Expressions/UpdateDataExpression.cs b/src/Umbraco.Core/Migrations/Syntax/Update/Expressions/UpdateDataExpression.cs similarity index 93% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Update/Expressions/UpdateDataExpression.cs rename to src/Umbraco.Core/Migrations/Syntax/Update/Expressions/UpdateDataExpression.cs index 1141e29472..0de91c5c2a 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Update/Expressions/UpdateDataExpression.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Update/Expressions/UpdateDataExpression.cs @@ -1,54 +1,54 @@ -using System.Collections.Generic; -using NPoco; - -namespace Umbraco.Core.Persistence.Migrations.Syntax.Update.Expressions -{ - public class UpdateDataExpression : MigrationExpressionBase - { - public UpdateDataExpression(IMigrationContext context, DatabaseType[] supportedDatabaseTypes) - : base(context, supportedDatabaseTypes) - { } - - public string SchemaName { get; set; } - public string TableName { get; set; } - - public List> Set { get; set; } - public List> Where { get; set; } - public bool IsAllRows { get; set; } - - public override string ToString() - { - if (IsExpressionSupported() == false) - return string.Empty; - - var updateItems = new List(); - var whereClauses = new List(); - - foreach (var item in Set) - { - updateItems.Add(string.Format("{0} = {1}", - SqlSyntax.GetQuotedColumnName(item.Key), - GetQuotedValue(item.Value))); - } - - if (IsAllRows) - { - whereClauses.Add("1 = 1"); - } - else - { - foreach (var item in Where) - { - whereClauses.Add(string.Format("{0} {1} {2}", - SqlSyntax.GetQuotedColumnName(item.Key), - item.Value == null ? "IS" : "=", - GetQuotedValue(item.Value))); - } - } - return string.Format(SqlSyntax.UpdateData, - SqlSyntax.GetQuotedTableName(TableName), - string.Join(", ", updateItems.ToArray()), - string.Join(" AND ", whereClauses.ToArray())); - } - } -} +using System.Collections.Generic; +using NPoco; + +namespace Umbraco.Core.Migrations.Syntax.Update.Expressions +{ + public class UpdateDataExpression : MigrationExpressionBase + { + public UpdateDataExpression(IMigrationContext context, DatabaseType[] supportedDatabaseTypes) + : base(context, supportedDatabaseTypes) + { } + + public string SchemaName { get; set; } + public string TableName { get; set; } + + public List> Set { get; set; } + public List> Where { get; set; } + public bool IsAllRows { get; set; } + + public override string ToString() + { + if (IsExpressionSupported() == false) + return string.Empty; + + var updateItems = new List(); + var whereClauses = new List(); + + foreach (var item in Set) + { + updateItems.Add(string.Format("{0} = {1}", + SqlSyntax.GetQuotedColumnName(item.Key), + GetQuotedValue(item.Value))); + } + + if (IsAllRows) + { + whereClauses.Add("1 = 1"); + } + else + { + foreach (var item in Where) + { + whereClauses.Add(string.Format("{0} {1} {2}", + SqlSyntax.GetQuotedColumnName(item.Key), + item.Value == null ? "IS" : "=", + GetQuotedValue(item.Value))); + } + } + return string.Format(SqlSyntax.UpdateData, + SqlSyntax.GetQuotedTableName(TableName), + string.Join(", ", updateItems.ToArray()), + string.Join(" AND ", whereClauses.ToArray())); + } + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Update/IUpdateBuilder.cs b/src/Umbraco.Core/Migrations/Syntax/Update/IUpdateBuilder.cs similarity index 62% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Update/IUpdateBuilder.cs rename to src/Umbraco.Core/Migrations/Syntax/Update/IUpdateBuilder.cs index f1ea46bc7c..01e7c33961 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Update/IUpdateBuilder.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Update/IUpdateBuilder.cs @@ -1,7 +1,7 @@ -namespace Umbraco.Core.Persistence.Migrations.Syntax.Update -{ - public interface IUpdateBuilder : IFluentSyntax - { - IUpdateSetSyntax Table(string tableName); - } -} +namespace Umbraco.Core.Migrations.Syntax.Update +{ + public interface IUpdateBuilder : IFluentSyntax + { + IUpdateSetSyntax Table(string tableName); + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Update/IUpdateSetSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Update/IUpdateSetSyntax.cs similarity index 61% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Update/IUpdateSetSyntax.cs rename to src/Umbraco.Core/Migrations/Syntax/Update/IUpdateSetSyntax.cs index 27e4e7f3d5..1d9f2f05b7 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Update/IUpdateSetSyntax.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Update/IUpdateSetSyntax.cs @@ -1,7 +1,7 @@ -namespace Umbraco.Core.Persistence.Migrations.Syntax.Update -{ - public interface IUpdateSetSyntax - { - IUpdateWhereSyntax Set(object dataAsAnonymousType); - } -} +namespace Umbraco.Core.Migrations.Syntax.Update +{ + public interface IUpdateSetSyntax + { + IUpdateWhereSyntax Set(object dataAsAnonymousType); + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Update/IUpdateWhereSyntax.cs b/src/Umbraco.Core/Migrations/Syntax/Update/IUpdateWhereSyntax.cs similarity index 64% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Update/IUpdateWhereSyntax.cs rename to src/Umbraco.Core/Migrations/Syntax/Update/IUpdateWhereSyntax.cs index cc5fe196e8..a3ca0d814f 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Update/IUpdateWhereSyntax.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Update/IUpdateWhereSyntax.cs @@ -1,8 +1,8 @@ -namespace Umbraco.Core.Persistence.Migrations.Syntax.Update -{ - public interface IUpdateWhereSyntax - { - void Where(object dataAsAnonymousType); - void AllRows(); - } -} +namespace Umbraco.Core.Migrations.Syntax.Update +{ + public interface IUpdateWhereSyntax + { + void Where(object dataAsAnonymousType); + void AllRows(); + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Update/UpdateBuilder.cs b/src/Umbraco.Core/Migrations/Syntax/Update/UpdateBuilder.cs similarity index 78% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Update/UpdateBuilder.cs rename to src/Umbraco.Core/Migrations/Syntax/Update/UpdateBuilder.cs index ba5b4fe9fe..6a8afbd842 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Update/UpdateBuilder.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Update/UpdateBuilder.cs @@ -1,25 +1,24 @@ -using NPoco; -using Umbraco.Core.Persistence.Migrations.Syntax.Update.Expressions; -using Umbraco.Core.Persistence.SqlSyntax; - -namespace Umbraco.Core.Persistence.Migrations.Syntax.Update -{ - public class UpdateBuilder : IUpdateBuilder - { - private readonly IMigrationContext _context; - private readonly DatabaseType[] _supportedDatabaseTypes; - - public UpdateBuilder(IMigrationContext context, params DatabaseType[] supportedDatabaseTypes) - { - _context = context; - _supportedDatabaseTypes = supportedDatabaseTypes; - } - - public IUpdateSetSyntax Table(string tableName) - { - var expression = new UpdateDataExpression(_context, _supportedDatabaseTypes) { TableName = tableName }; - _context.Expressions.Add(expression); - return new UpdateDataBuilder(expression, _context); - } - } -} +using NPoco; +using Umbraco.Core.Migrations.Syntax.Update.Expressions; + +namespace Umbraco.Core.Migrations.Syntax.Update +{ + public class UpdateBuilder : IUpdateBuilder + { + private readonly IMigrationContext _context; + private readonly DatabaseType[] _supportedDatabaseTypes; + + public UpdateBuilder(IMigrationContext context, params DatabaseType[] supportedDatabaseTypes) + { + _context = context; + _supportedDatabaseTypes = supportedDatabaseTypes; + } + + public IUpdateSetSyntax Table(string tableName) + { + var expression = new UpdateDataExpression(_context, _supportedDatabaseTypes) { TableName = tableName }; + _context.Expressions.Add(expression); + return new UpdateDataBuilder(expression, _context); + } + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Update/UpdateDataBuilder.cs b/src/Umbraco.Core/Migrations/Syntax/Update/UpdateDataBuilder.cs similarity index 88% rename from src/Umbraco.Core/Persistence/Migrations/Syntax/Update/UpdateDataBuilder.cs rename to src/Umbraco.Core/Migrations/Syntax/Update/UpdateDataBuilder.cs index 40b4aa7555..c7811acea9 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Update/UpdateDataBuilder.cs +++ b/src/Umbraco.Core/Migrations/Syntax/Update/UpdateDataBuilder.cs @@ -1,47 +1,47 @@ -using System.Collections.Generic; -using System.ComponentModel; -using Umbraco.Core.Persistence.Migrations.Syntax.Update.Expressions; - -namespace Umbraco.Core.Persistence.Migrations.Syntax.Update -{ - public class UpdateDataBuilder : IUpdateSetSyntax, IUpdateWhereSyntax - { - private readonly UpdateDataExpression _expression; - private readonly IMigrationContext _context; - - public UpdateDataBuilder(UpdateDataExpression expression, IMigrationContext context) - { - _context = context; - _expression = expression; - } - - public IUpdateWhereSyntax Set(object dataAsAnonymousType) - { - _expression.Set = GetData(dataAsAnonymousType); - return this; - } - - public void Where(object dataAsAnonymousType) - { - _expression.Where = GetData(dataAsAnonymousType); - } - - public void AllRows() - { - _expression.IsAllRows = true; - } - - private static List> GetData(object dataAsAnonymousType) - { - var data = new List>(); - var properties = TypeDescriptor.GetProperties(dataAsAnonymousType); - - foreach (PropertyDescriptor property in properties) - { - data.Add(new KeyValuePair(property.Name, property.GetValue(dataAsAnonymousType))); - } - - return data; - } - } -} +using System.Collections.Generic; +using System.ComponentModel; +using Umbraco.Core.Migrations.Syntax.Update.Expressions; + +namespace Umbraco.Core.Migrations.Syntax.Update +{ + public class UpdateDataBuilder : IUpdateSetSyntax, IUpdateWhereSyntax + { + private readonly UpdateDataExpression _expression; + private readonly IMigrationContext _context; + + public UpdateDataBuilder(UpdateDataExpression expression, IMigrationContext context) + { + _context = context; + _expression = expression; + } + + public IUpdateWhereSyntax Set(object dataAsAnonymousType) + { + _expression.Set = GetData(dataAsAnonymousType); + return this; + } + + public void Where(object dataAsAnonymousType) + { + _expression.Where = GetData(dataAsAnonymousType); + } + + public void AllRows() + { + _expression.IsAllRows = true; + } + + private static List> GetData(object dataAsAnonymousType) + { + var data = new List>(); + var properties = TypeDescriptor.GetProperties(dataAsAnonymousType); + + foreach (PropertyDescriptor property in properties) + { + data.Add(new KeyValuePair(property.Name, property.GetValue(dataAsAnonymousType))); + } + + return data; + } + } +} diff --git a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionEight/AddContentNuTable.cs b/src/Umbraco.Core/Migrations/Upgrade/TargetVersionEight/AddContentNuTable.cs similarity index 95% rename from src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionEight/AddContentNuTable.cs rename to src/Umbraco.Core/Migrations/Upgrade/TargetVersionEight/AddContentNuTable.cs index 949ba504e9..d75fc70156 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionEight/AddContentNuTable.cs +++ b/src/Umbraco.Core/Migrations/Upgrade/TargetVersionEight/AddContentNuTable.cs @@ -2,7 +2,7 @@ using System.Linq; using Umbraco.Core.Persistence.DatabaseAnnotations; -namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionEight +namespace Umbraco.Core.Migrations.Upgrade.TargetVersionEight { [Migration("8.0.0", 100, Constants.System.UmbracoMigrationName)] class AddContentNuTable : MigrationBase diff --git a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionEight/AddLockObjects.cs b/src/Umbraco.Core/Migrations/Upgrade/TargetVersionEight/AddLockObjects.cs similarity index 90% rename from src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionEight/AddLockObjects.cs rename to src/Umbraco.Core/Migrations/Upgrade/TargetVersionEight/AddLockObjects.cs index 4c9955bb07..fe35519e86 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionEight/AddLockObjects.cs +++ b/src/Umbraco.Core/Migrations/Upgrade/TargetVersionEight/AddLockObjects.cs @@ -1,9 +1,6 @@ -using System; -using System.Linq; -using Umbraco.Core.Configuration; -using Umbraco.Core.Models.Rdbms; +using Umbraco.Core.Models.Rdbms; -namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionEight +namespace Umbraco.Core.Migrations.Upgrade.TargetVersionEight { [Migration("8.0.0", 101, Constants.System.UmbracoMigrationName)] public class AddLockObjects : MigrationBase diff --git a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionEight/AddLockTable.cs b/src/Umbraco.Core/Migrations/Upgrade/TargetVersionEight/AddLockTable.cs similarity index 88% rename from src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionEight/AddLockTable.cs rename to src/Umbraco.Core/Migrations/Upgrade/TargetVersionEight/AddLockTable.cs index 440f07d905..f459de8c66 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionEight/AddLockTable.cs +++ b/src/Umbraco.Core/Migrations/Upgrade/TargetVersionEight/AddLockTable.cs @@ -1,7 +1,6 @@ using System.Linq; -using Umbraco.Core.Configuration; -namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionEight +namespace Umbraco.Core.Migrations.Upgrade.TargetVersionEight { [Migration("8.0.0", 100, Constants.System.UmbracoMigrationName)] public class AddLockTable : MigrationBase diff --git a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionEight/AddRedirectUrlTable.cs b/src/Umbraco.Core/Migrations/Upgrade/TargetVersionEight/AddRedirectUrlTable.cs similarity index 95% rename from src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionEight/AddRedirectUrlTable.cs rename to src/Umbraco.Core/Migrations/Upgrade/TargetVersionEight/AddRedirectUrlTable.cs index 0bd0080606..48b0aeffc2 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionEight/AddRedirectUrlTable.cs +++ b/src/Umbraco.Core/Migrations/Upgrade/TargetVersionEight/AddRedirectUrlTable.cs @@ -1,7 +1,6 @@ using System.Linq; -using Umbraco.Core.Configuration; -namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionEight +namespace Umbraco.Core.Migrations.Upgrade.TargetVersionEight { [Migration("8.0.0", 100, Constants.System.UmbracoMigrationName)] public class AddRedirectUrlTable : MigrationBase diff --git a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionEight/RefactorXmlColumns.cs b/src/Umbraco.Core/Migrations/Upgrade/TargetVersionEight/RefactorXmlColumns.cs similarity index 97% rename from src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionEight/RefactorXmlColumns.cs rename to src/Umbraco.Core/Migrations/Upgrade/TargetVersionEight/RefactorXmlColumns.cs index a460ab500d..1226c0c344 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionEight/RefactorXmlColumns.cs +++ b/src/Umbraco.Core/Migrations/Upgrade/TargetVersionEight/RefactorXmlColumns.cs @@ -1,9 +1,9 @@ using System.Collections.Generic; using System.Linq; -using Umbraco.Core.Configuration; using Umbraco.Core.Logging; +using Umbraco.Core.Persistence; -namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionEight +namespace Umbraco.Core.Migrations.Upgrade.TargetVersionEight { [Migration("8.0.0", 100, Constants.System.UmbracoMigrationName)] public class RefactorXmlColumns : MigrationBase diff --git a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionEight/Seven1.cs b/src/Umbraco.Core/Migrations/Upgrade/TargetVersionEight/Seven1.cs similarity index 81% rename from src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionEight/Seven1.cs rename to src/Umbraco.Core/Migrations/Upgrade/TargetVersionEight/Seven1.cs index 99c466715e..e2764114a9 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionEight/Seven1.cs +++ b/src/Umbraco.Core/Migrations/Upgrade/TargetVersionEight/Seven1.cs @@ -1,9 +1,9 @@ -using Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenFiveFive; -using Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenFiveZero; -using Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenSevenZero; -using Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenSixZero; +using Umbraco.Core.Migrations.Upgrade.TargetVersionSevenFiveFive; +using Umbraco.Core.Migrations.Upgrade.TargetVersionSevenFiveZero; +using Umbraco.Core.Migrations.Upgrade.TargetVersionSevenSevenZero; +using Umbraco.Core.Migrations.Upgrade.TargetVersionSevenSixZero; -namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionEight +namespace Umbraco.Core.Migrations.Upgrade.TargetVersionEight { // catch-up with 7 migrations // fixme - this is temp and should be removed! diff --git a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionEight/VariantsMigration.cs b/src/Umbraco.Core/Migrations/Upgrade/TargetVersionEight/VariantsMigration.cs similarity index 98% rename from src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionEight/VariantsMigration.cs rename to src/Umbraco.Core/Migrations/Upgrade/TargetVersionEight/VariantsMigration.cs index b48ab249dd..74c1c99dc6 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionEight/VariantsMigration.cs +++ b/src/Umbraco.Core/Migrations/Upgrade/TargetVersionEight/VariantsMigration.cs @@ -2,12 +2,13 @@ using System.Collections.Generic; using System.Diagnostics; using System.Linq; +using Umbraco.Core.Migrations.Install; +using Umbraco.Core.Migrations.Syntax.Execute; using Umbraco.Core.Models.Rdbms; +using Umbraco.Core.Persistence; using Umbraco.Core.Persistence.DatabaseModelDefinitions; -using Umbraco.Core.Persistence.Migrations.Initial; -using Umbraco.Core.Persistence.Migrations.Syntax.Execute; -namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionEight +namespace Umbraco.Core.Migrations.Upgrade.TargetVersionEight { [Migration("8.0.0", 1000, Constants.System.UmbracoMigrationName)] public class VariantsMigration : MigrationBase @@ -57,7 +58,7 @@ HAVING COUNT(v2.id) <> 1").Any()) // re-create *all* keys and indexes //Create.KeysAndIndexes(); - foreach (var x in DatabaseSchemaCreation.OrderedTables) + foreach (var x in DatabaseSchemaCreator.OrderedTables) Create.KeysAndIndexes(x.Value); } diff --git a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenFiveFive/AddLockObjects.cs b/src/Umbraco.Core/Migrations/Upgrade/TargetVersionSevenFiveFive/AddLockObjects.cs similarity index 87% rename from src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenFiveFive/AddLockObjects.cs rename to src/Umbraco.Core/Migrations/Upgrade/TargetVersionSevenFiveFive/AddLockObjects.cs index cded8d5fc4..b2a02cfa1e 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenFiveFive/AddLockObjects.cs +++ b/src/Umbraco.Core/Migrations/Upgrade/TargetVersionSevenFiveFive/AddLockObjects.cs @@ -1,7 +1,6 @@ -using Umbraco.Core.Configuration; -using Umbraco.Core.Models.Rdbms; +using Umbraco.Core.Models.Rdbms; -namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenFiveFive +namespace Umbraco.Core.Migrations.Upgrade.TargetVersionSevenFiveFive { [Migration("7.5.5", 101, Constants.System.UmbracoMigrationName)] public class AddLockObjects : MigrationBase diff --git a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenFiveFive/AddLockTable.cs b/src/Umbraco.Core/Migrations/Upgrade/TargetVersionSevenFiveFive/AddLockTable.cs similarity index 87% rename from src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenFiveFive/AddLockTable.cs rename to src/Umbraco.Core/Migrations/Upgrade/TargetVersionSevenFiveFive/AddLockTable.cs index 17f7ee9df4..092ded50d0 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenFiveFive/AddLockTable.cs +++ b/src/Umbraco.Core/Migrations/Upgrade/TargetVersionSevenFiveFive/AddLockTable.cs @@ -1,7 +1,6 @@ using System.Linq; -using Umbraco.Core.Configuration; -namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenFiveFive +namespace Umbraco.Core.Migrations.Upgrade.TargetVersionSevenFiveFive { [Migration("7.5.5", 100, Constants.System.UmbracoMigrationName)] public class AddLockTable : MigrationBase diff --git a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenFiveFive/UpdateAllowedMediaTypesAtRoot.cs b/src/Umbraco.Core/Migrations/Upgrade/TargetVersionSevenFiveFive/UpdateAllowedMediaTypesAtRoot.cs similarity index 74% rename from src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenFiveFive/UpdateAllowedMediaTypesAtRoot.cs rename to src/Umbraco.Core/Migrations/Upgrade/TargetVersionSevenFiveFive/UpdateAllowedMediaTypesAtRoot.cs index 8f2c1586eb..15d5709662 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenFiveFive/UpdateAllowedMediaTypesAtRoot.cs +++ b/src/Umbraco.Core/Migrations/Upgrade/TargetVersionSevenFiveFive/UpdateAllowedMediaTypesAtRoot.cs @@ -1,8 +1,4 @@ -using Umbraco.Core.Configuration; -using Umbraco.Core.Logging; -using Umbraco.Core.Persistence.SqlSyntax; - -namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenFiveFive +namespace Umbraco.Core.Migrations.Upgrade.TargetVersionSevenFiveFive { /// /// See: http://issues.umbraco.org/issue/U4-4196 diff --git a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenFiveZero/RemoveStylesheetDataAndTablesAgain.cs b/src/Umbraco.Core/Migrations/Upgrade/TargetVersionSevenFiveZero/RemoveStylesheetDataAndTablesAgain.cs similarity index 88% rename from src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenFiveZero/RemoveStylesheetDataAndTablesAgain.cs rename to src/Umbraco.Core/Migrations/Upgrade/TargetVersionSevenFiveZero/RemoveStylesheetDataAndTablesAgain.cs index e6a5e7886d..dfffb2cd34 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenFiveZero/RemoveStylesheetDataAndTablesAgain.cs +++ b/src/Umbraco.Core/Migrations/Upgrade/TargetVersionSevenFiveZero/RemoveStylesheetDataAndTablesAgain.cs @@ -1,10 +1,6 @@ -using System; -using System.Linq; -using Umbraco.Core.Configuration; -using Umbraco.Core.Logging; -using Umbraco.Core.Persistence.SqlSyntax; +using System.Linq; -namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenFiveZero +namespace Umbraco.Core.Migrations.Upgrade.TargetVersionSevenFiveZero { /// /// This is here to re-remove these tables, we dropped them in 7.3 but new installs created them again so we're going to re-drop them diff --git a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenFiveZero/UpdateUniqueIndexOnPropertyData.cs b/src/Umbraco.Core/Migrations/Upgrade/TargetVersionSevenFiveZero/UpdateUniqueIndexOnPropertyData.cs similarity index 90% rename from src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenFiveZero/UpdateUniqueIndexOnPropertyData.cs rename to src/Umbraco.Core/Migrations/Upgrade/TargetVersionSevenFiveZero/UpdateUniqueIndexOnPropertyData.cs index 2a5b130ec9..ae47a66f13 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenFiveZero/UpdateUniqueIndexOnPropertyData.cs +++ b/src/Umbraco.Core/Migrations/Upgrade/TargetVersionSevenFiveZero/UpdateUniqueIndexOnPropertyData.cs @@ -1,13 +1,8 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.Linq; -using Umbraco.Core.Configuration; -using Umbraco.Core.Logging; -using Umbraco.Core.Models.Rdbms; +using System.Linq; +using Umbraco.Core.Persistence; using Umbraco.Core.Persistence.SqlSyntax; -namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenFiveZero +namespace Umbraco.Core.Migrations.Upgrade.TargetVersionSevenFiveZero { /// /// See: http://issues.umbraco.org/issue/U4-8522 diff --git a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenSevenZero/AddIndexToDictionaryKeyColumn.cs b/src/Umbraco.Core/Migrations/Upgrade/TargetVersionSevenSevenZero/AddIndexToDictionaryKeyColumn.cs similarity index 95% rename from src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenSevenZero/AddIndexToDictionaryKeyColumn.cs rename to src/Umbraco.Core/Migrations/Upgrade/TargetVersionSevenSevenZero/AddIndexToDictionaryKeyColumn.cs index 60c8025a21..ff3133e335 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenSevenZero/AddIndexToDictionaryKeyColumn.cs +++ b/src/Umbraco.Core/Migrations/Upgrade/TargetVersionSevenSevenZero/AddIndexToDictionaryKeyColumn.cs @@ -1,7 +1,7 @@ using System.Linq; using Umbraco.Core.Persistence.SqlSyntax; -namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenSevenZero +namespace Umbraco.Core.Migrations.Upgrade.TargetVersionSevenSevenZero { [Migration("7.7.0", 5, Constants.System.UmbracoMigrationName)] public class AddIndexToDictionaryKeyColumn : MigrationBase diff --git a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenSevenZero/AddUserGroupTables.cs b/src/Umbraco.Core/Migrations/Upgrade/TargetVersionSevenSevenZero/AddUserGroupTables.cs similarity index 99% rename from src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenSevenZero/AddUserGroupTables.cs rename to src/Umbraco.Core/Migrations/Upgrade/TargetVersionSevenSevenZero/AddUserGroupTables.cs index 7734f8e191..1390fe8df2 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenSevenZero/AddUserGroupTables.cs +++ b/src/Umbraco.Core/Migrations/Upgrade/TargetVersionSevenSevenZero/AddUserGroupTables.cs @@ -5,7 +5,7 @@ using System.Linq; using Umbraco.Core.Models.Rdbms; using Umbraco.Core.Persistence.SqlSyntax; -namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenSevenZero +namespace Umbraco.Core.Migrations.Upgrade.TargetVersionSevenSevenZero { [Migration("7.7.0", 5, Constants.System.UmbracoMigrationName)] public class AddUserGroupTables : MigrationBase diff --git a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenSevenZero/AddUserStartNodeTable.cs b/src/Umbraco.Core/Migrations/Upgrade/TargetVersionSevenSevenZero/AddUserStartNodeTable.cs similarity index 94% rename from src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenSevenZero/AddUserStartNodeTable.cs rename to src/Umbraco.Core/Migrations/Upgrade/TargetVersionSevenSevenZero/AddUserStartNodeTable.cs index 90f5c9d96d..12179964bb 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenSevenZero/AddUserStartNodeTable.cs +++ b/src/Umbraco.Core/Migrations/Upgrade/TargetVersionSevenSevenZero/AddUserStartNodeTable.cs @@ -1,7 +1,7 @@ using System.Linq; using Umbraco.Core.Models.Rdbms; -namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenSevenZero +namespace Umbraco.Core.Migrations.Upgrade.TargetVersionSevenSevenZero { [Migration("7.7.0", 5, Constants.System.UmbracoMigrationName)] public class AddUserStartNodeTable : MigrationBase diff --git a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenSevenZero/EnsureContentTemplatePermissions.cs b/src/Umbraco.Core/Migrations/Upgrade/TargetVersionSevenSevenZero/EnsureContentTemplatePermissions.cs similarity index 93% rename from src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenSevenZero/EnsureContentTemplatePermissions.cs rename to src/Umbraco.Core/Migrations/Upgrade/TargetVersionSevenSevenZero/EnsureContentTemplatePermissions.cs index 9e3d723942..0463273285 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenSevenZero/EnsureContentTemplatePermissions.cs +++ b/src/Umbraco.Core/Migrations/Upgrade/TargetVersionSevenSevenZero/EnsureContentTemplatePermissions.cs @@ -1,7 +1,8 @@ using System.Linq; using Umbraco.Core.Models.Rdbms; +using Umbraco.Core.Persistence; -namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenSevenZero +namespace Umbraco.Core.Migrations.Upgrade.TargetVersionSevenSevenZero { /// /// Ensures the built-in user groups have the blueprint permission by default on upgrade diff --git a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenSevenZero/ReduceDictionaryKeyColumnsSize.cs b/src/Umbraco.Core/Migrations/Upgrade/TargetVersionSevenSevenZero/ReduceDictionaryKeyColumnsSize.cs similarity index 95% rename from src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenSevenZero/ReduceDictionaryKeyColumnsSize.cs rename to src/Umbraco.Core/Migrations/Upgrade/TargetVersionSevenSevenZero/ReduceDictionaryKeyColumnsSize.cs index c470c1d46e..3703dd973c 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenSevenZero/ReduceDictionaryKeyColumnsSize.cs +++ b/src/Umbraco.Core/Migrations/Upgrade/TargetVersionSevenSevenZero/ReduceDictionaryKeyColumnsSize.cs @@ -1,7 +1,7 @@ using System.Linq; using Umbraco.Core.Persistence.SqlSyntax; -namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenSevenZero +namespace Umbraco.Core.Migrations.Upgrade.TargetVersionSevenSevenZero { [Migration("7.7.0", 5, Constants.System.UmbracoMigrationName)] public class ReduceDictionaryKeyColumnsSize : MigrationBase diff --git a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenSevenZero/UpdateUserTables.cs b/src/Umbraco.Core/Migrations/Upgrade/TargetVersionSevenSevenZero/UpdateUserTables.cs similarity index 96% rename from src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenSevenZero/UpdateUserTables.cs rename to src/Umbraco.Core/Migrations/Upgrade/TargetVersionSevenSevenZero/UpdateUserTables.cs index c629266b3a..50edf676ae 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenSevenZero/UpdateUserTables.cs +++ b/src/Umbraco.Core/Migrations/Upgrade/TargetVersionSevenSevenZero/UpdateUserTables.cs @@ -4,7 +4,7 @@ using Newtonsoft.Json; using Umbraco.Core.Persistence.DatabaseModelDefinitions; using Umbraco.Core.Security; -namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenSevenZero +namespace Umbraco.Core.Migrations.Upgrade.TargetVersionSevenSevenZero { [Migration("7.7.0", 5, Constants.System.UmbracoMigrationName)] public class UpdateUserTables : MigrationBase diff --git a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenSixZero/AddIndexToCmsMemberLoginName.cs b/src/Umbraco.Core/Migrations/Upgrade/TargetVersionSevenSixZero/AddIndexToCmsMemberLoginName.cs similarity index 94% rename from src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenSixZero/AddIndexToCmsMemberLoginName.cs rename to src/Umbraco.Core/Migrations/Upgrade/TargetVersionSevenSixZero/AddIndexToCmsMemberLoginName.cs index b1231e1375..da4eddb809 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenSixZero/AddIndexToCmsMemberLoginName.cs +++ b/src/Umbraco.Core/Migrations/Upgrade/TargetVersionSevenSixZero/AddIndexToCmsMemberLoginName.cs @@ -1,8 +1,7 @@ using System.Linq; -using Umbraco.Core.Logging; using Umbraco.Core.Persistence.SqlSyntax; -namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenSixZero +namespace Umbraco.Core.Migrations.Upgrade.TargetVersionSevenSixZero { [Migration("7.6.0", 3, Constants.System.UmbracoMigrationName)] public class AddIndexToCmsMemberLoginName : MigrationBase diff --git a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenSixZero/AddIndexToUmbracoNodePath.cs b/src/Umbraco.Core/Migrations/Upgrade/TargetVersionSevenSixZero/AddIndexToUmbracoNodePath.cs similarity index 89% rename from src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenSixZero/AddIndexToUmbracoNodePath.cs rename to src/Umbraco.Core/Migrations/Upgrade/TargetVersionSevenSixZero/AddIndexToUmbracoNodePath.cs index 351e77f871..7d52d9292d 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenSixZero/AddIndexToUmbracoNodePath.cs +++ b/src/Umbraco.Core/Migrations/Upgrade/TargetVersionSevenSixZero/AddIndexToUmbracoNodePath.cs @@ -1,8 +1,7 @@ using System.Linq; -using Umbraco.Core.Logging; using Umbraco.Core.Persistence.SqlSyntax; -namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenSixZero +namespace Umbraco.Core.Migrations.Upgrade.TargetVersionSevenSixZero { [Migration("7.6.0", 0, Constants.System.UmbracoMigrationName)] public class AddIndexToUmbracoNodePath : MigrationBase diff --git a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenSixZero/AddIndexToUser2NodePermission.cs b/src/Umbraco.Core/Migrations/Upgrade/TargetVersionSevenSixZero/AddIndexToUser2NodePermission.cs similarity index 90% rename from src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenSixZero/AddIndexToUser2NodePermission.cs rename to src/Umbraco.Core/Migrations/Upgrade/TargetVersionSevenSixZero/AddIndexToUser2NodePermission.cs index 9a8d90212b..b858484586 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenSixZero/AddIndexToUser2NodePermission.cs +++ b/src/Umbraco.Core/Migrations/Upgrade/TargetVersionSevenSixZero/AddIndexToUser2NodePermission.cs @@ -1,8 +1,7 @@ using System.Linq; -using Umbraco.Core.Logging; using Umbraco.Core.Persistence.SqlSyntax; -namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenSixZero +namespace Umbraco.Core.Migrations.Upgrade.TargetVersionSevenSixZero { [Migration("7.6.0", 0, Constants.System.UmbracoMigrationName)] public class AddIndexToUser2NodePermission : MigrationBase diff --git a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenSixZero/AddIndexesToUmbracoRelationTables.cs b/src/Umbraco.Core/Migrations/Upgrade/TargetVersionSevenSixZero/AddIndexesToUmbracoRelationTables.cs similarity index 97% rename from src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenSixZero/AddIndexesToUmbracoRelationTables.cs rename to src/Umbraco.Core/Migrations/Upgrade/TargetVersionSevenSixZero/AddIndexesToUmbracoRelationTables.cs index f6e453ae52..39be1855b9 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenSixZero/AddIndexesToUmbracoRelationTables.cs +++ b/src/Umbraco.Core/Migrations/Upgrade/TargetVersionSevenSixZero/AddIndexesToUmbracoRelationTables.cs @@ -1,9 +1,8 @@ using System; using System.Linq; -using Umbraco.Core.Logging; using Umbraco.Core.Persistence.SqlSyntax; -namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenSixZero +namespace Umbraco.Core.Migrations.Upgrade.TargetVersionSevenSixZero { [Migration("7.6.0", 0, Constants.System.UmbracoMigrationName)] public class AddIndexesToUmbracoRelationTables : MigrationBase diff --git a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenSixZero/AddLockObjects.cs b/src/Umbraco.Core/Migrations/Upgrade/TargetVersionSevenSixZero/AddLockObjects.cs similarity index 85% rename from src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenSixZero/AddLockObjects.cs rename to src/Umbraco.Core/Migrations/Upgrade/TargetVersionSevenSixZero/AddLockObjects.cs index 3b45230f59..f3b5a3f973 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenSixZero/AddLockObjects.cs +++ b/src/Umbraco.Core/Migrations/Upgrade/TargetVersionSevenSixZero/AddLockObjects.cs @@ -1,8 +1,6 @@ -using Umbraco.Core.Logging; -using Umbraco.Core.Models.Rdbms; -using Umbraco.Core.Persistence.SqlSyntax; +using Umbraco.Core.Models.Rdbms; -namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenSixZero +namespace Umbraco.Core.Migrations.Upgrade.TargetVersionSevenSixZero { [Migration("7.6.0", 101, Constants.System.UmbracoMigrationName)] public class AddLockObjects : MigrationBase diff --git a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenSixZero/AddLockTable.cs b/src/Umbraco.Core/Migrations/Upgrade/TargetVersionSevenSixZero/AddLockTable.cs similarity index 84% rename from src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenSixZero/AddLockTable.cs rename to src/Umbraco.Core/Migrations/Upgrade/TargetVersionSevenSixZero/AddLockTable.cs index a709378183..16b8cc8516 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenSixZero/AddLockTable.cs +++ b/src/Umbraco.Core/Migrations/Upgrade/TargetVersionSevenSixZero/AddLockTable.cs @@ -1,8 +1,6 @@ using System.Linq; -using Umbraco.Core.Logging; -using Umbraco.Core.Persistence.SqlSyntax; -namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenSixZero +namespace Umbraco.Core.Migrations.Upgrade.TargetVersionSevenSixZero { [Migration("7.6.0", 100, Constants.System.UmbracoMigrationName)] public class AddLockTable : MigrationBase diff --git a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenSixZero/AddMacroUniqueIdColumn.cs b/src/Umbraco.Core/Migrations/Upgrade/TargetVersionSevenSixZero/AddMacroUniqueIdColumn.cs similarity index 95% rename from src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenSixZero/AddMacroUniqueIdColumn.cs rename to src/Umbraco.Core/Migrations/Upgrade/TargetVersionSevenSixZero/AddMacroUniqueIdColumn.cs index 896c083e4b..bcf62c6974 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenSixZero/AddMacroUniqueIdColumn.cs +++ b/src/Umbraco.Core/Migrations/Upgrade/TargetVersionSevenSixZero/AddMacroUniqueIdColumn.cs @@ -1,9 +1,7 @@ using System; using System.Linq; -using Umbraco.Core.Logging; -using Umbraco.Core.Persistence.SqlSyntax; -namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenSixZero +namespace Umbraco.Core.Migrations.Upgrade.TargetVersionSevenSixZero { [Migration("7.6.0", 0, Constants.System.UmbracoMigrationName)] public class AddMacroUniqueIdColumn : MigrationBase diff --git a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenSixZero/AddRelationTypeUniqueIdColumn.cs b/src/Umbraco.Core/Migrations/Upgrade/TargetVersionSevenSixZero/AddRelationTypeUniqueIdColumn.cs similarity index 92% rename from src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenSixZero/AddRelationTypeUniqueIdColumn.cs rename to src/Umbraco.Core/Migrations/Upgrade/TargetVersionSevenSixZero/AddRelationTypeUniqueIdColumn.cs index d877ea8ba3..42a3b5e99e 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenSixZero/AddRelationTypeUniqueIdColumn.cs +++ b/src/Umbraco.Core/Migrations/Upgrade/TargetVersionSevenSixZero/AddRelationTypeUniqueIdColumn.cs @@ -1,9 +1,7 @@ using System; using System.Linq; -using Umbraco.Core.Logging; -using Umbraco.Core.Persistence.SqlSyntax; -namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenSixZero +namespace Umbraco.Core.Migrations.Upgrade.TargetVersionSevenSixZero { [Migration("7.6.0", 0, Constants.System.UmbracoMigrationName)] public class AddRelationTypeUniqueIdColumn : MigrationBase diff --git a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenSixZero/NormalizeTemplateGuids.cs b/src/Umbraco.Core/Migrations/Upgrade/TargetVersionSevenSixZero/NormalizeTemplateGuids.cs similarity index 96% rename from src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenSixZero/NormalizeTemplateGuids.cs rename to src/Umbraco.Core/Migrations/Upgrade/TargetVersionSevenSixZero/NormalizeTemplateGuids.cs index 9c6b6179fa..0bdfe8dcb4 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenSixZero/NormalizeTemplateGuids.cs +++ b/src/Umbraco.Core/Migrations/Upgrade/TargetVersionSevenSixZero/NormalizeTemplateGuids.cs @@ -2,7 +2,7 @@ using System.Linq; using Umbraco.Core.Exceptions; -namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenSixZero +namespace Umbraco.Core.Migrations.Upgrade.TargetVersionSevenSixZero { [Migration("7.6.0", 0, Constants.System.UmbracoMigrationName)] public class NormalizeTemplateGuids : MigrationBase diff --git a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenSixZero/ReduceLoginNameColumnsSize.cs b/src/Umbraco.Core/Migrations/Upgrade/TargetVersionSevenSixZero/ReduceLoginNameColumnsSize.cs similarity index 93% rename from src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenSixZero/ReduceLoginNameColumnsSize.cs rename to src/Umbraco.Core/Migrations/Upgrade/TargetVersionSevenSixZero/ReduceLoginNameColumnsSize.cs index b18287c529..407c04d9e8 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenSixZero/ReduceLoginNameColumnsSize.cs +++ b/src/Umbraco.Core/Migrations/Upgrade/TargetVersionSevenSixZero/ReduceLoginNameColumnsSize.cs @@ -1,9 +1,7 @@ using System.Linq; -using Umbraco.Core.Exceptions; -using Umbraco.Core.Logging; using Umbraco.Core.Persistence.SqlSyntax; -namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenSixZero +namespace Umbraco.Core.Migrations.Upgrade.TargetVersionSevenSixZero { [Migration("7.6.0", 2, Constants.System.UmbracoMigrationName)] public class ReduceLoginNameColumnsSize : MigrationBase diff --git a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenSixZero/RemovePropertyDataIdIndex.cs b/src/Umbraco.Core/Migrations/Upgrade/TargetVersionSevenSixZero/RemovePropertyDataIdIndex.cs similarity index 84% rename from src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenSixZero/RemovePropertyDataIdIndex.cs rename to src/Umbraco.Core/Migrations/Upgrade/TargetVersionSevenSixZero/RemovePropertyDataIdIndex.cs index 7e1b297895..a84a0a30be 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenSixZero/RemovePropertyDataIdIndex.cs +++ b/src/Umbraco.Core/Migrations/Upgrade/TargetVersionSevenSixZero/RemovePropertyDataIdIndex.cs @@ -1,9 +1,6 @@ using System.Linq; -using Umbraco.Core.Configuration; -using Umbraco.Core.Logging; -using Umbraco.Core.Persistence.SqlSyntax; -namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenSixZero +namespace Umbraco.Core.Migrations.Upgrade.TargetVersionSevenSixZero { /// /// See: http://issues.umbraco.org/issue/U4-9188 diff --git a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenSixZero/RemoveUmbracoDeployTables.cs b/src/Umbraco.Core/Migrations/Upgrade/TargetVersionSevenSixZero/RemoveUmbracoDeployTables.cs similarity index 89% rename from src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenSixZero/RemoveUmbracoDeployTables.cs rename to src/Umbraco.Core/Migrations/Upgrade/TargetVersionSevenSixZero/RemoveUmbracoDeployTables.cs index f0a6267de3..bc8d84dc8a 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenSixZero/RemoveUmbracoDeployTables.cs +++ b/src/Umbraco.Core/Migrations/Upgrade/TargetVersionSevenSixZero/RemoveUmbracoDeployTables.cs @@ -1,9 +1,7 @@ using System; using System.Linq; -using Umbraco.Core.Logging; -using Umbraco.Core.Persistence.SqlSyntax; -namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenSixZero +namespace Umbraco.Core.Migrations.Upgrade.TargetVersionSevenSixZero { [Migration("7.6.0", 0, Constants.System.UmbracoMigrationName)] public class RemoveUmbracoDeployTables : MigrationBase diff --git a/src/Umbraco.Core/Persistence/DatabaseSchemaHelper.cs b/src/Umbraco.Core/Persistence/DatabaseSchemaHelper.cs deleted file mode 100644 index 80ffb82cc9..0000000000 --- a/src/Umbraco.Core/Persistence/DatabaseSchemaHelper.cs +++ /dev/null @@ -1,188 +0,0 @@ -using System; -using System.Linq; -using NPoco; -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; -using Umbraco.Core.Services; - -namespace Umbraco.Core.Persistence -{ - public class DatabaseSchemaHelper - { - private readonly IUmbracoDatabase _database; - private readonly ILogger _logger; - private readonly BaseDataCreation _baseDataCreation; - - public DatabaseSchemaHelper(IUmbracoDatabase database, ILogger logger) - { - _database = database; - _logger = logger; - _baseDataCreation = new BaseDataCreation(database, logger); - } - - private ISqlSyntaxProvider SqlSyntax => _database.SqlContext.SqlSyntax; - - public bool TableExist(string tableName) - { - return SqlSyntax.DoesTableExist(_database, tableName); - } - - internal void UninstallDatabaseSchema() - { - // fixme - // weird to create a DatabaseSchemaCreation here, since it creates - // a circular dependency with DatabaseSchemaHelper? - var creation = new DatabaseSchemaCreation(_database, _logger); - creation.UninstallDatabaseSchema(); - } - - /// - /// Creates the Umbraco db schema in the Database of the current Database. - /// Safe method that is only able to create the schema in non-configured - /// umbraco instances. - /// - public void CreateDatabaseSchema(IRuntimeState runtime, IMigrationEntryService migrationEntryService) - { - CreateDatabaseSchema(runtime, migrationEntryService, true); - } - - /// - /// Creates the Umbraco db schema in the Database of the current Database - /// with the option to guard the db from having the schema created - /// multiple times. - /// - /// - /// - /// - public void CreateDatabaseSchema(IRuntimeState runtime, IMigrationEntryService migrationEntryService, bool guardConfiguration) - { - if (guardConfiguration && runtime.Level == RuntimeLevel.Run) - throw new Exception("Umbraco is already configured!"); - - CreateDatabaseSchemaDo(migrationEntryService); - } - - internal void CreateDatabaseSchemaDo(IMigrationEntryService migrationEntryService) - { - _logger.Info("Initializing database schema creation"); - - // fixme - // weird to create a DatabaseSchemaCreation here, since it creates - // a circular dependency with DatabaseSchemaHelper? - var creation = new DatabaseSchemaCreation(_database, _logger); - creation.InitializeDatabaseSchema(); - - _logger.Info("Finalized database schema creation"); - } - - public void CreateTable(bool overwrite) - where T : new() - { - var tableType = typeof (T); - CreateTable(overwrite, tableType); - } - - public void CreateTable() - where T : new() - { - var tableType = typeof (T); - CreateTable(false, tableType); - } - - public void CreateTable(bool overwrite, Type modelType) - { - var tableDefinition = DefinitionFactory.GetTableDefinition(modelType, SqlSyntax); - var tableName = tableDefinition.Name; - - var createSql = SqlSyntax.Format(tableDefinition); - var createPrimaryKeySql = SqlSyntax.FormatPrimaryKey(tableDefinition); - var foreignSql = SqlSyntax.Format(tableDefinition.ForeignKeys); - var indexSql = SqlSyntax.Format(tableDefinition.Indexes); - - var tableExist = TableExist(tableName); - if (overwrite && tableExist) - { - DropTable(tableName); - tableExist = false; - } - - if (tableExist == false) - { - using (var transaction = _database.GetTransaction()) - { - //Execute the Create Table sql - var created = _database.Execute(new Sql(createSql)); - _logger.Info($"Create Table sql {created}:\n {createSql}"); - - //If any statements exists for the primary key execute them here - if (string.IsNullOrEmpty(createPrimaryKeySql) == false) - { - var createdPk = _database.Execute(new Sql(createPrimaryKeySql)); - _logger.Info($"Primary Key sql {createdPk}:\n {createPrimaryKeySql}"); - } - - //Turn on identity insert if db provider is not mysql - if (SqlSyntax.SupportsIdentityInsert() && tableDefinition.Columns.Any(x => x.IsIdentity)) - _database.Execute(new Sql($"SET IDENTITY_INSERT {SqlSyntax.GetQuotedTableName(tableName)} ON ")); - - //Call the NewTable-event to trigger the insert of base/default data - //OnNewTable(tableName, _db, e, _logger); - - _baseDataCreation.InitializeBaseData(tableName); - - //Turn off identity insert if db provider is not mysql - if (SqlSyntax.SupportsIdentityInsert() && tableDefinition.Columns.Any(x => x.IsIdentity)) - _database.Execute(new Sql($"SET IDENTITY_INSERT {SqlSyntax.GetQuotedTableName(tableName)} OFF;")); - - //Special case for MySql - if (SqlSyntax is MySqlSyntaxProvider && tableName.Equals("umbracoUser")) - { - _database.Update("SET id = @IdAfter WHERE id = @IdBefore AND userLogin = @Login", new { IdAfter = 0, IdBefore = 1, Login = "admin" }); - } - - //Loop through index statements and execute sql - foreach (var sql in indexSql) - { - var createdIndex = _database.Execute(new Sql(sql)); - _logger.Info($"Create Index sql {createdIndex}:\n {sql}"); - } - - //Loop through foreignkey statements and execute sql - foreach (var sql in foreignSql) - { - var createdFk = _database.Execute(new Sql(sql)); - _logger.Info($"Create Foreign Key sql {createdFk}:\n {sql}"); - } - - transaction.Complete(); - } - } - - _logger.Info($"New table '{tableName}' was created"); - } - - public void DropTable() - where T : new() - { - var type = typeof(T); - var tableNameAttribute = type.FirstAttribute(); - if (tableNameAttribute == null) - throw new Exception($"The Type '{type.Name}' does not contain a TableNameAttribute, which is used" - + " to find the name of the table to drop. The operation could not be completed."); - - var tableName = tableNameAttribute.Value; - DropTable(tableName); - } - - public void DropTable(string tableName) - { - var sql = new Sql(string.Format( - SqlSyntax.DropTable, - SqlSyntax.GetQuotedTableName(tableName))); - _database.Execute(sql); - } - } -} diff --git a/src/Umbraco.Core/Persistence/Migrations/ILocalMigration.cs b/src/Umbraco.Core/Persistence/Migrations/ILocalMigration.cs deleted file mode 100644 index f06368e59f..0000000000 --- a/src/Umbraco.Core/Persistence/Migrations/ILocalMigration.cs +++ /dev/null @@ -1,18 +0,0 @@ -using Umbraco.Core.Persistence.Migrations.Syntax.Alter; -using Umbraco.Core.Persistence.Migrations.Syntax.Create; -using Umbraco.Core.Persistence.Migrations.Syntax.Delete; -using Umbraco.Core.Persistence.Migrations.Syntax.Execute; -using Umbraco.Core.Persistence.Migrations.Syntax.Update; - -namespace Umbraco.Core.Persistence.Migrations -{ - public interface ILocalMigration - { - IExecuteBuilder Execute { get; } - IDeleteBuilder Delete { get; } - IUpdateBuilder Update { get; } - IAlterSyntaxBuilder Alter { get; } - ICreateBuilder Create { get; } - string GetSql(); - } -} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/IFluentSyntax.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/IFluentSyntax.cs deleted file mode 100644 index 313606dbea..0000000000 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/IFluentSyntax.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace Umbraco.Core.Persistence.Migrations.Syntax -{ - public interface IFluentSyntax - { - - } -} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/IfDatabase/IIfDatabaseBuilder.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/IfDatabase/IIfDatabaseBuilder.cs deleted file mode 100644 index f685f17b53..0000000000 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/IfDatabase/IIfDatabaseBuilder.cs +++ /dev/null @@ -1,17 +0,0 @@ -using Umbraco.Core.Persistence.Migrations.Syntax.Create; -using Umbraco.Core.Persistence.Migrations.Syntax.Delete; -using Umbraco.Core.Persistence.Migrations.Syntax.Execute; -using Umbraco.Core.Persistence.Migrations.Syntax.Rename; -using Umbraco.Core.Persistence.Migrations.Syntax.Update; - -namespace Umbraco.Core.Persistence.Migrations.Syntax.IfDatabase -{ - public interface IIfDatabaseBuilder : IFluentSyntax - { - ICreateBuilder Create { get; } - IExecuteBuilder Execute { get; } - IDeleteBuilder Delete { get; } - IRenameBuilder Rename { get; } - IUpdateBuilder Update { get; } - } -} diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Rename/IRenameBuilder.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Rename/IRenameBuilder.cs deleted file mode 100644 index fb721909af..0000000000 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Rename/IRenameBuilder.cs +++ /dev/null @@ -1,11 +0,0 @@ -using Umbraco.Core.Persistence.Migrations.Syntax.Rename.Column; -using Umbraco.Core.Persistence.Migrations.Syntax.Rename.Table; - -namespace Umbraco.Core.Persistence.Migrations.Syntax.Rename -{ - public interface IRenameBuilder : IFluentSyntax - { - IRenameTableSyntax Table(string oldName); - IRenameColumnTableSyntax Column(string oldName); - } -} diff --git a/src/Umbraco.Core/Persistence/UmbracoDatabaseFactory.cs b/src/Umbraco.Core/Persistence/UmbracoDatabaseFactory.cs index d95b590be8..d038934fed 100644 --- a/src/Umbraco.Core/Persistence/UmbracoDatabaseFactory.cs +++ b/src/Umbraco.Core/Persistence/UmbracoDatabaseFactory.cs @@ -8,6 +8,7 @@ using NPoco; using NPoco.FluentMappings; using Umbraco.Core.Exceptions; using Umbraco.Core.Logging; +using Umbraco.Core.Migrations.Install; using Umbraco.Core.Persistence.FaultHandling; using Umbraco.Core.Persistence.Mappers; using Umbraco.Core.Persistence.SqlSyntax; diff --git a/src/Umbraco.Core/Umbraco.Core.csproj b/src/Umbraco.Core/Umbraco.Core.csproj index cc797ad8db..1a89bffa0a 100644 --- a/src/Umbraco.Core/Umbraco.Core.csproj +++ b/src/Umbraco.Core/Umbraco.Core.csproj @@ -314,7 +314,7 @@ - + @@ -799,7 +799,6 @@ - @@ -882,160 +881,160 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Umbraco.Tests.Benchmarks/BulkInsertBenchmarks.cs b/src/Umbraco.Tests.Benchmarks/BulkInsertBenchmarks.cs index 2e853658b6..26d4b57d8f 100644 --- a/src/Umbraco.Tests.Benchmarks/BulkInsertBenchmarks.cs +++ b/src/Umbraco.Tests.Benchmarks/BulkInsertBenchmarks.cs @@ -10,10 +10,10 @@ using BenchmarkDotNet.Horology; using BenchmarkDotNet.Jobs; using Umbraco.Core; using Umbraco.Core.Logging; +using Umbraco.Core.Migrations.Install; using Umbraco.Core.Models.Rdbms; using Umbraco.Core.Persistence; using Umbraco.Core.Persistence.Mappers; -using Umbraco.Core.Persistence.Migrations.Initial; using Umbraco.Core.Persistence.Querying; using Umbraco.Core.Persistence.SqlSyntax; using Umbraco.Core.Scoping; @@ -127,7 +127,7 @@ namespace Umbraco.Tests.Benchmarks //use the db to create the initial schema so we can reuse in each bench using (_dbSqlCe = GetSqlCeDatabase(sqlCeConnectionString, logger)) { - var creation = new DatabaseSchemaCreation(_dbSqlCe, logger); + var creation = new DatabaseSchemaCreator(_dbSqlCe, logger); creation.InitializeDatabaseSchema(); } _initDbBytes = File.ReadAllBytes(_dbFile); diff --git a/src/Umbraco.Tests/Migrations/AdvancedMigrationTests.cs b/src/Umbraco.Tests/Migrations/AdvancedMigrationTests.cs index 98be81e286..7b71201a66 100644 --- a/src/Umbraco.Tests/Migrations/AdvancedMigrationTests.cs +++ b/src/Umbraco.Tests/Migrations/AdvancedMigrationTests.cs @@ -3,13 +3,12 @@ using Moq; using NUnit.Framework; using Semver; using Umbraco.Core.Logging; +using Umbraco.Core.Migrations; +using Umbraco.Core.Migrations.Install; +using Umbraco.Core.Migrations.Syntax.Execute; using Umbraco.Core.Models.Rdbms; using Umbraco.Core.Persistence; using Umbraco.Core.Persistence.DatabaseModelDefinitions; -using Umbraco.Core.Persistence.Migrations; -using Umbraco.Core.Persistence.Migrations.Initial; -using Umbraco.Core.Persistence.Migrations.Syntax.Execute; -using Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionEight; using Umbraco.Core.Persistence.SqlSyntax; using Umbraco.Core.Services; using Umbraco.Tests.TestHelpers; @@ -47,8 +46,8 @@ namespace Umbraco.Tests.Migrations var upgraded = runner.Execute(context); Assert.IsTrue(upgraded); - var helper = new DatabaseSchemaHelper(database, logger); - var exists = helper.TableExist("umbracoNode"); + var helper = new DatabaseSchemaCreator(database, logger); + var exists = helper.TableExists("umbracoNode"); Assert.IsTrue(exists); scope.Complete(); @@ -237,7 +236,7 @@ namespace Umbraco.Tests.Migrations public override void Up() { // creates *all* tables keys and indexes - foreach (var x in DatabaseSchemaCreation.OrderedTables) + foreach (var x in DatabaseSchemaCreator.OrderedTables) { // ok - for tests, restrict to Node if (x.Value != typeof(NodeDto)) continue; diff --git a/src/Umbraco.Tests/Migrations/AlterMigrationTests.cs b/src/Umbraco.Tests/Migrations/AlterMigrationTests.cs index 892ebba5ae..6b321149ba 100644 --- a/src/Umbraco.Tests/Migrations/AlterMigrationTests.cs +++ b/src/Umbraco.Tests/Migrations/AlterMigrationTests.cs @@ -7,8 +7,8 @@ using NPoco; using NUnit.Framework; using Umbraco.Core; using Umbraco.Core.Logging; +using Umbraco.Core.Migrations; using Umbraco.Core.Persistence; -using Umbraco.Core.Persistence.Migrations; using Umbraco.Core.Persistence.SqlSyntax; using Umbraco.Tests.Migrations.Stubs; diff --git a/src/Umbraco.Tests/Migrations/FindingMigrationsTest.cs b/src/Umbraco.Tests/Migrations/FindingMigrationsTest.cs index 1d07c98440..ffcf00af44 100644 --- a/src/Umbraco.Tests/Migrations/FindingMigrationsTest.cs +++ b/src/Umbraco.Tests/Migrations/FindingMigrationsTest.cs @@ -6,7 +6,7 @@ using Moq; using NUnit.Framework; using Umbraco.Core; using Umbraco.Core.Logging; -using Umbraco.Core.Persistence.Migrations; +using Umbraco.Core.Migrations; using Umbraco.Tests.Migrations.Stubs; using Umbraco.Tests.TestHelpers; diff --git a/src/Umbraco.Tests/Migrations/MigrationIssuesTests.cs b/src/Umbraco.Tests/Migrations/MigrationIssuesTests.cs index bda915a3d3..ac5dc4481c 100644 --- a/src/Umbraco.Tests/Migrations/MigrationIssuesTests.cs +++ b/src/Umbraco.Tests/Migrations/MigrationIssuesTests.cs @@ -7,9 +7,9 @@ using Semver; using Umbraco.Core; using Umbraco.Core.Composing; using Umbraco.Core.Logging; +using Umbraco.Core.Migrations; +using Umbraco.Core.Migrations.Upgrade.TargetVersionEight; using Umbraco.Core.Models.Rdbms; -using Umbraco.Core.Persistence.Migrations; -using Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionEight; using Umbraco.Core.Services; using Umbraco.Tests.TestHelpers; using Umbraco.Tests.Testing; diff --git a/src/Umbraco.Tests/Migrations/MigrationRunnerTests.cs b/src/Umbraco.Tests/Migrations/MigrationRunnerTests.cs index 2b2f21597f..fb73ea6270 100644 --- a/src/Umbraco.Tests/Migrations/MigrationRunnerTests.cs +++ b/src/Umbraco.Tests/Migrations/MigrationRunnerTests.cs @@ -7,9 +7,9 @@ using NUnit.Framework; using Semver; using Umbraco.Core; using Umbraco.Core.Logging; +using Umbraco.Core.Migrations; +using Umbraco.Core.Migrations.Syntax.Alter.Expressions; using Umbraco.Core.Persistence; -using Umbraco.Core.Persistence.Migrations; -using Umbraco.Core.Persistence.Migrations.Syntax.Alter.Expressions; using Umbraco.Core.Persistence.SqlSyntax; using Umbraco.Core.Services; diff --git a/src/Umbraco.Tests/Persistence/Migrations/PostMigrationTests.cs b/src/Umbraco.Tests/Migrations/PostMigrationTests.cs similarity index 97% rename from src/Umbraco.Tests/Persistence/Migrations/PostMigrationTests.cs rename to src/Umbraco.Tests/Migrations/PostMigrationTests.cs index 9ab9d3ba4a..1290f48632 100644 --- a/src/Umbraco.Tests/Persistence/Migrations/PostMigrationTests.cs +++ b/src/Umbraco.Tests/Migrations/PostMigrationTests.cs @@ -4,12 +4,12 @@ using Semver; using Umbraco.Core; using Umbraco.Core.Events; using Umbraco.Core.Logging; -using Umbraco.Core.Persistence.Migrations; +using Umbraco.Core.Migrations; using Umbraco.Core.Services; using Umbraco.Tests.TestHelpers; using Umbraco.Web.Strategies.Migrations; -namespace Umbraco.Tests.Persistence.Migrations +namespace Umbraco.Tests.Migrations { [TestFixture] public class PostMigrationTests diff --git a/src/Umbraco.Tests/Migrations/Stubs/AlterUserTableMigrationStub.cs b/src/Umbraco.Tests/Migrations/Stubs/AlterUserTableMigrationStub.cs index b2d1d36477..76ce78882c 100644 --- a/src/Umbraco.Tests/Migrations/Stubs/AlterUserTableMigrationStub.cs +++ b/src/Umbraco.Tests/Migrations/Stubs/AlterUserTableMigrationStub.cs @@ -1,10 +1,10 @@ using Umbraco.Core.Logging; -using Umbraco.Core.Persistence.Migrations; +using Umbraco.Core.Migrations; using Umbraco.Core.Persistence.SqlSyntax; namespace Umbraco.Tests.Migrations.Stubs { - [MigrationAttribute("6.0.0", 0, "Test")] + [Migration("6.0.0", 0, "Test")] public class AlterUserTableMigrationStub : MigrationBase { public AlterUserTableMigrationStub(IMigrationContext context) diff --git a/src/Umbraco.Tests/Migrations/Stubs/DropForeignKeyMigrationStub.cs b/src/Umbraco.Tests/Migrations/Stubs/DropForeignKeyMigrationStub.cs index 12ef773914..9842393556 100644 --- a/src/Umbraco.Tests/Migrations/Stubs/DropForeignKeyMigrationStub.cs +++ b/src/Umbraco.Tests/Migrations/Stubs/DropForeignKeyMigrationStub.cs @@ -1,5 +1,5 @@ using Umbraco.Core.Logging; -using Umbraco.Core.Persistence.Migrations; +using Umbraco.Core.Migrations; using Umbraco.Core.Persistence.SqlSyntax; namespace Umbraco.Tests.Migrations.Stubs diff --git a/src/Umbraco.Tests/Migrations/Stubs/Dummy.cs b/src/Umbraco.Tests/Migrations/Stubs/Dummy.cs index 7fbe880b0c..0af87b7e8a 100644 --- a/src/Umbraco.Tests/Migrations/Stubs/Dummy.cs +++ b/src/Umbraco.Tests/Migrations/Stubs/Dummy.cs @@ -1,4 +1,4 @@ -using Umbraco.Core.Persistence.Migrations; +using Umbraco.Core.Migrations; namespace Umbraco.Tests.Migrations.Stubs { diff --git a/src/Umbraco.Tests/Migrations/Stubs/FiveZeroMigration.cs b/src/Umbraco.Tests/Migrations/Stubs/FiveZeroMigration.cs index 202f7859d0..d5d9e8a00a 100644 --- a/src/Umbraco.Tests/Migrations/Stubs/FiveZeroMigration.cs +++ b/src/Umbraco.Tests/Migrations/Stubs/FiveZeroMigration.cs @@ -1,5 +1,5 @@ using Umbraco.Core.Logging; -using Umbraco.Core.Persistence.Migrations; +using Umbraco.Core.Migrations; using Umbraco.Core.Persistence.SqlSyntax; namespace Umbraco.Tests.Migrations.Stubs diff --git a/src/Umbraco.Tests/Migrations/Stubs/FourElevenMigration.cs b/src/Umbraco.Tests/Migrations/Stubs/FourElevenMigration.cs index 8aa00a6c66..6dc4e895bb 100644 --- a/src/Umbraco.Tests/Migrations/Stubs/FourElevenMigration.cs +++ b/src/Umbraco.Tests/Migrations/Stubs/FourElevenMigration.cs @@ -1,5 +1,5 @@ using Umbraco.Core.Logging; -using Umbraco.Core.Persistence.Migrations; +using Umbraco.Core.Migrations; using Umbraco.Core.Persistence.SqlSyntax; namespace Umbraco.Tests.Migrations.Stubs diff --git a/src/Umbraco.Tests/Migrations/Stubs/SixZeroMigration1.cs b/src/Umbraco.Tests/Migrations/Stubs/SixZeroMigration1.cs index df4a11b950..23358e8eab 100644 --- a/src/Umbraco.Tests/Migrations/Stubs/SixZeroMigration1.cs +++ b/src/Umbraco.Tests/Migrations/Stubs/SixZeroMigration1.cs @@ -1,10 +1,10 @@ using Umbraco.Core.Logging; -using Umbraco.Core.Persistence.Migrations; +using Umbraco.Core.Migrations; using Umbraco.Core.Persistence.SqlSyntax; namespace Umbraco.Tests.Migrations.Stubs { - [MigrationAttribute("6.0.0", 1, "Test")] + [Migration("6.0.0", 1, "Test")] public class SixZeroMigration1 : MigrationBase { public SixZeroMigration1(IMigrationContext context) diff --git a/src/Umbraco.Tests/Migrations/Stubs/SixZeroMigration2.cs b/src/Umbraco.Tests/Migrations/Stubs/SixZeroMigration2.cs index a7ccc8af6e..f2abc65fc4 100644 --- a/src/Umbraco.Tests/Migrations/Stubs/SixZeroMigration2.cs +++ b/src/Umbraco.Tests/Migrations/Stubs/SixZeroMigration2.cs @@ -1,5 +1,5 @@ using Umbraco.Core.Logging; -using Umbraco.Core.Persistence.Migrations; +using Umbraco.Core.Migrations; using Umbraco.Core.Persistence.SqlSyntax; namespace Umbraco.Tests.Migrations.Stubs diff --git a/src/Umbraco.Tests/Migrations/Upgrades/BaseUpgradeTest.cs b/src/Umbraco.Tests/Migrations/Upgrades/BaseUpgradeTest.cs index e619c5dcd3..1e4545e7e9 100644 --- a/src/Umbraco.Tests/Migrations/Upgrades/BaseUpgradeTest.cs +++ b/src/Umbraco.Tests/Migrations/Upgrades/BaseUpgradeTest.cs @@ -6,8 +6,9 @@ using NUnit.Framework; using Semver; using Umbraco.Core; using Umbraco.Core.Logging; +using Umbraco.Core.Migrations; +using Umbraco.Core.Migrations.Install; using Umbraco.Core.Persistence; -using Umbraco.Core.Persistence.Migrations; using Umbraco.Core.Services; using Umbraco.Tests.TestHelpers; @@ -81,11 +82,11 @@ namespace Umbraco.Tests.Migrations.Upgrades Assert.That(upgraded, Is.True); - var schemaHelper = new DatabaseSchemaHelper(db, logger); + var schemaHelper = new DatabaseSchemaCreator(db, logger); - var hasTabTable = schemaHelper.TableExist("cmsTab"); - var hasPropertyTypeGroupTable = schemaHelper.TableExist("cmsPropertyTypeGroup"); - var hasAppTreeTable = schemaHelper.TableExist("umbracoAppTree"); + var hasTabTable = schemaHelper.TableExists("cmsTab"); + var hasPropertyTypeGroupTable = schemaHelper.TableExists("cmsPropertyTypeGroup"); + var hasAppTreeTable = schemaHelper.TableExists("umbracoAppTree"); Assert.That(hasTabTable, Is.False); Assert.That(hasPropertyTypeGroupTable, Is.True); diff --git a/src/Umbraco.Tests/Migrations/Upgrades/ValidateOlderSchemaTest.cs b/src/Umbraco.Tests/Migrations/Upgrades/ValidateOlderSchemaTest.cs index 17cf0c6d10..efc0ceeeed 100644 --- a/src/Umbraco.Tests/Migrations/Upgrades/ValidateOlderSchemaTest.cs +++ b/src/Umbraco.Tests/Migrations/Upgrades/ValidateOlderSchemaTest.cs @@ -9,8 +9,8 @@ using NPoco; using NUnit.Framework; using Umbraco.Core; using Umbraco.Core.Logging; +using Umbraco.Core.Migrations.Install; using Umbraco.Core.Persistence; -using Umbraco.Core.Persistence.Migrations.Initial; using Umbraco.Core.Persistence.SqlSyntax; using Umbraco.Tests.TestHelpers; @@ -28,7 +28,7 @@ namespace Umbraco.Tests.Migrations.Upgrades { // Arrange var db = GetConfiguredDatabase(); - var schema = new DatabaseSchemaCreation(db, Mock.Of()); + var schema = new DatabaseSchemaCreator(db, Mock.Of()); //Create db schema and data from old Total.sql file for Sql Ce string statements = GetDatabaseSpecificSqlScript(); diff --git a/src/Umbraco.Tests/Persistence/DatabaseContextTests.cs b/src/Umbraco.Tests/Persistence/DatabaseContextTests.cs index d9bb711193..8eba8df947 100644 --- a/src/Umbraco.Tests/Persistence/DatabaseContextTests.cs +++ b/src/Umbraco.Tests/Persistence/DatabaseContextTests.cs @@ -7,6 +7,7 @@ using NPoco; using NUnit.Framework; using Umbraco.Core; using Umbraco.Core.Logging; +using Umbraco.Core.Migrations.Install; using Umbraco.Core.Persistence; using Umbraco.Core.Persistence.Mappers; using Umbraco.Core.Persistence.SqlSyntax; @@ -87,16 +88,16 @@ namespace Umbraco.Tests.Persistence // new ProfilingLogger(Mock.Of(), Mock.Of())); // create the umbraco database - DatabaseSchemaHelper schemaHelper; + DatabaseSchemaCreator schemaHelper; using (var database = _databaseFactory.CreateDatabase()) { - schemaHelper = new DatabaseSchemaHelper(database, _logger); - schemaHelper.CreateDatabaseSchema(_runtime, _migrationEntryService, false); + schemaHelper = new DatabaseSchemaCreator(database, _logger); + schemaHelper.InitializeDatabaseSchema(); } - var umbracoNodeTable = schemaHelper.TableExist("umbracoNode"); - var umbracoUserTable = schemaHelper.TableExist("umbracoUser"); - var cmsTagsTable = schemaHelper.TableExist("cmsTags"); + var umbracoNodeTable = schemaHelper.TableExists("umbracoNode"); + var umbracoUserTable = schemaHelper.TableExists("umbracoUser"); + var cmsTagsTable = schemaHelper.TableExists("cmsTags"); Assert.That(umbracoNodeTable, Is.True); Assert.That(umbracoUserTable, Is.True); diff --git a/src/Umbraco.Tests/Persistence/SchemaValidationTest.cs b/src/Umbraco.Tests/Persistence/SchemaValidationTest.cs index 943c5a7532..adf0793995 100644 --- a/src/Umbraco.Tests/Persistence/SchemaValidationTest.cs +++ b/src/Umbraco.Tests/Persistence/SchemaValidationTest.cs @@ -2,7 +2,7 @@ using NUnit.Framework; using Umbraco.Core.Configuration; using Umbraco.Core.Logging; -using Umbraco.Core.Persistence.Migrations.Initial; +using Umbraco.Core.Migrations.Install; using Umbraco.Core.Persistence.SqlSyntax; using Umbraco.Tests.TestHelpers; using Umbraco.Tests.Testing; @@ -20,7 +20,7 @@ namespace Umbraco.Tests.Persistence using (var scope = ScopeProvider.CreateScope()) { - var schema = new DatabaseSchemaCreation(scope.Database, Logger); + var schema = new DatabaseSchemaCreator(scope.Database, Logger); result = schema.ValidateSchema(); } diff --git a/src/Umbraco.Tests/Persistence/SqlCeTableByTableTest.cs b/src/Umbraco.Tests/Persistence/SqlCeTableByTableTest.cs index 9e79ce2df7..49217db0a2 100644 --- a/src/Umbraco.Tests/Persistence/SqlCeTableByTableTest.cs +++ b/src/Umbraco.Tests/Persistence/SqlCeTableByTableTest.cs @@ -2,6 +2,7 @@ using NPoco; using NUnit.Framework; using Umbraco.Core.Logging; +using Umbraco.Core.Migrations.Install; using Umbraco.Core.Models.Rdbms; using Umbraco.Core.Persistence; using Umbraco.Tests.TestHelpers; @@ -18,7 +19,7 @@ namespace Umbraco.Tests.Persistence { using (var scope = ScopeProvider.CreateScope()) { - var helper = new DatabaseSchemaHelper(scope.Database, Mock.Of()); + var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of()); helper.CreateTable(); @@ -31,7 +32,7 @@ namespace Umbraco.Tests.Persistence { using (var scope = ScopeProvider.CreateScope()) { - var helper = new DatabaseSchemaHelper(scope.Database, Mock.Of()); + var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of()); helper.CreateTable(); helper.CreateTable(); @@ -45,7 +46,7 @@ namespace Umbraco.Tests.Persistence { using (var scope = ScopeProvider.CreateScope()) { - var helper = new DatabaseSchemaHelper(scope.Database, Mock.Of()); + var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of()); helper.CreateTable(); helper.CreateTable(); @@ -60,7 +61,7 @@ namespace Umbraco.Tests.Persistence { using (var scope = ScopeProvider.CreateScope()) { - var helper = new DatabaseSchemaHelper(scope.Database, Mock.Of()); + var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of()); helper.CreateTable(); helper.CreateTable(); @@ -74,7 +75,7 @@ namespace Umbraco.Tests.Persistence { using (var scope = ScopeProvider.CreateScope()) { - var helper = new DatabaseSchemaHelper(scope.Database, Mock.Of()); + var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of()); helper.CreateTable(); helper.CreateTable(); @@ -89,7 +90,7 @@ namespace Umbraco.Tests.Persistence { using (var scope = ScopeProvider.CreateScope()) { - var helper = new DatabaseSchemaHelper(scope.Database, Mock.Of()); + var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of()); helper.CreateTable(); helper.CreateTable(); @@ -103,7 +104,7 @@ namespace Umbraco.Tests.Persistence { using (var scope = ScopeProvider.CreateScope()) { - var helper = new DatabaseSchemaHelper(scope.Database, Mock.Of()); + var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of()); helper.CreateTable(); helper.CreateTable(); @@ -119,7 +120,7 @@ namespace Umbraco.Tests.Persistence { using (var scope = ScopeProvider.CreateScope()) { - var helper = new DatabaseSchemaHelper(scope.Database, Mock.Of()); + var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of()); helper.CreateTable(); helper.CreateTable(); @@ -135,7 +136,7 @@ namespace Umbraco.Tests.Persistence { using (var scope = ScopeProvider.CreateScope()) { - var helper = new DatabaseSchemaHelper(scope.Database, Mock.Of()); + var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of()); helper.CreateTable(); helper.CreateTable(); @@ -149,7 +150,7 @@ namespace Umbraco.Tests.Persistence { using (var scope = ScopeProvider.CreateScope()) { - var helper = new DatabaseSchemaHelper(scope.Database, Mock.Of()); + var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of()); helper.CreateTable(); helper.CreateTable(); @@ -164,7 +165,7 @@ namespace Umbraco.Tests.Persistence { using (var scope = ScopeProvider.CreateScope()) { - var helper = new DatabaseSchemaHelper(scope.Database, Mock.Of()); + var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of()); helper.CreateTable(); @@ -177,7 +178,7 @@ namespace Umbraco.Tests.Persistence { using (var scope = ScopeProvider.CreateScope()) { - var helper = new DatabaseSchemaHelper(scope.Database, Mock.Of()); + var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of()); helper.CreateTable(); helper.CreateTable(); @@ -192,7 +193,7 @@ namespace Umbraco.Tests.Persistence { using (var scope = ScopeProvider.CreateScope()) { - var helper = new DatabaseSchemaHelper(scope.Database, Mock.Of()); + var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of()); helper.CreateTable(); helper.CreateTable(); @@ -206,7 +207,7 @@ namespace Umbraco.Tests.Persistence { using (var scope = ScopeProvider.CreateScope()) { - var helper = new DatabaseSchemaHelper(scope.Database, Mock.Of()); + var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of()); helper.CreateTable(); helper.CreateTable(); @@ -223,7 +224,7 @@ namespace Umbraco.Tests.Persistence { using (var scope = ScopeProvider.CreateScope()) { - var helper = new DatabaseSchemaHelper(scope.Database, Mock.Of()); + var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of()); helper.CreateTable(); helper.CreateTable(); @@ -239,7 +240,7 @@ namespace Umbraco.Tests.Persistence { using (var scope = ScopeProvider.CreateScope()) { - var helper = new DatabaseSchemaHelper(scope.Database, Mock.Of()); + var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of()); helper.CreateTable(); helper.CreateTable(); @@ -253,7 +254,7 @@ namespace Umbraco.Tests.Persistence { using (var scope = ScopeProvider.CreateScope()) { - var helper = new DatabaseSchemaHelper(scope.Database, Mock.Of()); + var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of()); helper.CreateTable(); @@ -266,7 +267,7 @@ namespace Umbraco.Tests.Persistence { using (var scope = ScopeProvider.CreateScope()) { - var helper = new DatabaseSchemaHelper(scope.Database, Mock.Of()); + var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of()); helper.CreateTable(); @@ -279,7 +280,7 @@ namespace Umbraco.Tests.Persistence { using (var scope = ScopeProvider.CreateScope()) { - var helper = new DatabaseSchemaHelper(scope.Database, Mock.Of()); + var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of()); helper.CreateTable(); @@ -292,7 +293,7 @@ namespace Umbraco.Tests.Persistence { using (var scope = ScopeProvider.CreateScope()) { - var helper = new DatabaseSchemaHelper(scope.Database, Mock.Of()); + var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of()); helper.CreateTable(); helper.CreateTable(); @@ -308,7 +309,7 @@ namespace Umbraco.Tests.Persistence { using (var scope = ScopeProvider.CreateScope()) { - var helper = new DatabaseSchemaHelper(scope.Database, Mock.Of()); + var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of()); helper.CreateTable(); helper.CreateTable(); @@ -325,7 +326,7 @@ namespace Umbraco.Tests.Persistence { using (var scope = ScopeProvider.CreateScope()) { - var helper = new DatabaseSchemaHelper(scope.Database, Mock.Of()); + var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of()); helper.CreateTable(); helper.CreateTable(); @@ -340,7 +341,7 @@ namespace Umbraco.Tests.Persistence { using (var scope = ScopeProvider.CreateScope()) { - var helper = new DatabaseSchemaHelper(scope.Database, Mock.Of()); + var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of()); helper.CreateTable(); helper.CreateTable(); @@ -357,7 +358,7 @@ namespace Umbraco.Tests.Persistence { using (var scope = ScopeProvider.CreateScope()) { - var helper = new DatabaseSchemaHelper(scope.Database, Mock.Of()); + var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of()); helper.CreateTable(); helper.CreateTable(); @@ -375,7 +376,7 @@ namespace Umbraco.Tests.Persistence { using (var scope = ScopeProvider.CreateScope()) { - var helper = new DatabaseSchemaHelper(scope.Database, Mock.Of()); + var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of()); helper.CreateTable(); helper.CreateTable(); @@ -392,7 +393,7 @@ namespace Umbraco.Tests.Persistence { using (var scope = ScopeProvider.CreateScope()) { - var helper = new DatabaseSchemaHelper(scope.Database, Mock.Of()); + var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of()); helper.CreateTable(); helper.CreateTable(); @@ -407,7 +408,7 @@ namespace Umbraco.Tests.Persistence { using (var scope = ScopeProvider.CreateScope()) { - var helper = new DatabaseSchemaHelper(scope.Database, Mock.Of()); + var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of()); helper.CreateTable(); helper.CreateTable(); @@ -422,7 +423,7 @@ namespace Umbraco.Tests.Persistence { using (var scope = ScopeProvider.CreateScope()) { - var helper = new DatabaseSchemaHelper(scope.Database, Mock.Of()); + var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of()); helper.CreateTable(); @@ -435,7 +436,7 @@ namespace Umbraco.Tests.Persistence { using (var scope = ScopeProvider.CreateScope()) { - var helper = new DatabaseSchemaHelper(scope.Database, Mock.Of()); + var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of()); helper.CreateTable(); helper.CreateTable(); @@ -449,7 +450,7 @@ namespace Umbraco.Tests.Persistence { using (var scope = ScopeProvider.CreateScope()) { - var helper = new DatabaseSchemaHelper(scope.Database, Mock.Of()); + var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of()); helper.CreateTable(); helper.CreateTable(); @@ -463,7 +464,7 @@ namespace Umbraco.Tests.Persistence { using (var scope = ScopeProvider.CreateScope()) { - var helper = new DatabaseSchemaHelper(scope.Database, Mock.Of()); + var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of()); helper.CreateTable(); @@ -476,7 +477,7 @@ namespace Umbraco.Tests.Persistence { using (var scope = ScopeProvider.CreateScope()) { - var helper = new DatabaseSchemaHelper(scope.Database, Mock.Of()); + var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of()); helper.CreateTable(); helper.CreateTable(); @@ -497,7 +498,7 @@ namespace Umbraco.Tests.Persistence { using (var scope = ScopeProvider.CreateScope()) { - var helper = new DatabaseSchemaHelper(scope.Database, Mock.Of()); + var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of()); helper.CreateTable(); helper.CreateTable(); @@ -513,7 +514,7 @@ namespace Umbraco.Tests.Persistence { using (var scope = ScopeProvider.CreateScope()) { - var helper = new DatabaseSchemaHelper(scope.Database, Mock.Of()); + var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of()); helper.CreateTable(); @@ -526,7 +527,7 @@ namespace Umbraco.Tests.Persistence { using (var scope = ScopeProvider.CreateScope()) { - var helper = new DatabaseSchemaHelper(scope.Database, Mock.Of()); + var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of()); helper.CreateTable(); @@ -539,7 +540,7 @@ namespace Umbraco.Tests.Persistence { using (var scope = ScopeProvider.CreateScope()) { - var helper = new DatabaseSchemaHelper(scope.Database, Mock.Of()); + var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of()); helper.CreateTable(); helper.CreateTable(); @@ -553,7 +554,7 @@ namespace Umbraco.Tests.Persistence { using (var scope = ScopeProvider.CreateScope()) { - var helper = new DatabaseSchemaHelper(scope.Database, Mock.Of()); + var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of()); helper.CreateTable(); helper.CreateTable(); @@ -567,7 +568,7 @@ namespace Umbraco.Tests.Persistence { using (var scope = ScopeProvider.CreateScope()) { - var helper = new DatabaseSchemaHelper(scope.Database, Mock.Of()); + var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of()); helper.CreateTable(); helper.CreateTable(); @@ -582,7 +583,7 @@ namespace Umbraco.Tests.Persistence { using (var scope = ScopeProvider.CreateScope()) { - var helper = new DatabaseSchemaHelper(scope.Database, Mock.Of()); + var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of()); helper.CreateTable(); helper.CreateTable(); diff --git a/src/Umbraco.Tests/Persistence/SyntaxProvider/SqlCeSyntaxProviderTests.cs b/src/Umbraco.Tests/Persistence/SyntaxProvider/SqlCeSyntaxProviderTests.cs index 392364924e..cf9f8d791b 100644 --- a/src/Umbraco.Tests/Persistence/SyntaxProvider/SqlCeSyntaxProviderTests.cs +++ b/src/Umbraco.Tests/Persistence/SyntaxProvider/SqlCeSyntaxProviderTests.cs @@ -5,13 +5,13 @@ using NPoco; using NUnit.Framework; using Umbraco.Core; using Umbraco.Core.Logging; +using Umbraco.Core.Migrations; +using Umbraco.Core.Migrations.Syntax.Create.Index; +using Umbraco.Core.Migrations.Syntax.Expressions; using Umbraco.Core.Models.Rdbms; using Umbraco.Core.Persistence; using Umbraco.Core.Persistence.DatabaseAnnotations; using Umbraco.Core.Persistence.DatabaseModelDefinitions; -using Umbraco.Core.Persistence.Migrations; -using Umbraco.Core.Persistence.Migrations.Syntax.Create.Index; -using Umbraco.Core.Persistence.Migrations.Syntax.Expressions; using Umbraco.Core.Persistence.SqlSyntax; using Umbraco.Core.Scoping; using Umbraco.Tests.TestHelpers; diff --git a/src/Umbraco.Tests/TestHelpers/TestWithDatabaseBase.cs b/src/Umbraco.Tests/TestHelpers/TestWithDatabaseBase.cs index f79000c81c..b8fe603eb3 100644 --- a/src/Umbraco.Tests/TestHelpers/TestWithDatabaseBase.cs +++ b/src/Umbraco.Tests/TestHelpers/TestWithDatabaseBase.cs @@ -28,6 +28,7 @@ using Umbraco.Core.Scoping; using Umbraco.Tests.TestHelpers.Stubs; using Umbraco.Tests.Testing; using LightInject; +using Umbraco.Core.Migrations.Install; using Umbraco.Core.Models.PublishedContent; using Umbraco.Core.Persistence.Repositories; @@ -293,9 +294,9 @@ namespace Umbraco.Tests.TestHelpers { using (var scope = ScopeProvider.CreateScope()) { - var schemaHelper = new DatabaseSchemaHelper(scope.Database, Logger); + var schemaHelper = new DatabaseSchemaCreator(scope.Database, Logger); //Create the umbraco database and its base data - schemaHelper.CreateDatabaseSchema(Mock.Of(), Mock.Of()); + schemaHelper.InitializeDatabaseSchema(); scope.Complete(); } diff --git a/src/Umbraco.Tests/Umbraco.Tests.csproj b/src/Umbraco.Tests/Umbraco.Tests.csproj index 019cfe243c..cdbfb3bb3e 100644 --- a/src/Umbraco.Tests/Umbraco.Tests.csproj +++ b/src/Umbraco.Tests/Umbraco.Tests.csproj @@ -272,7 +272,7 @@ - + diff --git a/src/Umbraco.Web/Composing/Current.cs b/src/Umbraco.Web/Composing/Current.cs index 060279aae9..5892f4096d 100644 --- a/src/Umbraco.Web/Composing/Current.cs +++ b/src/Umbraco.Web/Composing/Current.cs @@ -11,8 +11,8 @@ using Umbraco.Core.Logging; using Umbraco.Core.Macros; using Umbraco.Core.Models.PublishedContent; using Umbraco.Core.Persistence; -using Umbraco.Core.Persistence.Migrations; using Umbraco.Core.Composing; +using Umbraco.Core.Migrations; using Umbraco.Core.PropertyEditors; using Umbraco.Core.Scoping; using Umbraco.Core.Services; diff --git a/src/Umbraco.Web/Install/Controllers/InstallApiController.cs b/src/Umbraco.Web/Install/Controllers/InstallApiController.cs index 3720b0888d..4b37867d0c 100644 --- a/src/Umbraco.Web/Install/Controllers/InstallApiController.cs +++ b/src/Umbraco.Web/Install/Controllers/InstallApiController.cs @@ -6,6 +6,7 @@ using System.Web.Http; using Newtonsoft.Json.Linq; using Umbraco.Core; using Umbraco.Core.Logging; +using Umbraco.Core.Migrations.Install; using Umbraco.Web.Install.Models; using Umbraco.Web.WebApi; diff --git a/src/Umbraco.Web/Install/Controllers/InstallController.cs b/src/Umbraco.Web/Install/Controllers/InstallController.cs index e03c3fe531..2820455c70 100644 --- a/src/Umbraco.Web/Install/Controllers/InstallController.cs +++ b/src/Umbraco.Web/Install/Controllers/InstallController.cs @@ -3,6 +3,7 @@ using Umbraco.Core; using Umbraco.Core.Configuration; using Umbraco.Core.IO; using Umbraco.Core.Logging; +using Umbraco.Core.Migrations.Install; using Umbraco.Web.Security; namespace Umbraco.Web.Install.Controllers diff --git a/src/Umbraco.Web/Install/InstallHelper.cs b/src/Umbraco.Web/Install/InstallHelper.cs index 771b8a3b51..cad77c35ce 100644 --- a/src/Umbraco.Web/Install/InstallHelper.cs +++ b/src/Umbraco.Web/Install/InstallHelper.cs @@ -9,6 +9,7 @@ using Umbraco.Core; using Umbraco.Core.Configuration; using Umbraco.Core.IO; using Umbraco.Core.Logging; +using Umbraco.Core.Migrations.Install; using Umbraco.Core.Persistence; using Umbraco.Core.Persistence.SqlSyntax; using Umbraco.Web.Composing; diff --git a/src/Umbraco.Web/Install/InstallSteps/DatabaseConfigureStep.cs b/src/Umbraco.Web/Install/InstallSteps/DatabaseConfigureStep.cs index d1753cdc4c..aab42dca9e 100644 --- a/src/Umbraco.Web/Install/InstallSteps/DatabaseConfigureStep.cs +++ b/src/Umbraco.Web/Install/InstallSteps/DatabaseConfigureStep.cs @@ -3,6 +3,7 @@ using System.Configuration; using Umbraco.Core; using Umbraco.Core.Configuration; using Umbraco.Core.Logging; +using Umbraco.Core.Migrations.Install; using Umbraco.Web.Install.Models; namespace Umbraco.Web.Install.InstallSteps diff --git a/src/Umbraco.Web/Install/InstallSteps/DatabaseInstallStep.cs b/src/Umbraco.Web/Install/InstallSteps/DatabaseInstallStep.cs index c4ecf16f5b..068f3069bd 100644 --- a/src/Umbraco.Web/Install/InstallSteps/DatabaseInstallStep.cs +++ b/src/Umbraco.Web/Install/InstallSteps/DatabaseInstallStep.cs @@ -4,6 +4,7 @@ using System.Configuration; using Umbraco.Core; using Umbraco.Core.Configuration; using Umbraco.Core.Logging; +using Umbraco.Core.Migrations.Install; using Umbraco.Web.Install.Models; namespace Umbraco.Web.Install.InstallSteps diff --git a/src/Umbraco.Web/Install/InstallSteps/DatabaseUpgradeStep.cs b/src/Umbraco.Web/Install/InstallSteps/DatabaseUpgradeStep.cs index 025bd38489..bb1584006a 100644 --- a/src/Umbraco.Web/Install/InstallSteps/DatabaseUpgradeStep.cs +++ b/src/Umbraco.Web/Install/InstallSteps/DatabaseUpgradeStep.cs @@ -5,7 +5,8 @@ using System.Linq; using Umbraco.Core; using Umbraco.Core.Configuration; using Umbraco.Core.Logging; -using Umbraco.Core.Persistence.Migrations; +using Umbraco.Core.Migrations; +using Umbraco.Core.Migrations.Install; using Umbraco.Core.Services; using Umbraco.Web.Install.Models; diff --git a/src/Umbraco.Web/Install/InstallSteps/MajorVersion7UpgradeReport.cs b/src/Umbraco.Web/Install/InstallSteps/MajorVersion7UpgradeReport.cs index d6db289b2d..b2aeebe175 100644 --- a/src/Umbraco.Web/Install/InstallSteps/MajorVersion7UpgradeReport.cs +++ b/src/Umbraco.Web/Install/InstallSteps/MajorVersion7UpgradeReport.cs @@ -4,6 +4,7 @@ using System.Linq; using NPoco; using Umbraco.Core; using Umbraco.Core.Configuration; +using Umbraco.Core.Migrations.Install; using Umbraco.Core.Persistence; using Umbraco.Core.Persistence.SqlSyntax; using Umbraco.Core.PropertyEditors; diff --git a/src/Umbraco.Web/Install/InstallSteps/NewInstallStep.cs b/src/Umbraco.Web/Install/InstallSteps/NewInstallStep.cs index 1757311180..cfa8975abe 100644 --- a/src/Umbraco.Web/Install/InstallSteps/NewInstallStep.cs +++ b/src/Umbraco.Web/Install/InstallSteps/NewInstallStep.cs @@ -6,6 +6,7 @@ using System.Web; using System.Web.Security; using Umbraco.Core; using Umbraco.Core.Configuration; +using Umbraco.Core.Migrations.Install; using Umbraco.Core.Persistence; using Umbraco.Core.Services; using Umbraco.Web.Install.Models; diff --git a/src/Umbraco.Web/Install/InstallSteps/UpgradeStep.cs b/src/Umbraco.Web/Install/InstallSteps/UpgradeStep.cs index aa95dac3f1..b48db85f08 100644 --- a/src/Umbraco.Web/Install/InstallSteps/UpgradeStep.cs +++ b/src/Umbraco.Web/Install/InstallSteps/UpgradeStep.cs @@ -2,6 +2,7 @@ using Semver; using Umbraco.Core; using Umbraco.Core.Configuration; +using Umbraco.Core.Migrations.Install; using Umbraco.Web.Composing; using Umbraco.Web.Install.Models; diff --git a/src/Umbraco.Web/Strategies/Migrations/ClearCsrfCookiesAfterUpgrade.cs b/src/Umbraco.Web/Strategies/Migrations/ClearCsrfCookiesAfterUpgrade.cs index a390652232..c2c224a5a2 100644 --- a/src/Umbraco.Web/Strategies/Migrations/ClearCsrfCookiesAfterUpgrade.cs +++ b/src/Umbraco.Web/Strategies/Migrations/ClearCsrfCookiesAfterUpgrade.cs @@ -1,9 +1,9 @@ using System.Web; using Umbraco.Core.Events; -using Umbraco.Core.Persistence.Migrations; using Umbraco.Web.WebApi.Filters; using Umbraco.Core; using Umbraco.Core.Configuration; +using Umbraco.Core.Migrations; namespace Umbraco.Web.Strategies.Migrations { diff --git a/src/Umbraco.Web/Strategies/Migrations/ClearMediaXmlCacheForDeletedItemsAfterUpgrade.cs b/src/Umbraco.Web/Strategies/Migrations/ClearMediaXmlCacheForDeletedItemsAfterUpgrade.cs index de2a66c645..a78a93df23 100644 --- a/src/Umbraco.Web/Strategies/Migrations/ClearMediaXmlCacheForDeletedItemsAfterUpgrade.cs +++ b/src/Umbraco.Web/Strategies/Migrations/ClearMediaXmlCacheForDeletedItemsAfterUpgrade.cs @@ -2,7 +2,7 @@ using Umbraco.Core; using Umbraco.Core.Events; using Umbraco.Core.Logging; -using Umbraco.Core.Persistence.Migrations; +using Umbraco.Core.Migrations; namespace Umbraco.Web.Strategies.Migrations { diff --git a/src/Umbraco.Web/Strategies/Migrations/EnsureListViewDataTypeIsCreated.cs b/src/Umbraco.Web/Strategies/Migrations/EnsureListViewDataTypeIsCreated.cs index 85bc0868ff..535e0f9974 100644 --- a/src/Umbraco.Web/Strategies/Migrations/EnsureListViewDataTypeIsCreated.cs +++ b/src/Umbraco.Web/Strategies/Migrations/EnsureListViewDataTypeIsCreated.cs @@ -3,8 +3,8 @@ using NPoco; using Umbraco.Core; using Umbraco.Core.Events; using Umbraco.Core.Models.Rdbms; -using Umbraco.Core.Persistence.Migrations; using Umbraco.Core.Configuration; +using Umbraco.Core.Migrations; namespace Umbraco.Web.Strategies.Migrations { diff --git a/src/Umbraco.Web/Strategies/Migrations/IPostMigration.cs b/src/Umbraco.Web/Strategies/Migrations/IPostMigration.cs index 912fe9f0b1..4823aebf59 100644 --- a/src/Umbraco.Web/Strategies/Migrations/IPostMigration.cs +++ b/src/Umbraco.Web/Strategies/Migrations/IPostMigration.cs @@ -1,5 +1,5 @@ using Umbraco.Core.Events; -using Umbraco.Core.Persistence.Migrations; +using Umbraco.Core.Migrations; namespace Umbraco.Web.Strategies.Migrations { diff --git a/src/Umbraco.Web/Strategies/Migrations/OverwriteStylesheetFilesFromTempFiles.cs b/src/Umbraco.Web/Strategies/Migrations/OverwriteStylesheetFilesFromTempFiles.cs index d4184ad80b..db89a1e725 100644 --- a/src/Umbraco.Web/Strategies/Migrations/OverwriteStylesheetFilesFromTempFiles.cs +++ b/src/Umbraco.Web/Strategies/Migrations/OverwriteStylesheetFilesFromTempFiles.cs @@ -5,7 +5,7 @@ using Umbraco.Core; using Umbraco.Core.Configuration; using Umbraco.Core.IO; using Umbraco.Core.Logging; -using Umbraco.Core.Persistence.Migrations; +using Umbraco.Core.Migrations; namespace Umbraco.Web.Strategies.Migrations { diff --git a/src/Umbraco.Web/Strategies/Migrations/PostMigrationComponent.cs b/src/Umbraco.Web/Strategies/Migrations/PostMigrationComponent.cs index 1d15ce26fc..6111027007 100644 --- a/src/Umbraco.Web/Strategies/Migrations/PostMigrationComponent.cs +++ b/src/Umbraco.Web/Strategies/Migrations/PostMigrationComponent.cs @@ -1,7 +1,7 @@ using Umbraco.Core.Components; using Umbraco.Core.Composing; -using Umbraco.Core.Persistence.Migrations; using LightInject; +using Umbraco.Core.Migrations; namespace Umbraco.Web.Strategies.Migrations { diff --git a/src/Umbraco.Web/Strategies/Migrations/RebuildXmlCachesAfterUpgrade.cs b/src/Umbraco.Web/Strategies/Migrations/RebuildXmlCachesAfterUpgrade.cs index 9bbf6b5f1c..e9ab382f9f 100644 --- a/src/Umbraco.Web/Strategies/Migrations/RebuildXmlCachesAfterUpgrade.cs +++ b/src/Umbraco.Web/Strategies/Migrations/RebuildXmlCachesAfterUpgrade.cs @@ -2,7 +2,7 @@ using umbraco; using Umbraco.Core; using Umbraco.Core.Events; -using Umbraco.Core.Persistence.Migrations; +using Umbraco.Core.Migrations; using Umbraco.Core.Services; using Umbraco.Web.Composing; using Umbraco.Web.PublishedCache.XmlPublishedCache;