From 40a6fa2b898226a8e6c82d695f6bef0bcdaa2632 Mon Sep 17 00:00:00 2001 From: Bjarke Berg Date: Tue, 8 Dec 2020 09:19:51 +0100 Subject: [PATCH] NetCore: Migrate more tests (#9494) * Migrate tests * Cleanup * Migrate tests * post merge fix Signed-off-by: Bjarke Berg --- .../Umbraco.PublishedCache.NuCache.csproj | 11 +- .../TestHelpers}/TestDatabase.cs | 5 +- .../Migrations/AdvancedMigrationTests.cs | 6 +- .../Services/RedirectUrlServiceTests.cs | 49 +- .../Cache/DefaultCachePolicyTests.cs | 11 +- .../Cache/FullDataSetCachePolicyTests.cs | 3 +- .../Umbraco.Core}/Cache/RefresherTests.cs | 2 +- .../Cache/SingleItemsOnlyCachePolicyTests.cs | 3 +- .../PropertyEditors}/ConvertersTests.cs | 108 +- .../Migrations/AlterMigrationTests.cs | 62 +- .../Migrations/MigrationPlanTests.cs | 50 +- .../Migrations/MigrationTests.cs | 69 +- .../Migrations/PostMigrationTests.cs | 54 +- .../Stubs/AlterUserTableMigrationStub.cs | 0 .../Stubs/DropForeignKeyMigrationStub.cs | 0 .../Migrations/Stubs/Dummy.cs | 0 .../Migrations/Stubs/FiveZeroMigration.cs | 0 .../Migrations/Stubs/FourElevenMigration.cs | 0 .../Migrations/Stubs/SixZeroMigration1.cs | 0 .../Migrations/Stubs/SixZeroMigration2.cs | 0 .../SnapDictionaryTests.cs | 5 +- .../Umbraco.Tests.UnitTests.csproj | 1 + .../SqlScripts/SqlCe-SchemaAndData-4110.sql | Bin 422888 -> 0 bytes .../Migrations/SqlScripts/SqlCeTotal-480.sql | 638 ------- .../SqlScripts/SqlResources.Designer.cs | 143 -- .../Migrations/SqlScripts/SqlResources.resx | 130 -- .../SqlScripts/SqlServerTotal-480.sql | 1671 ----------------- src/Umbraco.Tests/Umbraco.Tests.csproj | 31 +- .../Macros/PartialViewMacroPage.cs | 11 - src/Umbraco.Web/Umbraco.Web.csproj | 1 + 30 files changed, 227 insertions(+), 2837 deletions(-) rename src/{Umbraco.Tests/Testing => Umbraco.Tests.Common/TestHelpers}/TestDatabase.cs (99%) rename src/{Umbraco.Tests => Umbraco.Tests.Integration/Umbraco.Infrastructure}/Migrations/AdvancedMigrationTests.cs (97%) rename src/{Umbraco.Tests => Umbraco.Tests.Integration/Umbraco.Infrastructure}/Services/RedirectUrlServiceTests.cs (55%) rename src/{Umbraco.Tests => Umbraco.Tests.UnitTests/Umbraco.Core}/Cache/DefaultCachePolicyTests.cs (91%) rename src/{Umbraco.Tests => Umbraco.Tests.UnitTests/Umbraco.Core}/Cache/FullDataSetCachePolicyTests.cs (99%) rename src/{Umbraco.Tests => Umbraco.Tests.UnitTests/Umbraco.Core}/Cache/RefresherTests.cs (98%) rename src/{Umbraco.Tests => Umbraco.Tests.UnitTests/Umbraco.Core}/Cache/SingleItemsOnlyCachePolicyTests.cs (97%) rename src/{Umbraco.Tests/Published => Umbraco.Tests.UnitTests/Umbraco.Core/PropertyEditors}/ConvertersTests.cs (62%) rename src/{Umbraco.Tests => Umbraco.Tests.UnitTests/Umbraco.Infrastructure}/Migrations/AlterMigrationTests.cs (61%) rename src/{Umbraco.Tests => Umbraco.Tests.UnitTests/Umbraco.Infrastructure}/Migrations/MigrationPlanTests.cs (83%) rename src/{Umbraco.Tests => Umbraco.Tests.UnitTests/Umbraco.Infrastructure}/Migrations/MigrationTests.cs (55%) rename src/{Umbraco.Tests => Umbraco.Tests.UnitTests/Umbraco.Infrastructure}/Migrations/PostMigrationTests.cs (71%) rename src/{Umbraco.Tests => Umbraco.Tests.UnitTests/Umbraco.Infrastructure}/Migrations/Stubs/AlterUserTableMigrationStub.cs (100%) rename src/{Umbraco.Tests => Umbraco.Tests.UnitTests/Umbraco.Infrastructure}/Migrations/Stubs/DropForeignKeyMigrationStub.cs (100%) rename src/{Umbraco.Tests => Umbraco.Tests.UnitTests/Umbraco.Infrastructure}/Migrations/Stubs/Dummy.cs (100%) rename src/{Umbraco.Tests => Umbraco.Tests.UnitTests/Umbraco.Infrastructure}/Migrations/Stubs/FiveZeroMigration.cs (100%) rename src/{Umbraco.Tests => Umbraco.Tests.UnitTests/Umbraco.Infrastructure}/Migrations/Stubs/FourElevenMigration.cs (100%) rename src/{Umbraco.Tests => Umbraco.Tests.UnitTests/Umbraco.Infrastructure}/Migrations/Stubs/SixZeroMigration1.cs (100%) rename src/{Umbraco.Tests => Umbraco.Tests.UnitTests/Umbraco.Infrastructure}/Migrations/Stubs/SixZeroMigration2.cs (100%) rename src/{Umbraco.Tests/Cache => Umbraco.Tests.UnitTests/Umbraco.PublishedCache.NuCache}/SnapDictionaryTests.cs (99%) delete mode 100644 src/Umbraco.Tests/Migrations/SqlScripts/SqlCe-SchemaAndData-4110.sql delete mode 100644 src/Umbraco.Tests/Migrations/SqlScripts/SqlCeTotal-480.sql delete mode 100644 src/Umbraco.Tests/Migrations/SqlScripts/SqlResources.Designer.cs delete mode 100644 src/Umbraco.Tests/Migrations/SqlScripts/SqlResources.resx delete mode 100644 src/Umbraco.Tests/Migrations/SqlScripts/SqlServerTotal-480.sql delete mode 100644 src/Umbraco.Web/Macros/PartialViewMacroPage.cs diff --git a/src/Umbraco.PublishedCache.NuCache/Umbraco.PublishedCache.NuCache.csproj b/src/Umbraco.PublishedCache.NuCache/Umbraco.PublishedCache.NuCache.csproj index edb68c6b93..9f63604b0e 100644 --- a/src/Umbraco.PublishedCache.NuCache/Umbraco.PublishedCache.NuCache.csproj +++ b/src/Umbraco.PublishedCache.NuCache/Umbraco.PublishedCache.NuCache.csproj @@ -21,12 +21,15 @@ - - <_Parameter1>Umbraco.Tests - + + <_Parameter1>Umbraco.Tests + + + <_Parameter1>Umbraco.Tests.UnitTests + <_Parameter1>Umbraco.Tests.Integration - + <_Parameter1>Umbraco.Tests.Benchmarks diff --git a/src/Umbraco.Tests/Testing/TestDatabase.cs b/src/Umbraco.Tests.Common/TestHelpers/TestDatabase.cs similarity index 99% rename from src/Umbraco.Tests/Testing/TestDatabase.cs rename to src/Umbraco.Tests.Common/TestHelpers/TestDatabase.cs index 7d58433a52..d1e5669100 100644 --- a/src/Umbraco.Tests/Testing/TestDatabase.cs +++ b/src/Umbraco.Tests.Common/TestHelpers/TestDatabase.cs @@ -11,7 +11,6 @@ using NPoco.DatabaseTypes; using NPoco.Linq; using Umbraco.Core.Persistence; using Umbraco.Core.Persistence.SqlSyntax; -using Umbraco.Persistance.SqlCe; namespace Umbraco.Tests.Testing { @@ -33,8 +32,8 @@ namespace Umbraco.Tests.Testing /// public TestDatabase(DatabaseType databaseType = null, ISqlSyntaxProvider syntaxProvider = null) { - DatabaseType = databaseType ?? new SqlServerCEDatabaseType(); - SqlContext = new SqlContext(syntaxProvider ?? new SqlCeSyntaxProvider(), DatabaseType, Mock.Of()); + DatabaseType = databaseType ?? new SqlServerDatabaseType(); + SqlContext = new SqlContext(syntaxProvider ?? new SqlServerSyntaxProvider(), DatabaseType, Mock.Of()); } /// diff --git a/src/Umbraco.Tests/Migrations/AdvancedMigrationTests.cs b/src/Umbraco.Tests.Integration/Umbraco.Infrastructure/Migrations/AdvancedMigrationTests.cs similarity index 97% rename from src/Umbraco.Tests/Migrations/AdvancedMigrationTests.cs rename to src/Umbraco.Tests.Integration/Umbraco.Infrastructure/Migrations/AdvancedMigrationTests.cs index 474528a8ec..ac502ddf80 100644 --- a/src/Umbraco.Tests/Migrations/AdvancedMigrationTests.cs +++ b/src/Umbraco.Tests.Integration/Umbraco.Infrastructure/Migrations/AdvancedMigrationTests.cs @@ -5,6 +5,7 @@ using Microsoft.Extensions.Logging.Abstractions; using Moq; using NUnit.Framework; using Microsoft.Extensions.Logging; +using Umbraco.Core.Configuration; using Umbraco.Core.Migrations; using Umbraco.Core.Migrations.Install; using Umbraco.Core.Migrations.Upgrade; @@ -12,6 +13,7 @@ using Umbraco.Core.Persistence.DatabaseModelDefinitions; using Umbraco.Core.Persistence.Dtos; using Umbraco.Core.Services; using Umbraco.Tests.Common.Builders; +using Umbraco.Tests.Integration.Testing; using Umbraco.Tests.TestHelpers; using Umbraco.Tests.Testing; @@ -19,10 +21,12 @@ namespace Umbraco.Tests.Migrations { [TestFixture] [UmbracoTest(Database = UmbracoTestOptions.Database.NewEmptyPerTest)] - public class AdvancedMigrationTests : TestWithDatabaseBase + public class AdvancedMigrationTests : UmbracoIntegrationTest { private ILoggerFactory _loggerFactory = NullLoggerFactory.Instance; + private IUmbracoVersion UmbracoVersion => GetRequiredService(); + [Test] public void CreateTableOfTDto() { diff --git a/src/Umbraco.Tests/Services/RedirectUrlServiceTests.cs b/src/Umbraco.Tests.Integration/Umbraco.Infrastructure/Services/RedirectUrlServiceTests.cs similarity index 55% rename from src/Umbraco.Tests/Services/RedirectUrlServiceTests.cs rename to src/Umbraco.Tests.Integration/Umbraco.Infrastructure/Services/RedirectUrlServiceTests.cs index 8f38bd67eb..89cde051e3 100644 --- a/src/Umbraco.Tests/Services/RedirectUrlServiceTests.cs +++ b/src/Umbraco.Tests.Integration/Umbraco.Infrastructure/Services/RedirectUrlServiceTests.cs @@ -1,81 +1,72 @@ -using System; -using System.Linq; +using System.Linq; using System.Threading; using Microsoft.Extensions.Logging; using Moq; using NUnit.Framework; using Umbraco.Core.Cache; -using Umbraco.Core.Logging; using Umbraco.Core.Models; - -using Umbraco.Core.Persistence.Repositories; using Umbraco.Core.Persistence.Repositories.Implement; using Umbraco.Core.Scoping; +using Umbraco.Core.Services; +using Umbraco.Tests.Integration.Testing; using Umbraco.Tests.Testing; -namespace Umbraco.Tests.Services +namespace Umbraco.Tests.Integration.Umbraco.Infrastructure.Services { [TestFixture] [Apartment(ApartmentState.STA)] [UmbracoTest(Database = UmbracoTestOptions.Database.NewSchemaPerTest)] - public class RedirectUrlServiceTests : TestWithSomeContentBase + public class RedirectUrlServiceTests : UmbracoIntegrationTestWithContent { private IContent _testPage; private IContent _altTestPage; - private string _url = "blah"; - private string _cultureA = "en"; - private string _cultureB = "de"; + private const string Url = "blah"; + private const string CultureA = "en"; + private const string CultureB = "de"; + + private IRedirectUrlService RedirectUrlService => GetRequiredService(); + public override void CreateTestData() { base.CreateTestData(); - using (var scope = ScopeProvider.CreateScope()) + using (IScope scope = ScopeProvider.CreateScope()) { var repository = new RedirectUrlRepository((IScopeAccessor)ScopeProvider, AppCaches.Disabled, Mock.Of>()); - var rootContent = ServiceContext.ContentService.GetRootContent().FirstOrDefault(); - var subPages = ServiceContext.ContentService.GetPagedChildren(rootContent.Id, 0, 2, out _).ToList(); + IContent rootContent = ContentService.GetRootContent().First(); + var subPages = ContentService.GetPagedChildren(rootContent.Id, 0, 2, out _).ToList(); _testPage = subPages[0]; _altTestPage = subPages[1]; repository.Save(new RedirectUrl { ContentKey = _testPage.Key, - Url = _url, - Culture = _cultureA + Url = Url, + Culture = CultureA }); repository.Save(new RedirectUrl { ContentKey = _altTestPage.Key, - Url = _url, - Culture = _cultureB + Url = Url, + Culture = CultureB }); scope.Complete(); } } - [TearDown] - public override void TearDown() - { - base.TearDown(); - } [Test] public void Can_Get_Most_Recent_RedirectUrl() { - var redirectUrlService = ServiceContext.RedirectUrlService; - var redirect = redirectUrlService.GetMostRecentRedirectUrl(_url); + IRedirectUrl redirect = RedirectUrlService.GetMostRecentRedirectUrl(Url); Assert.AreEqual(redirect.ContentId, _altTestPage.Id); - } [Test] public void Can_Get_Most_Recent_RedirectUrl_With_Culture() { - var redirectUrlService = ServiceContext.RedirectUrlService; - var redirect = redirectUrlService.GetMostRecentRedirectUrl(_url, _cultureA); + IRedirectUrl redirect = RedirectUrlService.GetMostRecentRedirectUrl(Url, CultureA); Assert.AreEqual(redirect.ContentId, _testPage.Id); - } - } } diff --git a/src/Umbraco.Tests/Cache/DefaultCachePolicyTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Cache/DefaultCachePolicyTests.cs similarity index 91% rename from src/Umbraco.Tests/Cache/DefaultCachePolicyTests.cs rename to src/Umbraco.Tests.UnitTests/Umbraco.Core/Cache/DefaultCachePolicyTests.cs index 74aba2b824..a8592356e9 100644 --- a/src/Umbraco.Tests/Cache/DefaultCachePolicyTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Cache/DefaultCachePolicyTests.cs @@ -1,13 +1,12 @@ using System; using System.Collections.Generic; -using System.Web.Caching; using Moq; using NUnit.Framework; using Umbraco.Core.Cache; using Umbraco.Core.Models; using Umbraco.Core.Scoping; -namespace Umbraco.Tests.Cache +namespace Umbraco.Tests.UnitTests.Umbraco.Core.Cache { [TestFixture] public class DefaultCachePolicyTests @@ -37,7 +36,7 @@ namespace Umbraco.Tests.Cache var defaultPolicy = new DefaultRepositoryCachePolicy(cache.Object, DefaultAccessor, new RepositoryCachePolicyOptions()); - var unused = defaultPolicy.Get(1, id => new AuditItem(1, AuditType.Copy, 123, "test", "blah"), o => null); + AuditItem unused = defaultPolicy.Get(1, id => new AuditItem(1, AuditType.Copy, 123, "test", "blah"), o => null); Assert.IsTrue(isCached); } @@ -49,7 +48,7 @@ namespace Umbraco.Tests.Cache var defaultPolicy = new DefaultRepositoryCachePolicy(cache.Object, DefaultAccessor, new RepositoryCachePolicyOptions()); - var found = defaultPolicy.Get(1, id => null, ids => null); + AuditItem found = defaultPolicy.Get(1, id => null, ids => null); Assert.IsNotNull(found); } @@ -67,7 +66,7 @@ namespace Umbraco.Tests.Cache var defaultPolicy = new DefaultRepositoryCachePolicy(cache.Object, DefaultAccessor, new RepositoryCachePolicyOptions()); - var unused = defaultPolicy.GetAll(new object[] {}, ids => new[] + AuditItem[] unused = defaultPolicy.GetAll(new object[] {}, ids => new[] { new AuditItem(1, AuditType.Copy, 123, "test", "blah"), new AuditItem(2, AuditType.Copy, 123, "test", "blah2") @@ -88,7 +87,7 @@ namespace Umbraco.Tests.Cache var defaultPolicy = new DefaultRepositoryCachePolicy(cache.Object, DefaultAccessor, new RepositoryCachePolicyOptions()); - var found = defaultPolicy.GetAll(new object[] {}, ids => new[] { (AuditItem)null }); + AuditItem[] found = defaultPolicy.GetAll(new object[] {}, ids => new[] { (AuditItem)null }); Assert.AreEqual(2, found.Length); } diff --git a/src/Umbraco.Tests/Cache/FullDataSetCachePolicyTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Cache/FullDataSetCachePolicyTests.cs similarity index 99% rename from src/Umbraco.Tests/Cache/FullDataSetCachePolicyTests.cs rename to src/Umbraco.Tests.UnitTests/Umbraco.Core/Cache/FullDataSetCachePolicyTests.cs index 027f6d2d69..e904f9104e 100644 --- a/src/Umbraco.Tests/Cache/FullDataSetCachePolicyTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Cache/FullDataSetCachePolicyTests.cs @@ -2,7 +2,6 @@ using System.Collections; using System.Collections.Generic; using System.Linq; -using System.Web.Caching; using Moq; using NUnit.Framework; using Umbraco.Core.Cache; @@ -10,7 +9,7 @@ using Umbraco.Core.Collections; using Umbraco.Core.Models; using Umbraco.Core.Scoping; -namespace Umbraco.Tests.Cache +namespace Umbraco.Tests.UnitTests.Umbraco.Core.Cache { [TestFixture] public class FullDataSetCachePolicyTests diff --git a/src/Umbraco.Tests/Cache/RefresherTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Cache/RefresherTests.cs similarity index 98% rename from src/Umbraco.Tests/Cache/RefresherTests.cs rename to src/Umbraco.Tests.UnitTests/Umbraco.Core/Cache/RefresherTests.cs index eb8580c9e2..59d2f010d2 100644 --- a/src/Umbraco.Tests/Cache/RefresherTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Cache/RefresherTests.cs @@ -4,7 +4,7 @@ using NUnit.Framework; using Umbraco.Core.Services.Changes; using Umbraco.Web.Cache; -namespace Umbraco.Tests.Cache +namespace Umbraco.Tests.UnitTests.Umbraco.Core.Cache { [TestFixture] public class RefreshersTests diff --git a/src/Umbraco.Tests/Cache/SingleItemsOnlyCachePolicyTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Cache/SingleItemsOnlyCachePolicyTests.cs similarity index 97% rename from src/Umbraco.Tests/Cache/SingleItemsOnlyCachePolicyTests.cs rename to src/Umbraco.Tests.UnitTests/Umbraco.Core/Cache/SingleItemsOnlyCachePolicyTests.cs index 335335e391..323b83699c 100644 --- a/src/Umbraco.Tests/Cache/SingleItemsOnlyCachePolicyTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Cache/SingleItemsOnlyCachePolicyTests.cs @@ -1,13 +1,12 @@ using System; using System.Collections.Generic; -using System.Web.Caching; using Moq; using NUnit.Framework; using Umbraco.Core.Cache; using Umbraco.Core.Models; using Umbraco.Core.Scoping; -namespace Umbraco.Tests.Cache +namespace Umbraco.Tests.UnitTests.Umbraco.Core.Cache { [TestFixture] public class SingleItemsOnlyCachePolicyTests diff --git a/src/Umbraco.Tests/Published/ConvertersTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/PropertyEditors/ConvertersTests.cs similarity index 62% rename from src/Umbraco.Tests/Published/ConvertersTests.cs rename to src/Umbraco.Tests.UnitTests/Umbraco.Core/PropertyEditors/ConvertersTests.cs index 840ec58f13..6db561dfe9 100644 --- a/src/Umbraco.Tests/Published/ConvertersTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Core/PropertyEditors/ConvertersTests.cs @@ -14,9 +14,9 @@ using Umbraco.Core.PropertyEditors; using Umbraco.Core.Serialization; using Umbraco.Core.Services; using Umbraco.Core.Strings; -using Umbraco.Tests.PublishedContent; +using Umbraco.Tests.Common.PublishedContent; using Umbraco.Tests.TestHelpers; -using Umbraco.Web; +using Umbraco.Tests.UnitTests.TestHelpers; using Umbraco.Web.PublishedCache; namespace Umbraco.Tests.Published @@ -24,13 +24,10 @@ namespace Umbraco.Tests.Published [TestFixture] public class ConvertersTests { - #region SimpleConverter3 - [Test] public void SimpleConverter3Test() { - // Current.Reset(); - var register = TestHelper.GetRegister(); + var register = new ServiceCollection(); var composition = new UmbracoBuilder(register, Mock.Of(), TestHelper.GetMockedTypeLoader()); @@ -38,37 +35,41 @@ namespace Umbraco.Tests.Published .Append() .Append(); - IPublishedModelFactory factory = new PublishedModelFactory(new[] - { - typeof (PublishedSnapshotTestObjects.TestElementModel1), typeof (PublishedSnapshotTestObjects.TestElementModel2), - typeof (PublishedSnapshotTestObjects.TestContentModel1), typeof (PublishedSnapshotTestObjects.TestContentModel2), - }, Mock.Of()); + IPublishedModelFactory factory = new PublishedModelFactory( + new[] + { + typeof(PublishedSnapshotTestObjects.TestElementModel1), + typeof(PublishedSnapshotTestObjects.TestElementModel2), + typeof(PublishedSnapshotTestObjects.TestContentModel1), + typeof(PublishedSnapshotTestObjects.TestContentModel2) + }, Mock.Of()); register.AddTransient(f => factory); - var cacheMock = new Mock(); var cacheContent = new Dictionary(); - cacheMock.Setup(x => x.GetById(It.IsAny())).Returns(id => cacheContent.TryGetValue(id, out IPublishedContent content) ? content : null); + cacheMock.Setup(x => x.GetById(It.IsAny())).Returns(id => + cacheContent.TryGetValue(id, out IPublishedContent content) ? content : null); var publishedSnapshotMock = new Mock(); publishedSnapshotMock.Setup(x => x.Content).Returns(cacheMock.Object); var publishedSnapshotAccessorMock = new Mock(); publishedSnapshotAccessorMock.Setup(x => x.PublishedSnapshot).Returns(publishedSnapshotMock.Object); register.AddTransient(f => publishedSnapshotAccessorMock.Object); - var registerFactory = composition.CreateServiceProvider(); - var converters = registerFactory.GetRequiredService(); + IServiceProvider registerFactory = composition.CreateServiceProvider(); + PropertyValueConverterCollection converters = + registerFactory.GetRequiredService(); var serializer = new ConfigurationEditorJsonSerializer(); var dataTypeServiceMock = new Mock(); var dataType1 = new DataType(new VoidEditor(NullLoggerFactory.Instance, dataTypeServiceMock.Object, - Mock.Of(), Mock.Of(), Mock.Of()), serializer) - { Id = 1 }; + Mock.Of(), Mock.Of(), Mock.Of()), + serializer) { Id = 1 }; var dataType2 = new DataType(new VoidEditor("2", NullLoggerFactory.Instance, Mock.Of(), - Mock.Of(), Mock.Of(), Mock.Of()), serializer) - { Id = 2 }; + Mock.Of(), Mock.Of(), Mock.Of()), + serializer) { Id = 2 }; - dataTypeServiceMock.Setup(x => x.GetAll()).Returns(new []{dataType1, dataType2 }); + dataTypeServiceMock.Setup(x => x.GetAll()).Returns(new[] { dataType1, dataType2 }); var contentTypeFactory = new PublishedContentTypeFactory(factory, converters, dataTypeServiceMock.Object); @@ -77,52 +78,69 @@ namespace Umbraco.Tests.Published yield return contentTypeFactory.CreatePropertyType(contentType, "prop" + i, i); } - var elementType1 = contentTypeFactory.CreateContentType(Guid.NewGuid(), 1000, "element1", t => CreatePropertyTypes(t, 1)); - var elementType2 = contentTypeFactory.CreateContentType(Guid.NewGuid(), 1001, "element2", t => CreatePropertyTypes(t, 2)); - var contentType1 = contentTypeFactory.CreateContentType(Guid.NewGuid(), 1002, "content1", t => CreatePropertyTypes(t, 1)); - var contentType2 = contentTypeFactory.CreateContentType(Guid.NewGuid(), 1003, "content2", t => CreatePropertyTypes(t, 2)); + IPublishedContentType elementType1 = + contentTypeFactory.CreateContentType(Guid.NewGuid(), 1000, "element1", t => CreatePropertyTypes(t, 1)); + IPublishedContentType elementType2 = + contentTypeFactory.CreateContentType(Guid.NewGuid(), 1001, "element2", t => CreatePropertyTypes(t, 2)); + IPublishedContentType contentType1 = + contentTypeFactory.CreateContentType(Guid.NewGuid(), 1002, "content1", t => CreatePropertyTypes(t, 1)); + IPublishedContentType contentType2 = + contentTypeFactory.CreateContentType(Guid.NewGuid(), 1003, "content2", t => CreatePropertyTypes(t, 2)); - var element1 = new PublishedElement(elementType1, Guid.NewGuid(), new Dictionary { { "prop1", "val1" } }, false); - var element2 = new PublishedElement(elementType2, Guid.NewGuid(), new Dictionary { { "prop2", "1003" } }, false); + var element1 = new PublishedElement(elementType1, Guid.NewGuid(), + new Dictionary { { "prop1", "val1" } }, false); + var element2 = new PublishedElement(elementType2, Guid.NewGuid(), + new Dictionary { { "prop2", "1003" } }, false); var cnt1 = new SolidPublishedContent(contentType1) { Id = 1003, - Properties = new[] { new SolidPublishedProperty { Alias = "prop1", SolidHasValue = true, SolidValue = "val1" } } + Properties = new[] + { + new SolidPublishedProperty { Alias = "prop1", SolidHasValue = true, SolidValue = "val1" } + } }; var cnt2 = new SolidPublishedContent(contentType1) { Id = 1004, - Properties = new[] { new SolidPublishedProperty { Alias = "prop2", SolidHasValue = true, SolidValue = "1003" } } + Properties = new[] + { + new SolidPublishedProperty { Alias = "prop2", SolidHasValue = true, SolidValue = "1003" } + } }; - var publishedModelFactory = registerFactory.GetRequiredService(); + IPublishedModelFactory publishedModelFactory = registerFactory.GetRequiredService(); cacheContent[cnt1.Id] = cnt1.CreateModel(publishedModelFactory); cacheContent[cnt2.Id] = cnt2.CreateModel(publishedModelFactory); // can get the actual property Clr type // ie ModelType gets properly mapped by IPublishedContentModelFactory // must test ModelClrType with special equals 'cos they are not ref-equals - Assert.IsTrue(ModelType.Equals(typeof(IEnumerable<>).MakeGenericType(ModelType.For("content1")), contentType2.GetPropertyType("prop2").ModelClrType)); - Assert.AreEqual(typeof(IEnumerable), contentType2.GetPropertyType("prop2").ClrType); + Assert.IsTrue(ModelType.Equals(typeof(IEnumerable<>).MakeGenericType(ModelType.For("content1")), + contentType2.GetPropertyType("prop2").ModelClrType)); + Assert.AreEqual(typeof(IEnumerable), + contentType2.GetPropertyType("prop2").ClrType); // can create a model for an element - var model1 = factory.CreateModel(element1); + IPublishedElement model1 = factory.CreateModel(element1); Assert.IsInstanceOf(model1); Assert.AreEqual("val1", ((PublishedSnapshotTestObjects.TestElementModel1)model1).Prop1); // can create a model for a published content - var model2 = factory.CreateModel(element2); + IPublishedElement model2 = factory.CreateModel(element2); Assert.IsInstanceOf(model2); var mmodel2 = (PublishedSnapshotTestObjects.TestElementModel2)model2; // and get direct property - Assert.IsInstanceOf(model2.Value(Mock.Of(), "prop2")); - Assert.AreEqual(1, ((PublishedSnapshotTestObjects.TestContentModel1[])model2.Value(Mock.Of(), "prop2")).Length); + Assert.IsInstanceOf( + model2.Value(Mock.Of(), "prop2")); + Assert.AreEqual(1, + ((PublishedSnapshotTestObjects.TestContentModel1[])model2.Value(Mock.Of(), + "prop2")).Length); // and get model property Assert.IsInstanceOf>(mmodel2.Prop2); Assert.IsInstanceOf(mmodel2.Prop2); - var mmodel1 = mmodel2.Prop2.First(); + PublishedSnapshotTestObjects.TestContentModel1 mmodel1 = mmodel2.Prop2.First(); // and we get what we want Assert.AreSame(cacheContent[mmodel1.Id], mmodel1); @@ -144,10 +162,8 @@ namespace Umbraco.Tests.Published { private readonly IPublishedSnapshotAccessor _publishedSnapshotAccessor; - public SimpleConverter3B(IPublishedSnapshotAccessor publishedSnapshotAccessor) - { + public SimpleConverter3B(IPublishedSnapshotAccessor publishedSnapshotAccessor) => _publishedSnapshotAccessor = publishedSnapshotAccessor; - } public override bool IsConverter(IPublishedPropertyType propertyType) => propertyType.EditorAlias == "Umbraco.Void.2"; @@ -158,18 +174,18 @@ namespace Umbraco.Tests.Published public override PropertyCacheLevel GetPropertyCacheLevel(IPublishedPropertyType propertyType) => PropertyCacheLevel.Elements; - public override object ConvertSourceToIntermediate(IPublishedElement owner, IPublishedPropertyType propertyType, object source, bool preview) + public override object ConvertSourceToIntermediate(IPublishedElement owner, + IPublishedPropertyType propertyType, object source, bool preview) { var s = source as string; return s?.Split(',').Select(int.Parse).ToArray() ?? Array.Empty(); } - public override object ConvertIntermediateToObject(IPublishedElement owner, IPublishedPropertyType propertyType, PropertyCacheLevel referenceCacheLevel, object inter, bool preview) - { - return ((int[])inter).Select(x => (PublishedSnapshotTestObjects.TestContentModel1)_publishedSnapshotAccessor.PublishedSnapshot.Content.GetById(x)).ToArray(); - } + public override object ConvertIntermediateToObject(IPublishedElement owner, + IPublishedPropertyType propertyType, PropertyCacheLevel referenceCacheLevel, object inter, + bool preview) => ((int[])inter).Select(x => + (PublishedSnapshotTestObjects.TestContentModel1)_publishedSnapshotAccessor.PublishedSnapshot.Content + .GetById(x)).ToArray(); } - - #endregion } } diff --git a/src/Umbraco.Tests/Migrations/AlterMigrationTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Migrations/AlterMigrationTests.cs similarity index 61% rename from src/Umbraco.Tests/Migrations/AlterMigrationTests.cs rename to src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Migrations/AlterMigrationTests.cs index 2d8dd7d18e..23ee3e143a 100644 --- a/src/Umbraco.Tests/Migrations/AlterMigrationTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Migrations/AlterMigrationTests.cs @@ -1,39 +1,20 @@ using System; using System.Diagnostics; -using System.Data.Common; using System.Linq; using Microsoft.Extensions.Logging; using Moq; -using NPoco; using NUnit.Framework; -using Umbraco.Core; using Umbraco.Core.Migrations; -using Umbraco.Core.Persistence; -using Umbraco.Core.Persistence.SqlSyntax; -using Umbraco.Persistance.SqlCe; using Umbraco.Tests.Migrations.Stubs; -using Umbraco.Tests.TestHelpers; using Umbraco.Tests.Testing; -namespace Umbraco.Tests.Migrations +namespace Umbraco.Tests.UnitTests.Umbraco.Infrastructure.Migrations { [TestFixture] public class AlterMigrationTests { - private ILogger _logger; - private ISqlSyntaxProvider _sqlSyntax; - private IUmbracoDatabase _database; + private readonly ILogger _logger = Mock.Of>(); - [SetUp] - public void Setup() - { - _logger = Mock.Of>(); - _sqlSyntax = new SqlCeSyntaxProvider(); - - var dbProviderFactory = DbProviderFactories.GetFactory(Constants.DbProviderNames.SqlServer); - var sqlContext = new SqlContext(_sqlSyntax, DatabaseType.SqlServer2008, Mock.Of()); - _database = new UmbracoDatabase("cstr", sqlContext, dbProviderFactory, Mock.Of>(), TestHelper.BulkSqlInsertProvider); - } [Test] public void Drop_Foreign_Key() @@ -46,13 +27,15 @@ namespace Umbraco.Tests.Migrations // Act stub.Migrate(); - foreach (var op in database.Operations) + foreach (TestDatabase.Operation op in database.Operations) + { Console.WriteLine("{0}\r\n\t{1}", op.Text, op.Sql); + } // Assert Assert.That(database.Operations.Count, Is.EqualTo(1)); - Assert.That(database.Operations[0].Sql, Is.EqualTo("ALTER TABLE [umbracoUser2app] DROP CONSTRAINT [FK_umbracoUser2app_umbracoUser_id]")); - + Assert.That(database.Operations[0].Sql, + Is.EqualTo("ALTER TABLE [umbracoUser2app] DROP CONSTRAINT [FK_umbracoUser2app_umbracoUser_id]")); } [Test] @@ -64,23 +47,24 @@ namespace Umbraco.Tests.Migrations migration.Migrate(); - foreach (var op in database.Operations) + foreach (TestDatabase.Operation op in database.Operations) + { Console.WriteLine("{0}\r\n\t{1}", op.Text, op.Sql); + } Assert.That(database.Operations.Count, Is.EqualTo(1)); - Assert.That(database.Operations[0].Sql, Is.EqualTo("ALTER TABLE [bar] ADD [foo] UniqueIdentifier NOT NULL")); + Assert.That(database.Operations[0].Sql, + Is.EqualTo("ALTER TABLE [bar] ADD [foo] UniqueIdentifier NOT NULL")); } public class CreateColumnMigration : MigrationBase { public CreateColumnMigration(IMigrationContext context) : base(context) - { } - - public override void Migrate() { - Alter.Table("bar").AddColumn("foo").AsGuid().Do(); } + + public override void Migrate() => Alter.Table("bar").AddColumn("foo").AsGuid().Do(); } [Test] @@ -92,28 +76,30 @@ namespace Umbraco.Tests.Migrations migration.Migrate(); - foreach (var op in database.Operations) + foreach (TestDatabase.Operation op in database.Operations) + { Console.WriteLine("{0}\r\n\t{1}", op.Text, op.Sql); + } Assert.That(database.Operations.Count, Is.EqualTo(1)); - Assert.That(database.Operations[0].Sql, Is.EqualTo("ALTER TABLE [bar] ALTER COLUMN [foo] UniqueIdentifier NOT NULL")); + Assert.That(database.Operations[0].Sql, + Is.EqualTo("ALTER TABLE [bar] ALTER COLUMN [foo] UniqueIdentifier NOT NULL")); } public class AlterColumnMigration : MigrationBase { public AlterColumnMigration(IMigrationContext context) : base(context) - { } - - public override void Migrate() { + } + + public override void Migrate() => // bad/good syntax... //Alter.Column("foo").OnTable("bar").AsGuid().NotNullable(); Alter.Table("bar").AlterColumn("foo").AsGuid().NotNullable().Do(); - } } - [NUnit.Framework.Ignore("this doesn't actually test anything")] + [Ignore("this doesn't actually test anything")] [Test] public void Can_Get_Up_Migration_From_MigrationStub() { @@ -131,7 +117,7 @@ namespace Umbraco.Tests.Migrations //Console output Debug.Print("Number of expressions in context: {0}", database.Operations.Count); Debug.Print(""); - foreach (var expression in database.Operations) + foreach (TestDatabase.Operation expression in database.Operations) { Debug.Print(expression.ToString()); } diff --git a/src/Umbraco.Tests/Migrations/MigrationPlanTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Migrations/MigrationPlanTests.cs similarity index 83% rename from src/Umbraco.Tests/Migrations/MigrationPlanTests.cs rename to src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Migrations/MigrationPlanTests.cs index 0a8c6cfb3f..0511ee6290 100644 --- a/src/Umbraco.Tests/Migrations/MigrationPlanTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Migrations/MigrationPlanTests.cs @@ -10,14 +10,13 @@ using Umbraco.Core; using Umbraco.Core.Migrations; using Umbraco.Core.Migrations.Upgrade; using Umbraco.Core.Persistence; +using Umbraco.Core.Persistence.SqlSyntax; using Umbraco.Core.Scoping; using Umbraco.Core.Services; -using Umbraco.Persistance.SqlCe; -using Umbraco.Tests.Common.Builders; using Umbraco.Tests.TestHelpers; using Umbraco.Tests.Testing; -namespace Umbraco.Tests.Migrations +namespace Umbraco.Tests.UnitTests.Umbraco.Infrastructure.Migrations { [TestFixture] public class MigrationPlanTests @@ -25,18 +24,19 @@ namespace Umbraco.Tests.Migrations [Test] public void CanExecute() { - var loggerFactory = NullLoggerFactory.Instance; + NullLoggerFactory loggerFactory = NullLoggerFactory.Instance; var database = new TestDatabase(); - var scope = Mock.Of(); + IScope scope = Mock.Of(); Mock.Get(scope) .Setup(x => x.Database) .Returns(database); - var sqlContext = new SqlContext(new SqlCeSyntaxProvider(), DatabaseType.SQLCe, Mock.Of()); + var sqlContext = new SqlContext(new SqlServerSyntaxProvider(), DatabaseType.SQLCe, + Mock.Of()); var scopeProvider = new MigrationTests.TestScopeProvider(scope) { SqlContext = sqlContext }; - var migrationBuilder = Mock.Of(); + IMigrationBuilder migrationBuilder = Mock.Of(); Mock.Get(migrationBuilder) .Setup(x => x.Build(It.IsAny(), It.IsAny())) .Returns((t, c) => @@ -52,22 +52,24 @@ namespace Umbraco.Tests.Migrations } }); - var plan = new MigrationPlan("default") + MigrationPlan plan = new MigrationPlan("default") .From(string.Empty) .To("{4A9A1A8F-0DA1-4BCF-AD06-C19D79152E35}") .To("VERSION.33"); - var kvs = Mock.Of(); - Mock.Get(kvs).Setup(x => x.GetValue(It.IsAny())).Returns(k => k == "Umbraco.Tests.MigrationPlan" ? string.Empty : null); + IKeyValueService kvs = Mock.Of(); + Mock.Get(kvs).Setup(x => x.GetValue(It.IsAny())) + .Returns(k => k == "Umbraco.Tests.MigrationPlan" ? string.Empty : null); string state; - using (var s = scopeProvider.CreateScope()) + using (IScope s = scopeProvider.CreateScope()) { // read current state var sourceState = kvs.GetValue("Umbraco.Tests.MigrationPlan") ?? string.Empty; // execute plan - state = plan.Execute(s, sourceState, migrationBuilder, loggerFactory.CreateLogger(), loggerFactory); + state = plan.Execute(s, sourceState, migrationBuilder, loggerFactory.CreateLogger(), + loggerFactory); // save new state kvs.SetValue("Umbraco.Tests.MigrationPlan", sourceState, state); @@ -178,11 +180,11 @@ namespace Umbraco.Tests.Migrations .From(string.Empty) .To("aaa") .Merge() - .To("bbb") - .To("ccc") + .To("bbb") + .To("ccc") .With() - .To("ddd") - .To("eee") + .To("ddd") + .To("eee") .As("fff") .To("ggg"); @@ -198,8 +200,12 @@ namespace Umbraco.Tests.Migrations { Assert.AreEqual(expected.Length, states.Count, string.Join(", ", states)); for (var i = 0; i < expected.Length; i++) + { if (expected[i] != "*") + { Assert.AreEqual(expected[i], states[i], "at:" + i); + } + } } private void WritePlanToConsole(MigrationPlan plan) @@ -207,21 +213,23 @@ namespace Umbraco.Tests.Migrations var final = plan.Transitions.First(x => x.Value == null).Key; Console.WriteLine("plan \"{0}\" to final state \"{1}\":", plan.Name, final); - foreach (var (_, transition) in plan.Transitions) + foreach ((var _, MigrationPlan.Transition transition) in plan.Transitions) + { if (transition != null) + { Console.WriteLine(transition); + } + } } public class DeleteRedirectUrlTable : MigrationBase { public DeleteRedirectUrlTable(IMigrationContext context) : base(context) - { } - - public override void Migrate() { - Delete.Table("umbracoRedirectUrl").Do(); } + + public override void Migrate() => Delete.Table("umbracoRedirectUrl").Do(); } } } diff --git a/src/Umbraco.Tests/Migrations/MigrationTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Migrations/MigrationTests.cs similarity index 55% rename from src/Umbraco.Tests/Migrations/MigrationTests.cs rename to src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Migrations/MigrationTests.cs index 46d9b04b1b..34093d0bce 100644 --- a/src/Umbraco.Tests/Migrations/MigrationTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Migrations/MigrationTests.cs @@ -1,18 +1,14 @@ using System; -using System.Collections.Generic; using System.Data; using Microsoft.Extensions.Logging; using Moq; using NUnit.Framework; -using Semver; using Umbraco.Core.Events; using Umbraco.Core.Migrations; -using Umbraco.Core.Migrations.Upgrade; using Umbraco.Core.Persistence; using Umbraco.Core.Scoping; -using Umbraco.Core.Services; -namespace Umbraco.Tests.Migrations +namespace Umbraco.Tests.UnitTests.Umbraco.Infrastructure.Migrations { [TestFixture] public class MigrationTests @@ -21,35 +17,30 @@ namespace Umbraco.Tests.Migrations { private readonly IScope _scope; - public TestScopeProvider(IScope scope) - { - _scope = scope; - } + public TestScopeProvider(IScope scope) => _scope = scope; - public IScope CreateScope(IsolationLevel isolationLevel = IsolationLevel.Unspecified, RepositoryCacheMode repositoryCacheMode = RepositoryCacheMode.Unspecified, IEventDispatcher eventDispatcher = null, bool? scopeFileSystems = null, bool callContext = false, bool autoComplete = false) - { - return _scope; - } + public IScope CreateScope( + IsolationLevel isolationLevel = IsolationLevel.Unspecified, + RepositoryCacheMode repositoryCacheMode = RepositoryCacheMode.Unspecified, + IEventDispatcher eventDispatcher = null, + bool? scopeFileSystems = null, + bool callContext = false, + bool autoComplete = false) => _scope; - public IScope CreateDetachedScope(IsolationLevel isolationLevel = IsolationLevel.Unspecified, RepositoryCacheMode repositoryCacheMode = RepositoryCacheMode.Unspecified, IEventDispatcher eventDispatcher = null, bool? scopeFileSystems = null) - { - throw new NotImplementedException(); - } + public IScope CreateDetachedScope( + IsolationLevel isolationLevel = IsolationLevel.Unspecified, + RepositoryCacheMode repositoryCacheMode = RepositoryCacheMode.Unspecified, + IEventDispatcher eventDispatcher = null, + bool? scopeFileSystems = null) => throw new NotImplementedException(); - public void AttachScope(IScope scope, bool callContext = false) - { - throw new NotImplementedException(); - } - - public IScope DetachScope() - { - throw new NotImplementedException(); - } + public void AttachScope(IScope scope, bool callContext = false) => throw new NotImplementedException(); + public IScope DetachScope() => throw new NotImplementedException(); public IScopeContext Context { get; set; } - public ISqlContext SqlContext { get; set; } + + public ISqlContext SqlContext { get; set; } #if DEBUG_SCOPES public ScopeInfo GetScopeInfo(IScope scope) @@ -63,7 +54,8 @@ namespace Umbraco.Tests.Migrations [Test] public void RunGoodMigration() { - var migrationContext = new MigrationContext(Mock.Of(), Mock.Of>()); + var migrationContext = + new MigrationContext(Mock.Of(), Mock.Of>()); IMigration migration = new GoodMigration(migrationContext); migration.Migrate(); } @@ -71,7 +63,8 @@ namespace Umbraco.Tests.Migrations [Test] public void DetectBadMigration1() { - var migrationContext = new MigrationContext(Mock.Of(), Mock.Of>()); + var migrationContext = + new MigrationContext(Mock.Of(), Mock.Of>()); IMigration migration = new BadMigration1(migrationContext); Assert.Throws(() => migration.Migrate()); } @@ -79,7 +72,8 @@ namespace Umbraco.Tests.Migrations [Test] public void DetectBadMigration2() { - var migrationContext = new MigrationContext(Mock.Of(), Mock.Of>()); + var migrationContext = + new MigrationContext(Mock.Of(), Mock.Of>()); IMigration migration = new BadMigration2(migrationContext); Assert.Throws(() => migration.Migrate()); } @@ -88,31 +82,28 @@ namespace Umbraco.Tests.Migrations { public GoodMigration(IMigrationContext context) : base(context) - { } - - public override void Migrate() { - Execute.Sql("").Do(); } + + public override void Migrate() => Execute.Sql("").Do(); } public class BadMigration1 : MigrationBase { public BadMigration1(IMigrationContext context) : base(context) - { } - - public override void Migrate() { - Alter.Table("foo"); // stop here, don't Do it } + + public override void Migrate() => Alter.Table("foo"); // stop here, don't Do it } public class BadMigration2 : MigrationBase { public BadMigration2(IMigrationContext context) : base(context) - { } + { + } public override void Migrate() { diff --git a/src/Umbraco.Tests/Migrations/PostMigrationTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Migrations/PostMigrationTests.cs similarity index 71% rename from src/Umbraco.Tests/Migrations/PostMigrationTests.cs rename to src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Migrations/PostMigrationTests.cs index ba265b3fd2..2b3e626d03 100644 --- a/src/Umbraco.Tests/Migrations/PostMigrationTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Migrations/PostMigrationTests.cs @@ -1,6 +1,6 @@ using System; -using Microsoft.Extensions.Logging.Abstractions; using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Logging.Abstractions; using Moq; using NPoco; using NUnit.Framework; @@ -10,19 +10,19 @@ using Umbraco.Core.Persistence; using Umbraco.Core.Persistence.SqlSyntax; using Umbraco.Core.Scoping; using Umbraco.Core.Services; -using Umbraco.Persistance.SqlCe; using Umbraco.Tests.Testing; -namespace Umbraco.Tests.Migrations +namespace Umbraco.Tests.UnitTests.Umbraco.Infrastructure.Migrations { [TestFixture] public class PostMigrationTests { - private static ILoggerFactory _loggerFactory = NullLoggerFactory.Instance; + private static readonly ILoggerFactory s_loggerFactory = NullLoggerFactory.Instance; + [Test] public void ExecutesPlanPostMigration() { - var builder = Mock.Of(); + IMigrationBuilder builder = Mock.Of(); Mock.Get(builder) .Setup(x => x.Build(It.IsAny(), It.IsAny())) .Returns((t, c) => @@ -39,22 +39,30 @@ namespace Umbraco.Tests.Migrations }); var database = new TestDatabase(); - var scope = Mock.Of(); + IScope scope = Mock.Of(); Mock.Get(scope) .Setup(x => x.Database) .Returns(database); - var sqlContext = new SqlContext(new SqlCeSyntaxProvider(), DatabaseType.SQLCe, Mock.Of()); + var sqlContext = new SqlContext( + new SqlServerSyntaxProvider(), + DatabaseType.SQLCe, + Mock.Of()); var scopeProvider = new MigrationTests.TestScopeProvider(scope) { SqlContext = sqlContext }; - var plan = new MigrationPlan("Test") + MigrationPlan plan = new MigrationPlan("Test") .From(string.Empty).To("done"); plan.AddPostMigration(); TestPostMigration.MigrateCount = 0; var upgrader = new Upgrader(plan); - upgrader.Execute(scopeProvider, builder, Mock.Of(), _loggerFactory.CreateLogger(), _loggerFactory); + upgrader.Execute( + scopeProvider, + builder, + Mock.Of(), + s_loggerFactory.CreateLogger(), + s_loggerFactory); Assert.AreEqual(1, TestPostMigration.MigrateCount); } @@ -62,7 +70,7 @@ namespace Umbraco.Tests.Migrations [Test] public void MigrationCanAddPostMigration() { - var builder = Mock.Of(); + IMigrationBuilder builder = Mock.Of(); Mock.Get(builder) .Setup(x => x.Build(It.IsAny(), It.IsAny())) .Returns((t, c) => @@ -81,24 +89,32 @@ namespace Umbraco.Tests.Migrations }); var database = new TestDatabase(); - var scope = Mock.Of(); + IScope scope = Mock.Of(); Mock.Get(scope) .Setup(x => x.Database) .Returns(database); - var sqlContext = new SqlContext(new SqlCeSyntaxProvider(), DatabaseType.SQLCe, Mock.Of()); + var sqlContext = new SqlContext( + new SqlServerSyntaxProvider(), + DatabaseType.SQLCe, + Mock.Of()); var scopeProvider = new MigrationTests.TestScopeProvider(scope) { SqlContext = sqlContext }; - var plan = new MigrationPlan("Test") + MigrationPlan plan = new MigrationPlan("Test") .From(string.Empty).To("done"); TestMigration.MigrateCount = 0; TestPostMigration.MigrateCount = 0; - new MigrationContext(database, _loggerFactory.CreateLogger()); + new MigrationContext(database, s_loggerFactory.CreateLogger()); var upgrader = new Upgrader(plan); - upgrader.Execute(scopeProvider, builder, Mock.Of(), _loggerFactory.CreateLogger(), _loggerFactory); + upgrader.Execute( + scopeProvider, + builder, + Mock.Of(), + s_loggerFactory.CreateLogger(), + s_loggerFactory); Assert.AreEqual(1, TestMigration.MigrateCount); Assert.AreEqual(1, TestPostMigration.MigrateCount); @@ -108,7 +124,8 @@ namespace Umbraco.Tests.Migrations { public TestMigration(IMigrationContext context) : base(context) - { } + { + } public static int MigrateCount { get; set; } @@ -124,10 +141,7 @@ namespace Umbraco.Tests.Migrations { public static int MigrateCount { get; set; } - public void Migrate() - { - MigrateCount++; - } + public void Migrate() => MigrateCount++; } } } diff --git a/src/Umbraco.Tests/Migrations/Stubs/AlterUserTableMigrationStub.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Migrations/Stubs/AlterUserTableMigrationStub.cs similarity index 100% rename from src/Umbraco.Tests/Migrations/Stubs/AlterUserTableMigrationStub.cs rename to src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Migrations/Stubs/AlterUserTableMigrationStub.cs diff --git a/src/Umbraco.Tests/Migrations/Stubs/DropForeignKeyMigrationStub.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Migrations/Stubs/DropForeignKeyMigrationStub.cs similarity index 100% rename from src/Umbraco.Tests/Migrations/Stubs/DropForeignKeyMigrationStub.cs rename to src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Migrations/Stubs/DropForeignKeyMigrationStub.cs diff --git a/src/Umbraco.Tests/Migrations/Stubs/Dummy.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Migrations/Stubs/Dummy.cs similarity index 100% rename from src/Umbraco.Tests/Migrations/Stubs/Dummy.cs rename to src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Migrations/Stubs/Dummy.cs diff --git a/src/Umbraco.Tests/Migrations/Stubs/FiveZeroMigration.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Migrations/Stubs/FiveZeroMigration.cs similarity index 100% rename from src/Umbraco.Tests/Migrations/Stubs/FiveZeroMigration.cs rename to src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Migrations/Stubs/FiveZeroMigration.cs diff --git a/src/Umbraco.Tests/Migrations/Stubs/FourElevenMigration.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Migrations/Stubs/FourElevenMigration.cs similarity index 100% rename from src/Umbraco.Tests/Migrations/Stubs/FourElevenMigration.cs rename to src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Migrations/Stubs/FourElevenMigration.cs diff --git a/src/Umbraco.Tests/Migrations/Stubs/SixZeroMigration1.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Migrations/Stubs/SixZeroMigration1.cs similarity index 100% rename from src/Umbraco.Tests/Migrations/Stubs/SixZeroMigration1.cs rename to src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Migrations/Stubs/SixZeroMigration1.cs diff --git a/src/Umbraco.Tests/Migrations/Stubs/SixZeroMigration2.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Migrations/Stubs/SixZeroMigration2.cs similarity index 100% rename from src/Umbraco.Tests/Migrations/Stubs/SixZeroMigration2.cs rename to src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Migrations/Stubs/SixZeroMigration2.cs diff --git a/src/Umbraco.Tests/Cache/SnapDictionaryTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.PublishedCache.NuCache/SnapDictionaryTests.cs similarity index 99% rename from src/Umbraco.Tests/Cache/SnapDictionaryTests.cs rename to src/Umbraco.Tests.UnitTests/Umbraco.PublishedCache.NuCache/SnapDictionaryTests.cs index 739268b451..91317848c6 100644 --- a/src/Umbraco.Tests/Cache/SnapDictionaryTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.PublishedCache.NuCache/SnapDictionaryTests.cs @@ -1,4 +1,5 @@ -using System; + +using System; using System.Linq; using System.Threading.Tasks; using Moq; @@ -6,7 +7,7 @@ using NUnit.Framework; using Umbraco.Core.Scoping; using Umbraco.Web.PublishedCache.NuCache; -namespace Umbraco.Tests.Cache +namespace Umbraco.Tests.UnitTests.Umbraco.Umbraco.PublishedCache { [TestFixture] public class SnapDictionaryTests diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Tests.UnitTests.csproj b/src/Umbraco.Tests.UnitTests/Umbraco.Tests.UnitTests.csproj index 76764d0483..1e774f4b00 100644 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Tests.UnitTests.csproj +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Tests.UnitTests.csproj @@ -8,6 +8,7 @@ + diff --git a/src/Umbraco.Tests/Migrations/SqlScripts/SqlCe-SchemaAndData-4110.sql b/src/Umbraco.Tests/Migrations/SqlScripts/SqlCe-SchemaAndData-4110.sql deleted file mode 100644 index 4aeb066f54bf983c0963f09efb9a5e1f39e468b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 422888 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�iNxuBjq(dgYeaR}OnBOkaWTz5kC7 zTg_d@^2*oz>5RB>;H`eVmG?0@dfxIGXw&2Q-zK^IQoG@hX&5@6(v_xY-%fm2$4YV2w6AYwoHA??KA5#2Gk4%Co^M<|;c&KGlDE%Omi0 zb{@@pBz}{i!|toR%kQ^(d-veGC8h58upR+p0sd6ORZ(x`S0KEF@! zFqG(p=&R$`#2CD<1rVeLFN?vY5%W zgkiYqf_~c)xa`#shVPJ!(9UFDY3l>71bv4r>_g3eNj(8~XC!P_Ax{`f%!S%eXca2p zIa72g!)tlt{d99%C4JED{=sg)z^lf8EgO(w=CNh<9(#Oj9MDR%Vi}I)wr0wjjrYqv zi0jtrz0GZK*X@e0ntb7$lPMZ4YiX5d#TBkc)hn6}sKMjb&~K9VWzXZ1V#p1#yF|zX zC}AgQiQt~Vl6UJynuLVQSgGL|FtR)cQt^gmV$cfX2%f5~k)z#<9?3M1?ZgazOykO25xZUk4=g?JjZOPVqkyM15pDcYcdlv#f7kyEee|T^ z=u@QI91dJVm%(x4ED|WHAAf)$_;wz<2aS?7$TZ0hY}zxLhxU0V+sQ*@wO_0**SQ~u z=SXy7n&&t~R{Q(;xtjSnu;nPiWQ+~D!RfidHAPb*Dt8=ssx!I&l8QSjPF_5 z_-Ex=^7m_9KdYZ_ioYxAGx72N?Bvb?!+kKE&*%XgX9RDbv%@N(vx=TAORIV94_+60 zvV#%U46z?O@wf}R?;Jj>hRzCmk9F1SgNVrwa`UHT<5`b+@5T9|0d@9{;&7XA@l1knX*G4Y*uL0Gn|J!=Go$C>u+u_mORWxQp--*L|mr;D&9Q6!n zQgh1)1EVpT@O8UjL8Tw}fsQj6x!r)Jqx94V5*ekw(SCibc85lxHRLYx78rF=%|?3D zls6qllc|z1Jx%TTxqwwOGP$nNS@YaleGZ#lb%|*0KEQ0v0w+^VMj1)Bc zrJA+LUF!#N$}YIEQXbewyq10fR$Rrm_DOzS)X-N(5YczWDMy8ZTdg&~8zUzphCFhF z$FW(YBK-AK|3gj!8Djdb)dx4oW8>$QAVr<=uI`f^pmx{!gW!F?ZOY(|_;+7#!btX2h7SbSlR~`WhTcE*gcRJz}=F^nUfen9n0;a0OG3MaU*BT-fA>CXS<@& z?Fo;o2eGi_M61Ck+o=M8Ilj?&cT)E4JN*ad>-w9YL(YXPt6}aql;1&CT5kgBz-gwT zh&KW8oR19ZuSXt|HN#+tHGz?P!po#Ht2kjQtnlNo>#)M{yC?ZggKyghPf-!}b%H0S zi*b&uJ=?RwF@7u_>yu=EpObXq#4%1ETho)azp=g7lDB(KcxQi%wK?qXkhtsO@#*K! zqPZ*$*=rtI_eTG*V32CT&Ft;Jr?F$*U|m^;$GMbIp8X|JT%#vktkR zeq#>#iVS0vO%DSr(c?$DmS^T61DTyI67OJR8OKbSJDLjlN4t@6%W%xu@|b&Mbn??- zBWGEc^J+h)p0Ocoxf^c-NoVh!-OIWPOOMepBQz0nw5O3hh=2<-;(oRk!X^qS9y%Ji zT%IV*tg*42a|M%IhgX6YY8>%Q*jmwlb8dAGsHv|@OVfJT_AE3<#u+Wd%&CUpWRK_K z7Q99>bJWl{OWm9Y8XCI1>ber|5t^x{vNC?7`PHI5GZ4%jN_@YX3(R=I>p-sdikwC%Nn?oys2({ z1vfv|JMatAiMLtxMlZ#=AQ&y-$Gg~69iuB$l$jP&sq zZ)irjrU$rp`8~D2Sk5%lDpzy$VTLCoDZN0T1#OI*scmc9Y7` zfNz>-eP?P6?lvz$v9x4M2JQqOa3okj1_z|_7?2aLg@CGSKQidG8E2S>%R;7lEX=Xl z>I021*CKYuVvy)aM*73Q>53HOJgOY~h2!A6+VdpV zWeX*=p<|27x@s-oYzHnhuHkc_wVe1aIOYq@yY{lLiZhWp=-I5TL#{RDa!Gq|W9dD& z-!7jHo`ez{aSHls_EF3JE{@vJ9HAj9XP|G}8qpr|6&|iFhq@O=5f+5G*fmPFU!x`B z%ves)7OmMnnqHqn>$bswqhVS0XxquUQi=&MsX1GmRLOG zEU~oCOLDL>pX?<+WG}f3W|wt`wfmf(#OeS}OJWazi)x9TL;F+)ME24;G20qQ9xP4t zJ&^$$bB^6YvCwKsaWKr^Po$$o$$F$+~{L#%P8t)&~}C)}5x7@N7dz z0tfCy?QHmi83(2P<PfHxoLlcQ%Dwp}y__irw2F_(7U zaakSHJy7uFb%w`fJ;UoI#<9x-<87;`w4IxBbrS7hCpCLQu0&6ne!3_nEGnMDDh*DW z4=?RmZ5&wF%^BgxZi@0v<;u&n!xJ>z*-+&Ft2O^w#XvldX|Sxi67X$ zF73Ror_hP-lXge`hZg-_bGWNWDbQ=cI0&lY(d0pe61&@XZ z6?}8I7-6^MtRcs^@UFeaGxzqr;E9H4S~45DhV7FzoNJb_B!D{C9e3tR8$vnHVFr?&(S0yt&H{p9kv4!$zqrWfBIVn#ZcD)?WrNMSS}1cH^c6e^_d3^t zglzYe-`Wz!Y)7!}F=+U$ddXE2O&Q<3TT9$7Nqb+|ciz)hVU-r_TBVQNDMXLtiQOV@7@cAvs$Q9 zAriADZemvy)^YG0pDsxHZ0Qcw=NI+fMLi#9xb%(0JX5QG&^|bv8-uTgcDEcv?uN|w zQ`z$;dVqdGYa@~G=@V8(S*eVkp$+s)&fl}Lg!=dL$s40TX+Ff0m@j!{~wnrTk zX^yXrwX5pcmOOAIi@})PyFFA}3RtiEf+`kq4G~6PMsna6w*f4?qX5vwLNMHTBR}Q$ z!-5LPHtE&2(ntT`$*mmzFNlJRZ zrEhy`i(ZHQyRsg`?jLVac>hpVZXS=O8Z3&8iA8cd-YL{OTROLMNjmks^cN?=QSpi{ zLlX0eb)FaWjca6Z&~#h+^hBSqDcGNlx>_s@=XR!5FH_qbxg9hPGHG3WIlVHLeLu)$ zqkAk3ke0-hELpL2th;%lmRF_ZM&gwb*SbaP4d-Z(;6#>KA3=M>^_DeXXU~b5p~bA* z7#Z#6yhY?0a-Bo?G}gvV&!!%6m*3kBull|46d8{zWq=Pp?v}=CX`l5uBVi7XRhFy1 zqJl26^kKu59&<$9#{0iZf|uhv_Va4oxkjmszo88cZ=j0SMGxW$UlYzf{v7R#jy}ZG*diXS+l}i@sssS*CqFKQU5)S#2HXm17#@?d(=3VS!WPxn#lMg zo&qg^&)^xj*ATQ6h`J9`oMWwUOF8ozUU}R@9HLJg0v|8d(;SC3qRsBLG-o7H0*`P4 z92V4pCX2U*)i%?kN#|uh948k0?UsFCdKyigHF&wwB=hjVnf*93uXF>uX9QbfM?{lc z&*Lhe$GVE0cv0~tEJnU_W-$BldT(C*0ahvzeL^eRPNdD?v2mZyC}xQ-hR=tL_6`Mn z#@oY_wf}7yZtZ7}+BO-s13or(9JT~Hh*}d?r?R>#bP$#uZD42IP^(yWTd7B+J$4;> z!ROsz1)wA1WO~{o$4ZOH51wPa2_B>^LLw8*mWg89B61B0HUqJ6EHLyVWA*A9*G9O` zq}d8jpy^*|w7|moWcmlrc>IitU*|3zkFYheuF)|&RxO1M%UsG)181xp`u#!w@jF=c zV{61`8|Rn?dC9kGwX1(xxR++cc)F1!fpa1u~vmQ(9=MR+z+F6 zT+b^Sw$j_idW?c6OG;r3WF7Wosj-(cHeEo(-@qfIi}R9zJ+TYs>$ZV_$H%pJu8Rh+ z#-KB3fKf0b<^wGZ5~!a9iZz_v)~2>CW$0_AA-Jz*5?9w%E$YVmpuXavmry)G(g zQx#O2We~mBRGm4;909LD@#ZUgq0k(6&G~I3J#-3``eLUwsc39T8=Ra%UN3DoUjaCW^^mHyOI9QC zi0oJ!(9T_bLt6#*m?_?=@$H!bWyZ00kgqTd8EYwZ_{N)A%5`Bc(`v}GeEJ;Yxt`zv zErTomT6Slupoi@FaGhW8%X2;9*!DGJ11i7be_3{I5Uu(%=1MYUv^0TirflQ|++q0AujLPKQPt>} z4ipl1c-QAu(sSs{T9+_B+ghgbQUV5jj?=RA4_DI%;|3$NlAnhXjd!4B2|_dt3ik<@ znF8Cksz)7Aw{=|dCD6*W99DFRSs=scpqP;U?%i6>(#b0tv6pQ@14&u|j?gO_5==lv zjH%WNncMJHEDtl*GH;u1YI$UeX8$pdFlHRSMA!J+{z`L>v~o4INY&uWG>pu$?? zIfiWO0G>wXyEjw!IK6U1aIuCA*fUG`84CcOwFV8?m_D$Q?IN|a|><9k^6wMMAN2Sw2<_{7Tu2ae2|v%t9fK_+bJNuFTTz^-e2Z65WAY@-mt zroYlUvV=!Bpqb1`&>DQmta$zh_1ok#M$op8N^AlD@Z~%TJX%H=_EnZ>UAoD7*8P|M zCO!Y6(X!f`(bG1(60!y;A%kj8t#Q)Slk`$ktVc{6Aupm`%M|0Fl$NpngPxjE081ZB z5Jn4sh2+1kPhc4?vW?nhh3EM(fBNmRAe(cx1&DM6r@siF^y`{k$2huhYv~c(lI69} zX>QAU#tj9Vf1%-!W48ahuxt31HYzyiAL9WEVTIQ+f7U2Z7yQG#d>gR;4X`s$j#mNDo|J7@M$taJWmkF@ zi`jJpulD2BSS5TsygF-qZiqAtk%l4C;FBXyQWs&R4UvW+(m<3PKYWNZIO{h=8iq(i z#Kwk5!w_kx5j$DSN__E@4af}9z#Rif;H zCn6rMiy>a+$TSf*u9a8l9WR+)$zPGhbH2in8{TwWv(C*@f$NAP9yW0yqV&#vG_#y# z%$uwpak1tc8An9wiAvTv24>~xF?;VYUuSm8*i@NQDC0{Wn=>sr>rg%sQBY?b8A*<( zanJdZh-Bfb0&nl?;20l$bj7HMr0(h-5RPhOO8(-;TD(lKZ)YxfL%s6^y9MNjC z4ae4j0&D-Ey&S16XAOTc@*H=J8AIPx7(~Ri&ilE-%28C}u+9;{1<)P5VBQ>u@eFsc z9=ygV+VOisgjSn5i=aAV#O=6^Cgni^QTH7D!`QBB{v{sa>A+>CxFP0A9K3mw6g)9$ zcUJh z&vCqSoVvnt3@SQFO_4LYmP)xAr>qz{em#LKp!UHvlpjt@bk#gHb;J-6?H3V^)%wT7 z$+Jd8ha5RN%URH79g96MXN`v(Ikq^}SVN8+y1?EUa^zk9$MNRKu}%li6)1$|eXuQ&3Qlgmc zHDf@3H$kMX)~qYt=yzO%F>rybHZJKWM|1+(HQy3nqDqL0NThqcLW4GMrV&Hy^j^n| znpMNi`ZL~-dDDZ}H@HvmKR)W#h9OkXT1dyP%Bn~F^~@7x#akUq3`!(&NbkA!({$Js zCvLuzV@p7z=9W69o1dgFTlS`Y@Zzd@{DEBCNncR2KDq37=0NP=Cdo+7!7gb zW;HKYb7fo2i%?1(rKXjd7Kw8L3t-5zKrHJ0GwtD9@$R@tIZ$uQ3Mkg6>2+~0HMR7d zC2zTd*AT1d6RWtOn#fqQPt7GKWS&*bkh)1~E{QPiXf5}SqKiZwFX;-`Sl{hE28lwl z(wj3Lw)OX{{-4v+R9X_PoW8p9k!pYMXn)GzC2W4D{RP45ZBfy>q~ODJo*mydbZ2Sw zlX^q;TgRF^*#GZ_#>9+&)-zw~DX7B{SkoLF3?JW1^s=M&<33!$4l~}fCtrW9t9c*# z_j=d6nCF(!%JgXoQOA2do}E?{*y}pxJCWmpAbXtHB5pN(E$otTJ78=2ei(4k@nOq5 ztxd<)w@EI))J{QY>tQFm;MsfP+)4Qub{;)W?2X@(#_}+8;=pTtc#WvI_p>{CJ?8z1 zrt=!>3kGcU!B*bW;W)4b=T67gAQ|ViLh|aIBCp@Z~SNX`9VMaB&*mq?R5Q^*M0B_&tWrJ{yrV%Z|s%$O@d6`tDIG$v2!~9e0=7KjYD`6*Pus6X4v5?kz2*b!jrzg$QvYDiVx0??=FS8oU=i98m;+#$V%^fN(ww zmZ(DBlbf-yYqy_fR)Nbr{_^ygxa*xl!5)2Zinl8xSFf==FWL%eK_t<< z;B$}QaPwz9gP_GsX-&Aq2x&d@Dtp43#(0yy%qgaG_{dyRSKT>-x;T|N3i3DgOU>fG za2^~$Jg9lDGt}0U#@}iD0jrq7wS-l;=YoFQ(iPZ8pF~$fR(NOG$(+$mwL#BW)=j3~ zza$I*YiAk8ogu(ELr@QVPksUXl+wADDBd$Sw^h;vZ*uOlab07)mI25pa}?1zxCOnl zaX=l>h9xv|83;D@Rk_P>v-LJ-(SCh`XOjz@Lox-UIW3dQ8JT;ck`;Xg#NZZd-8V^t zv8QpCPh@(0N`jyCu8e4a;FZ7+dc$%f4aoEkab<~Z}cCsIAb-Q03SdX{PLHbw!mArezu-)JjN7_&PBUr zEzD@FMSLe{-tUG~vQBeus?;#pAJ7M!>XS?S-BO?Y4-^YEG`Ru!?s*^!83T3+obG%U z+H2grf;z1uGKFI`GX5Xas4@?PU53TSc!D>g7MpR{ill`<>i$)YqU0E7O$|ezH`(T9 zU`n6U<>>M90@|X~4wJ_dwq~jE=cDvh%^W*-h}J+&(>=XhnSLCe9x;UJ(VCho2h8=u zT&_eu4$L_MFd2J8JajsTT~zEOqSwcPr#cJ!Psx7t+!;k&&Ze08a?0BB_iJ4z1N=?# zcO`u$w*8--oH}5*4~BE*7Hpi6Z;mBFMxEFfYkIcz{j6|;U&X09Uh%`O$6Vtsr|+!k z>9hJ}rO!FpAl}iaPqb{vv-gc{5{nFeJPvI2(Rc&4`eQ3+YSDL`QSewi#I9h}rEH6P zSV2cc3%qqc-RIh7;yC0Uxq2#FSZDV{|2fMd&M4@^TXB}vqbgQM+>+`fqOSHxu*>lY ze1-wlR(M8uNJJ6Xg%Q7LOIN%u8#(Q00+BsxM;v1yhDt1$ZxJQ+YAwgX@WO24<1Nqw zF$yBH_6cYWh|o?m=3Sp8)fH8`e=rKXKjOXEB6v`=hmSW63NfbAKeO#$M*ux$M=J2K zhz8Ibb*s-u|48$yV|&e*g5l3IWxNA#%uzrhXGAL^@|WWmZHy2vV1`r$mM4-r;ty6C z9kA{@f5+CSzYAP|Q9d)K@TBi5^0J}t#8-h25T}=jfCM!0{1{2G_~jF0#?n~ z#6>SoCGpN`(4`# z)R4!<52vD1BfP8o#Qmweb!H%V-)}q882K+^la338B=K1<8;Kjtxj;6{^7fpj!NXB5 z&N3n{#5{?f6OUrofo+W#-VK`d(?}#R!3-UA(%#v}_vgHBvf}DX*42v>D zV+iaX$O~X?$>W?zjG&I(c2U6i+=TOAZ#9~nb6wHs_B7{J{le4BiB^M8wo~?=Ild7j zc2cJQyYw8D@R^^OX+GPphPk6rv~9g@y$PgEZvjQpJ4JZBbz`sj7?NZ0j#S(C0T()CUcHNWY2iy z-5dSKib1jkN3%1hp4M!WzteL(AC($jmxEr3+{HLqL+t;WT5{GQ_tS68A!Ctt zjI!xvU@3b1XsGi1JLDy^vsHo}!n|xVhR1;Xbh}{*W;o_tc+5TWIoWOuJ2}fb>iM0I z{xS889a+oXcpFGMH}8C2)>l}2NM>tpYzwp=x+r@Q0T*V({cJIKC!9Bjl05V@vYDEr zumyl7c9t`&T-`dn60}g`DBdjXg67=nEKpNtll2N~)4JF;Ei^}V8NFwn+mu}JagMM=sfHGRkh8YHH;a&LKn2`5n^3I5qXCs zZse>s(r?CrkPgF3vdm2+zd}fQhI_w3)&br)6zDNxgy>0D7s|qUj!#k&I+l640Vn= zA_DVT-e^V6-dH}MDs1plMy)1ai}=MWJ%ermL&OO@hOphS)0uPAhF=w=cs@?GHs3L4 zJ|U-pBGTx&q!RVIwZ;Eq^>#^>5B1(Z(p{|lyLvz51e!c+@cdl1@b`ro=&pLU zYJ`u>uZ#xmN=vq6;7;%XM}mdY*2!Z)=3*7G&a~-E2E8_84fAjre8WgR7UtM&^?^p1 z>kPZ&F^-n`46-Jt#aOp>YkL1BK;6dbv)%=DVxv51C_X;|*IHmTOJ9 zT+$xgSbES|*E36`V)^v{-`=}6S9K)ox_mwn=Raum7rJ9vAjG|wk9)~nY+{+qwuIe| z4o3$_K+_GF4Y+OA-s`{gPd)k6t5;c7W6Y_ksSC)AAkdt1j2d;x%6n$zFinC9@;Vv6 z`Y~FqZj7R~VvXPs*)!m`bPe|he}#ry&7mEISy;M?ij}7={nb4|hsXeMi{8MRMRIiL zU3wRg5H#u$rTa-QLkf%XT7HZ+aJxJUXYdZSnMKEi$3yOHe@qKSEVEjMfD!WW08Pmo z?|bg!p_lZ0K&eBjjkl6pl z!XL@=y%IaAx2%&fuohhTac~lBEj%h$LK^S}7Pu+zX2*Nt+MfrBU`i&Yt^wykk3ill z!Z)|R^Db~0hTqpHF3;aRLT;#cb$*wgz*fv|~&(PWYbY%hS(- zGs<#EnV%dnZR|ErJ9Qev6G;IyyizPJelZ5?8%8AsA3xvjsI?2$M9fFg4#`eygXmJ$ zbakeRJIe?AKzfgrau`t(RV~^SrvYWv?-A2BZ%cAIx#2PxK>j zI)_+Ddd{|Dj;v=~KNX%jE{ohA$IEfJv|3R=7bGxPi2Vd@K8SDfp5b8VI6U z^uuV(wVroeTF3qtDEkEmI6mzeTCaB;z1%xK)QUC&vewLc&1fF(peOYsK@lDaypiW; z3{$L8(F(29w7uNE3|Fzr}H+xsWXo7LhA9OcLRZ5637d~t}P-9mgP-w5O@(h zSNyQ&_}=XsA)Pm)6*A_1k?!z+J z=M?~{9s}g1Vhn6Q=BBj_XMsH=n0iG#!A^01TyPQvDBUk5yq5ccL9dRuV~|9eU}^h;ToK%MLIJEL0+ zA(U|rL5MRs#Qw1;T`!DSf+zs*K07jT`Tcz)Ls$>FV2|1CW}7jT)CPW;2BBWXTHuhw zk@BhS*fHr5ocA&g{~V*F2dL-q{oR)1j&a)ifiH@C3Qw>Oq&b6)(6_j)IFB_wFwNSb zV=BPaToPJPe^5G{6A#*uYY%n8* zb5y<C}Jc(B&w$so!E=QY8{{PjDsXahjm%XK2RCa)@ zdugPq2-5G?R;*n%0=g0ZvIQTvRz9Opk*%kL|(+eC6M1jSHonc8U5GB_1_ zJ?L4!EwU{x#FMJAJXK0lW{f;niohc;m1&2cirPi@jE0g8p%{C zO}a-)RGk?yEP-RzT(Q5Z_VN2}`c5VJi0&&2f#o^W1bT@(+vc7srAgz&t5WAIW~?c- zOWyP$zn?VtsZv_2e;yvo6lZbOvZ+!UbZ$)>EqkhzCJPC@Ikjsf6xAEyw#s{TY$a=I z^>M7MBbD&&<59AyYagrgfiok(b zSA}nghs>W(#y(TxGslD11e_|ReHQPMNjq>qi#+Sb9EYWcMLzGODtFIzI66gV7KzS~ zX?dJBy7D{c@7{FIc>gFG8Lr2Lbmhw^%Mdd6VHVYOI77G>wQ3Pk=P1T$nvzn?o4bS&&27aYKay);UC|>5rWB(FE zQAC^w=&ZQjR?AhxcG1D9ol3Rh z$Dx%!DY;py32-6q^PW;pKU4kbAk~Up&8d$D{tz7V=g{R{CkTp0i&Pe?GHhB-098u^ zHANFgCkuJI@DrauBU&+*bJKgZ`^=?V!LM{0!2R1xgeSkwx0+5YayDk@EuBs*PA3+} zPft!K7S9*$a5}MA>uBhK=C!kH z#3Jz&s@%5Kgzkh*`L4TmGh_wy-L||JS)s^~<*E{0i5Qx^H9oO;v|fN^yfvGC=H^vWV{u-b6!Z %(tZ~>tABcFT=)fE1bNKr-0L=fYVBxt-Brn{^Ja% z=e~+xe73#tYb)-oL=H&yN3JckQhqt}=NRKf>Ff8=f;VH3iF;>n$H>X0-h{l2c^$ta zIlA&&z>~FazwY+;hZym@GaFHR;bE+3Gk*O({3q0e(#cW$F6;4+x7^^D;q6d-syft8 z+~Mu(RGuR`%1Jq*qrBUOvxwB*=9k{I-oFiu-gqk*=NQ*wPCE5O>tXpn=vctH`sA#Cyo8ss0gtO|vuMB&&bgk ze6~Q1mh{Hz!8WSpINy18Rfm;;m#UV)AvpV7@0}{|)>UPQ&I;Z@70f3pd@injSw?66 z;=SyJ;R${UbN0uh%&W!|t@=aoTb*?QZ)DT5VpX@G;tCesi}-Ci%UuOFvih=aFVNI^ zV4eT2YqR92^qA*nc~`tLEVP!k`Y3P{T=aG;-nHGYp7+Tkn^uBS`zrJB1=Z9rtl;E8 z(*62+Z%5d&&3shW&P>gN$VYZ7K|T4}bTl+DYDI9y6YUJ0iwd7)xluWSXOXn3;JJ*B zMorP7j&?6b;VtJIvCrgVfwQ%awqB(An2u)s6CTj&X?mvC7g}Ac)e+iz)?+pdNm}Mc97OJ%uUm1SVyg+ zSzFUi_uATF&g_3kIwj+qO1r#oh&K&kOOahle4BR{={-f{o|0X9IX|l!`0+(J8!`H)tS}TWY;nuyi)HYQI`))iX8bv=q4NQ>*Nrhedjub2ibF;DBg(*g53F@m4Nt zdDu?$fhLc=2rt|&BeEA*PUzSxyFLW;ZuN-XOMh4!^oTw}J1CjDBeJ>BK>D7E#mMGh z^-$pJnBj}!0eV$-9-hq`hE!8mHFW!4Xn`*Mau;)?(=tB#J#}K375`Q9QaP^D_lc>o zIw;>(B5SE<&FZiY8TY&R#OudtZ|VDQV%74w_<2rovX{p7GcZgFVe}T}xv$zUFp&MwuFDGnM7S%w9LJR$V{Ff{jHte-on{vF zj0HS4f_4y`VL!wlYF+|Ha95Rnq3q{npTJG%i2Y|oSzDGx;yqBhsEk>N3((V(cq*X_ z)NYr4baKJ76;~2BS}Ao?1rzn7^~kG4l_@aub;t|R9GrnGvVnkyxDxZwOmoNEU4!P~ z!0;%jh~1yXNsz2~6veCP=WhIhmwNYDDc%X~w^jy}na7)$EtDh}GS`|W_{Eb+gJZjw zxN2&HQ&MSPeC$Sim+yeRO3sp4!3b&ja-IM3@!cqUEYA;f11i79f8<;s>M7(Ej z%RVs27V{&f{*Wlfs6&MU@ z-;|Sd#hesv5kHr|&u=dT23~Ky`u?fJqF&Ad1Mmr+#8WAypbIb;FP~%pv#PPZ{p~T? zCHSu}fIXrYafzCzfJ0!Kc_uSydmO^pW9U5uKnu!jWp)h*I3f^YPLgrpI=IS8pkXwT zow6I|Y^JQ52aoGbR6BsWy()Hy^$HWbVz`H@LQB%ra+mcyjQO$l8rRGL!82fIJqXAq zX2UO_4#Agk#eaB;DnaPUNI0OZJ3Pxp?*~BQ!aj z|4^Im+c3wC(j#`&tN1mxQ($2$@$f%eJ7Blr`5H~wJxi|Kj5SL_8us)9J);3Yvyz~O zjqsz_znOK-`_!t{L9^C8l0=jQ#v-f0JmDI@t$(%>p`9NX<^9A4lCH*1n|_$N`POz^ zrv>r}*p1DP=UN)o)6!9h_%U9s9f`vu8<0$*Bxc}M(f+&WwWl*?Fw~Fg-2(o$G&Bpi zBQvyql^ktMHc8HE{Ms5~021j?5P;8)wYz{?g`w0r>v7PN{g|Yam_E> zuXu{~pyrmc8pm~eaUXFI#>J{J=f4r(*k!25mNPtUXnARUteCM`aHd_doyzYvC==hw{Jx zpbAB@^YeTVWAL|**Wz?4OF3d^uAhEMROm@&*=O3(9swBY=u+kE$IGr){LYRIx0FN{7ji7V{zQAXhk$y z8qZ?(2evbk8IC3U_9U&3*0=njY>(OpdGeM=ZTTL~?nqfO4{OHcOrM8^M4kLJ(&;BZ z&E%(<{4}-CfAZ5{@8S=h{4|rF20eB1)5zyG`DyT*p{XkdVW0Qpr@=3Dn*B7X5kClf z36GnsP`sh`ju9c2=T2UGd90oFph${*r+xx|k-YQxsN~ltX2P}l3Zo-+6%8hiL2Ovo z0`@RZDhexKmm}NcughNxkHS+$j6*SuK1R%#o)h<=4Zf+eT=3T6};gG3!;7 zqxS685t-UMr@1LAlrfvSg?-41*9w=cm2gkdCi?+_4W53z=~o_7#u)SP;fH<^_foIH zQ{P6=Ge*Y9LvMG++SoZpx?AjU@WI|S-f zctK`5JHlFrSv!vkkF^ql)BJ|ove2jJ45%r@!ddvd@d}^SM z6K<5f%6){Uy_bn`pSH)C`mSfgTa5Sda{QwTEZ$*iQ&F=Dk1NZ!NIm zVq9H||5xKTUf)McdWO{W(xOW&i?Dng>?WxJ2_8%^LSGaOmPw*_Bt+#0%kB%bw z`Jpuwow&dzlQhg6x;oGA`1KQT@Iz=PW0{J*ZgL!c;wkR}t;>FZDenTE3SFkokec!? zro0RMBRcJlMS#sVOGiK6ybE-8MYukMtYq}bo>xxTWY3em1TCZ;Xd7^{=YRY5d~%{Y z!5K4Kcg$Z{XJXd*sY72EviGO3k(Ci*?|gdrdVd+SXnij5<-38IZ8mC~1?SumWt?PA z99|IlBk^OY0^&}5LnkNO#9lx&0_XGKD`XZt$JqO2W2eT6B%!XBGndCaHO!4!>ih-$ z3)(}-c@E^ZQ*laJ%ce+qX!^c3qhB(VXXR?XjTr)wHUqfLo@88j;h5jmdx7srdx;dK zM`wo%+N~e1=C44$J@rGMx5|w1Au@XFN$Vq=eNH3Kd);Ku>dcJBWdCRLt|1J;dd@4! zqgQ9r%C~JlW1U6WdRUE#cmWxmmhy88GGo%Ve+K7PZcJ zFGhuvB<_*Z&a<=P2S9zuE5KOJMU7K0(L6>@&RbVIPfL0%tLnFxy-S6^vjH#O!$n<_ z3k7zo#rsNCWqh&DSuuNa3+Y41T-UBg@yE(n1`M_HxLnYY3YI9s22E3Wh;^bo}q zRkdmCs;@0xacL#0K)DXo{!be|$XH|uGlAE?+Vysy->WDkIM(e{5scG@aQ2Oe$K8p_ zc~1iFTF?CZdXqIAb}Zj`ty)FflE@uaKKj9%!u!eNemisK^V*Mb);?eL^LT^w!_Zd0 zjB249A?@x*{m{GR+qb3KClZRt#ZPe!$RV$wJLBm$aSfUEAX@OLoO0lr`!qHWb9nc2 z8c$^Sy|$dLfHzaYhFUqC&v+F7;ORu%sA73NsE`_^aD2`Lpx;ncmdM)W`2KVWp1vL$ z%7y6jVm$jlAzygott*fkuHKiPw~J%W=Ix?xba%!0*>iE>n$NWSJ0n~N;qA)cpUvBK zf1J1XGG+0z7(_)+y1JFQ5&Ed8<#)li(M;QFq_epEYV%yZ59YM&((&4 zDpD$zs;D7nf~n~FB6?NLN!F-7Xvd6z3Ri!McF*FI(Q*d5{v!HW3CV??^h;oGtxpT8 zNVzXcUy^hFPSw+`J-EUPJU`U*M6D2DjwX!tTg-UqV5z<2k{U z9=xZX8{^k+v-5pbD3#v(DxPCKU=DMCF#=tn*yAkkT%rHJ6`XonWFx!B>Cm^aN9W@o z^QKY-UXjGcb7kEx<34A$fGm2{FEImj5vcf2ah-~UmqJQVRqTsF3sVa-sP}|iAfA0v zR&mgG-P7AR{s?c78srNY19bJLSTXRE9?pt&0?qirY$Qw6(%vg$qcD+LP1xVOPl0*t zL_fku-j{{n1UhctjZ2;sJ!`)u=~U6t6@z7|!$oM9BO|AvKUM%HijN?h=?i`#%4a5` z+;$bl&cwYQHsdr*ZCal7{+W7&`Ouaqr_Eo|z6c8sk9Ddk`}bHYIbd%C4^0>7E&W?I zREZj1n7sI_vKPRNnE?af_GQ6esOnPuA97%x_o#xf_z2ts{y2|ThVpOGSe%}VwaE&>& z``_{gc$jExHAZ($iLG4-yBG0r0~O>#vCqprG=+qBz_L0 z{DgR-aYfkiadY&Y#25TNIg+M>@#loSaKdO2FS6LPI$gH&)TO~&l=h2;5!S@|iSfc|TXnLy2P5*Es z!&8!oKK>MUHev?~W1YNk5%YT$)(mC;+MTTI;r za-1*4U%WAw;=X+AWI3;u${6@e4q5>Ne+${nWB!({*zsQjlhOaALr8abCbOynOP>@* z*mrW$)x=eQc$U9~S|NBP#{DhJXEKw+d^B%;(HtBrs68JWvEOi!cVz`|xYnQTkEe9VinGVhj#bO);VX;P(JU(VfSa4%}!*zl;RO#H*P5JDf9+)El69v$OJ;?#4A{4sHP3 zeia%eXTx}!xqNuSp4u+%$0eVur>@OiuiV&(oT3G`_D(X6VZ~J}Nqlwq_lMZ9D33s2 zQ+y?TAf{ICfQ9f5uuvXE`7`8+d=)LAuV?Y;DrZ0j54Lk8@EFM-gJus8M)K(lFWGCf zB@0xvucw6>+`;n3HwW&stD2kM5wTUML6i$*@xh3f57)FGJmlBm9a?xnQY!02^G?hd z8aB?VH5`eZV1@G0NT$=W)*U2G=vn-LRml=lya!k%e-;E@?D7lXF3zJkfoITqF2^u{ z_|UkQM6sctV>We62u}ShFkhY@-b0ymvQzXS*7&Ya7#ibOu?Aqi*|bwk13c|{ki0H> z23{$-38cNJi9_HszI7mO%PO(Iow+${!r*Wg%UYqPc8qy;4ScG$zfYgday9f_{2RQF z7TW`xWi3{PF9WZ|(_*t+2(0DJOuVIOJzC0U!CqM}9uM+CIMcnpq|L$^@Pped%>B1u zvn-!0coH^?;%#We$W3J%$U^Ep9cT?yhV5H^D7(Y>aX7ofl4dhFpmY-Sz?$=+QT|uq zkBTBmUQodt9{(;rfg0Rg@Pp?ABh^->H_0x)_0pLfMA!7LBu6Ont){I^!@vJ!jDZ)} z@7B~T7n!r=3LKtUww9x0tmcnYsoyn;j=<`qiK(iGcsna)?K}SAALIeK3j69S#ei}$BMz0uN%4l$v*|8!dFglzpthAgA7gogm)RL?VT6$SG zK_1l>9;-&TRAd#cXnXI9aiPU4YfiN;)b2GJ1T#~#h!ZNUo>FVr=v82y>WqqLoXRL(XFtJPOG!dC7P7 z6}+Hl%@B<=2^FQc07Myzjf%UzmV<_iisvuFxBK=VX*(=5@-vGT#2eCp4^ z3%)5qUHn zqtv^reUR3QPMRY;jJC3ZWuMo!N$T9J`b9j&SrqUeT4raw#(tjMOA8+^1cv6QH7vCj zSpnh}$`nVV7N1Gzg0C7Y#|8>e5*8QqBCgC8_|W?@>!d1H59YouT71sY)`eCIz6uLX zm+db0l+BJTVkO^<6~Tev%=n?kEzH(Vu29r=DP)g$t-uqV ze~ice5Hsf;UFJIQP&lUJ-z%XrFK2Ba6?qfH>MmAcchp#XzSx)eY|tyH7{v}@m1+*Q zSKwi+xwl)+2Nu#^wk!9ISA2s{14W(N{B^|2`M!C&rulEM1 zl#7||(yDnIJ0q+1*MOmLj#FB~Xxo~4r#kPO7FXo1=p8P=im{D>gK*wG<*r+jjP2?7 zvHFyaxude>rQ=z4@T<;DfNnS;ni+E~rxbN-UEl>6EKP=)vL8^S^#emH=K#;eMn?0| z9I$~~eC_=!%TSqls^-EP`(7Ued^6*4+y{jQ1b2i}_LP!&L;KmhACiW|U4bysg2XK- z4!Zj}_Bwq9c*mseSsKcxx*As{<@Z5?v@>BgMFpq{O$;Y%fMXoE9b0%|9aD+{G4OjXRttB|c4VIq!zyT9slb?8AAIgfoZpBuPI=y$dcZxL{R_kM4URy4*JF)I1t^k}QnYwNYS8>JmHMNdHn0DJTvYzN{EtreEiA^lBlrh4jk9+N!; z!d@vhAHNub^$nxaZN_}Nqt>*L+{FCkiIW~7Y_XMZeE~Rd$JxTRjnTLr9Zp?TvyoNG zEbBe+iV_1fQ*2(ZPCC9@_VC_}{tg!(&T(Xe^dl&v?dO82>?t_%K48o`#`c$;Q8gP= z)i_>`!==>_`?8FB!1lMs*)LJlaaj`3I?+%2 zjj>U@<3kOxwj+AJIuCcy8T*l-L64N&a12wdUD67iO!`>HOEO&5)~=<|uLzqybBkC* z-=dWep63{!OGzajt96obKqLZg;tUq?CO8|ok6*}M3FQzCc{#oW`Q)$);k`YbxAASA z1cet;zXlrw2uKE`B#=jnU0XyJEX$kVAo7lQ6+OrIZr=#$jJ}MFd0(VE{NH@%>sZ6x z(5iu6pXq`uCZZ%LA(NcfVmP@M{Qmge-|s;X40B!ykm@l&c}vU$JD9o26Fi&+wxM9^ z74ZZ!;EsJj;)&eB%ZA;B6qckT9)KSQTao8#N@ykTX3T>gG@HX@<=|=1sn#6r>wqWx zqSs`$;#wWMudQvMF8jcK?;(Wn#%ZSnAXA%4MMC zI11xC#`39f`5~-_T(HM%cC*bGOKJnZOoLFb;!beL;Yj(^cI=q+2xX%PhkuSy(i_(E z`2KFoamP6A{n%@$#Qu7$1AJt{M(A7IR-DJJz%*-z_Mqa2Gna%$g?CUooKt7}d#*jy z31?@%iX))i6K_>iv(17Mt;7HOys$B@oxEC{?!)OV``ew+U}it{xOX@BK%Hs*MYOIh zJAM(7>7Rq*^SPlsp1e{A^-8T5uM}q|IEQs5JVdI9Lw*sNN_eH#gHEW8!+9>+@$FJz z^>*d!$S zsoHz?+H3`b*fM` zfY2p4Lkou<_Q3wp6CTC2(4{yt^T*gldhmNIyuN$U3-X`w?E^qFK{rPqVy#186dDfJ zj9L-}QOg?EbuE(_-F%u+m-S7Drt*#rx4A7+*<9)H_+xxx!&3lWa`wy+` zKgLM^9`m{!pBKv<$YsQPydIy*VdSa#BixQP{yO4Up!a_*(f_}?RcQ~fOq4YP#z`9? zYhK#7>cjNAwH0fZ*4<*QHB>T>(P-(HKC?GlZ`Sc!%s>lKkKhgwBKBLcpIV=1ZeTnf zDt1;j%hO^h*gi^q9ITR0aa^O4R|zdc)*-W)HNWAmZG=4}yM^@gK9X-8?zIb~7T7a#t4u@+`uYP*D;8%h-Di{25$fC=! z^F;NKvO9%qB6ZP}t^};$o1AOs-Cf)9?RxwrqQ^BfEqqZ2(Vy0f=vWcGkVG zB>;tGRFAo{@3Zx%skR_=r@9XF^(WOnoTWe2dI8=*)$mn@&#W`>aL#-Vja$#H#(t4q zspn2sx8hxN*0&B6~tpGsA6rC4K5!NvctXrAT3WDlp@I6 zIz76of?75DoBa+sK3W=i$4D?&plNFgejY78#(IL1NFS=2Ao@k-HF>AgcP?EDy-HCi zqN79YsK?RSK9`fLA}A}&I$>Kc%Qe=(+lpCARb=9?xp?)Co3Zj5m=^wIsAaMjv zL}Hs~2C}Ig&DEZIwD+v5I8Lj})ebagoE7<66w4HUa{a!;RSh&x{`hJJ4zc%#!Ywme zFv}{!PfUbE`FpbRwfnix<{6GGWnVQ;AT7vY6hF~lTVJilOh3Y$)q?4&GPV_XRretq zR`wGT2Wy01@PGMzXZ0?fq0Tc#uC*B$`J^!%T<3(Jjpd+ z$5}$cr4P@)Zxla(FjRkYUkpR}$Ld`*PO%>cs}86N1$Z6tmMGp0KC>=x7O%wd*9Jr; zws9u%e!&6d5HSa05@42deZYL5o@=WZ8$0O(=s|;2!-NWw-!kchpP(+jpC!3Rj0U>^?2xxT8F`#`c+wjBP>@&M^s zwE$Zj$$si*=GFb1Dg%=13>^_45LRQQE|vpL#VoufoZ`i|OjL>YmSf$bbKx1m7tVdI zJq~JBYn!6>|P zQ?)N!ypHos)xL&jAvc4n>Zlkx4;YkQ8O0c-mtrAdA348YSZJ-h*Wid?BX>>3^Ru^= zhm={7X%F=MZpQrN?ZoChOkSa8PRz4Ddp>JDH%6#ybJwOGgWFW?3u{)9W_C=u8P0&j zLfP8&Dj-F{I{UW9DwsVCT&gqlS_x}gajN#^)AM8JtlE6HuL|wAHE*zmeVV?{Y?DO= zzmR?-?+;px_mn8MvRZ9Bwf=2WR%_uX>zw)y{NqXN!L)nEGGf{urYLWo-J}XJxo#KZ zAASzJcvJvWy<*iY$8I5Wh%?*d(@`VrQfa*%->=2pO9!@Fhz@ghlRC(s>eFg%H z-s$Y-So~r$Ficvk>`*e{Fg%H;G?MZh0fFZ^3c6of5O9PQF~~H{=by+`0%E)o9IVvS9w%g>n;)KoQxpICB*&02LkZXoLpc8cH z3scpxtb)La0@e5iN;2%F)?|rzKY64VD0Aa+mWbXbt|e7ZI$=- z{&426@p-S@{Wh+xgjKv9wD2}+Yr;1<@APIbuKZ)%zaQ@}xP9h7N}tR3jmHU#_d)qf zzB!f*m6%jXOC#Ou#%X8DudSF*J?BOG{e7&Fx)(a5LiA?-T(Wk`qECDq>mgs4Rc!<; zkxIalI-|?iynozpdE>ci z{Cb_rB6z#^RQBqA?i4G7%2sFNtq3g!O*?y(J9}w&=bR6${1D#iflTv$EVr+1pYChg zTk)-$B9i)!a&Iq>?(Mfh@o*eYqj*oI{cUARy*D2(SEiy4T(_mO2O+UIGmS)<_7}}z zs56|7{UtJ|9p;q3HLSz!sd@r8z!LX0@#K@@$-KK;d&>C(}z zJ>1T=Qrdk@ocH87FK1N7c2_g-jx5KA+ub#Oa!LWprS^~epLYD@cAT0avv>S%XjOVA zJEx&@hmH~hW{ojn!AW5OHCV^60AJleF1zFS#DshuT}tOg;`D z@ln~nv-_JgGVf(=Mf=)O?=SBdfrAhCV-{y!j(acO|Fr+!>yy}jdqCQgh8g`iI*LEY z2onyRBo5ePvd9h{Emt_qh!c*SB#t=NVgE_u!8gSQJFIp;?6mq&9ipaju1b3Wv@#uF^w8c(} z3)Z_>=NRw?%R8|n=vP5RLdJrvn9|-5Q9t9?;_VqBE`eteIE+CS*(0#8D zVni^RzGhohNF+-o`GMD?{Z7Giy_Lx|NuL$y3zMx)sI90%t@X~_{{8B1-+wMX;<=#1 zw*e7lPTOAa%n!pkCoKKAu@qae#?mhX3wWpFMo=%lKN@gnf~{N4!XLu&s$F#gxBFZXmV?qOH`x<><^1)q~v=or{sdr5XN68H|A0*QQ+2f~xGue(f@6+7=jZ*|;;8$YJ^qBV zpDNDscAjy$ZhmRr*h^aDTH>sqsQKxvr~I@(Ta0y2v&NqA_0z@I-U2rMeH)T}Ot!bz zjc@*J@lI_g?D}-EYgQyim~lI#HCcM_rB_i+!&qb-T#0BUScvVdmg0qVTR-E^F%0z6 z9%sVHPZuMdnb>QUTcJNb3qK*6AvsgVr^LlsE!@(dEe7^aO}O{z;@+%?jVq@Pwq^SX&pur|>tizJVXt?6Hsk>L&Ez|KIYwjHCm#=TxPAh^j`EW78RMfrd%RRn zZ9mz|gsq=0w)SxuV-7X8(F=)RzYPtLj0a+X=5hDp&M$Gt824q!?fMC{#{L;{&Dy8@ zv_B6z`h>ZkF6KH<*t+DRxMO~7oLdZY`=|W0KMy+kgt?zC=JwH@Z-aNfD(~ZaU!soi zSuz9O1rKdAGVnm=-GgLo>_5i&ZtN*{iQAZtYLu zpr0M~K4Idgi;3oat**Hh()e}QG`w%;dH65M{B6(MsKqj8Y-aa;P&{1z#M)7vP$S2Q zb9z6=CvPd)ivPT?aaRBPz5jsIRNF-csg{3AX4T)=-qn)YyHpUS3dWuIs}mAB{YjM* z(aO1%DQyon{{dD zek<#ePlt8s+izuEqAJ!U3+lJBF0F=jNzeYRtV^qbGpc^fVb|r8pMIBfa`M-~ogW7u zCx4OCyXNq`1EiJ|I>qdB%bb9HQ@oZ~)!7?zLGp=H$Zz5owR80rp_{w1LK1{_uVYl& zw0C}v>pQz`+dI9~$#Hdpm~qtmtLPQ0icHVha_7qKX?bNnoef^L9q?X{u`k6P-fg~9 zKChJbo$th*3-OJ2SzU|2tMT_y<>Fa~UT6xZNDU=H4%%W;QRaGmvNmzc8=81qx`5xDuAz#KR%dOelw zRsxsc$M!ZI1s?Gxwuu9|R>w)=k!%V}FRZAG!BchuBd!N-tOlN3E&sryM{!jg=uzw! z9Oz1E1&4y~(Dr)llVSnFkEn}C{X)FyEAh9EOCAkAF^`EaojhN1 z9WP5XbfC-e?`gpfG@t8%AChR7;yPFard=AFX)v2 zC>joU^d#^HdO1362>-!^J0F4<)!7hdV`rZRo}k-Yi0{ZRu!VOa!;8$7xPPhKMfU-V zkcB&eBj~);>^JV{{6K0$ZA|$nxX#s>?}RxY0(0sUrC<&c2@F85KnFsmJ&J$QsISIv zxDFQLrTBI^TB1dxO(XZvlfb@Nn1iiLO`VnCJId`k8t$`RY_av2%Otr@UUJoW0cQgX zWQ!xe@S&^*K1nKpL+IGo;~LTo{Td8IKN43$o~;!P>Ea#^ZA2@wtNkwH!}1$&T_f!DxQ zo)(f%A-N?;Hg z`O)Cd#gJsoXOd(e0)KiB^o7Dd@Jvfz#-f6!fIrAAG-os;+VSmD;13ZGDx~!CUY?Z^t*{8sH6f z8j=nyvaCApm=_!ethU4=`lV=n#zHPkF|XL)zZ6dYGVEMu=^Q>@TAzz1M!6HXfIkQM zgT_om0#7m=2TYUhLk*o zNINmF&^^2Sl?J?;_rSR)bGj);pd+I1qY}GB)5+;2GKw&!KO_gN#QXBIX4? zT@Q@64lTYk;gd2;k2?dXK66YK2XP4G+T-{yPqXx6@g>DjuN4f#bBLAxD4uv4`$yar z?Rq=z8lR3k<|W)o`)k6Tlk_AK^Gcbv7T;xO!IjW=h)IyCA#Di%vSgYpF>nd#hW)-1 zf7c2ZNc+9lhK@Gobt$+G{-;)o5sR6m*zrp-<>T50TMNE%A@D?=A7WnM!+POA=t#uB zu)*Z1Lysn74E-5y1rNF&cs4s)dh{``^}YN<;&d$zA)yn8ru;)i!;W5~#&SvSL*x_5 zqpTjZXT{O6*})-U6IMR)3*E)4$Ja>Y11W~RX32HbF)#QHv#YHyWj80TOm_Qm;fnIf z&2O-v(2h%jZBUPenfmd$T0RtUPdsGJ7m9NiJ?8G zC3buZ?&9AC@}u0w{}JXtkyo#Wv;WX052gWiJ$Mdl#-GLd%0zrY$I z?%3>DSi&UiWOB+L#~rxNcC@(~ZECC`&f>E=$7yeo2TziWGI!lC2Bp*C*}EWk=f z`r!Fnjqljy%JD%e!Fk9!yjmm|@7^WOjwHjL2PgSw9Qu$tG?XyeWhWntCp*67OFD5u zRDzQiWQL&|ZO1n_5jrc{5Z)dn92P&k2rnYf;DyGjGfo|^Hgv7{fUv>H1gLq^{@V0G zD{I`0EGDXYsYVEAN8Zn@fpPG@i8MTl+8V0T@}Qhd`7W;T7J4!?Rc+(mng2NR|DO4O z&U|&|e)-(L*2W_J{yyUL&x2QpYZ04bF7I~dGOVld&%Jr+3ErSgPM6O2apF(c>l4v` zi0r}s3@h1d3_d`%ezE(;v1)+HN)+4U2iDUJ9Iva(Wxk;GwF<}+-p1(oH^rZ z=I39UhjMNI5qFt={?c8Z&>Q&}mlJKgEt)y`{>!-jEc)d6mod{f@f(P6ol0gv!)>!K zdPCX|pLVhpV zIP6GA!(n_<|8-EDxWKU912_#8={>xe5k$n(9B{m10=t47LJuNRijISnA{UI9#gn4_ zpb2rBR5}s4W!TDS(~7!7FIfFL@0Hnx=s$1~Xpqy%{azlF+a510i2M=#1wYTmU)76v z6zkrO^{H+IE0#SWxs7G2YuJH`Ds!S6dsIF!%k9$z3*r!#Bxj5Mfvtpn#ECynA;UrC zy~*5ntQf9wx)d)U+40~Emby;Hi1P0hte~dI$Bq-w1#kc!XJc(p#pUu>F<_#+Xxh@{ z*mpEIY)yG9@K6wsfu7L%IMbH&aW5*RAw4WbK6YrpzXcER3p7M{410_B6@Kw__ZvKg z${BD8tZ(#PuD~U9f{Pp-vQBGwz%5P#UT{VTNU--{2J#)Qhz*FhQz!A2696R0BvJH5 zo^tF=P8jj2YA?j?GWv4*Fav!@dks9`f0qIhL?E%C<-=13AhxwAg}fRpXY6b&A}9qp zLbL&`IkQMlA3UUslXnC>SQBg1c@TNR<#B>@z$1~dSb_2}D3g+`Y@&JClsb`bX>$7D zAx#7N2Of{(^J)AgDgbwcYa&yWSA$m$pUb0y6>tu?EZhdX!8^t?{4+e9QTFk3P;%4o zO=6>+ja8EGK?EH-00)pUinYNv6l=pDh3r_3dqhjf3n9V+W^hg@y_TmBFQj!r8NdVI zhw_KfGvFIg0DfKQ1j`FtA+pF5tMN-7IJhVt6y<`SWd_nkZ`p9@4CUfP7?71aU@bVCY(C96(HG#Gx(n zKc$PKlU|8FPP1H*Mv83$JjeioPGqw|8)zZ;7@!v@hHH4Rb!JSFSRf#)2Av-J<+Slp z)(D*-34|9%t8bhxYmJ&3f(BX#(p3>9^eyaJC}O?fJ`jU?kh7Aw*zs@|q%XV$`rtlT zWvn=DQU%RG@IdQ;Yez9?58ec$rcqvkfX=JO-~>HkXB0MPIC5Bw`Yk{8b^*t;+{Snk!A{x zNa`NFjemNijI>ff<%^WEA0%s9*qo(SN0vgKs0`?5L+N;%aAx- znmX2*;-FY;$Xa})SgEX7nQ81cUUFGCRDeZ)CzlorA3YBH4(O?-75DO-&}oAQyi@og z&!B7()x9O_Q@XmW7_!S{*JHtA&7-U9Bm+?y{&V7?&f`06@Bk|W59#Z8GO*I20eMAr zPE7cLzXvEN7hhg7d}P@9;1t{jE2g&PPK#8LuUN2RGu>8Q}C18D|mWn z1j-OBq?e2G(Kar{s_+Bi6~`lFSja<)PXvB(7+4%lhRiVYX1}};XY?yu?9Y*X^`hkS zk=r!Pj`?->{#eEwkW=*}GLk;u%@g~&A~ycy>TyNemp(9-jv3C6L78DKaP3SZ`)oizkm$wYq-}>!4F=RyhB>G zdoa5lyH34E=E-i0`iv7~JL+94-2dH~F9N5?klcyv%B`3WxeZ+Vx4_gJ(Q+fMZp8P` z1Dn2x@4Vk(CEm08e0NXvi;P6o_~YFV|5dPPC9k7}q`GGu+w3tBvo zWK^&p%20MMJwA==%%9zQ9#8I+XQ-q~_U1~wFXv_4dlSFtp`Y=&fYJE^CGvIW!K+^> zd$LmILx!>7101&FJG1u8UdA_O!Wv%3JbsF2$l}$ieu?kEOnIwnNpIYzw`Zj%t&pmo z}9_u!o#eb`%JavnSYi-I|x^1?*%^a2Ml~cU2eyROyAe37YIG@DP5nf*;C?a#VVR zTdl-%ug?5Ez5y?yks@ zZIAKNNyjvMVZ7GdV!WQIq2FTlau_d+o{jO+zmEsw$tMv04d2=bM#(-{R=eLQ(n<1Y z_Pfl+@gJF)??GEFd<&Yuwpk5X4DWtZ=3ei|$xwsoLio_r1@Z?OuTvV*w5=bG$)<10 zs^E9v=(lr%zPl9w`X+p>sP5_~6 zzbd;2-+K{r!dhmgXiI%BI$OrNwfoYo7#}?o>w;PFpE;u)F`D|>j2>AXvd-2DYpG|= z>abE6_q+HcYYv@{{(!w^3jYwid7C%ChU3%2y|N;7Q1*d*e{41FB0G%U1tsh463m}n zlYPV!=v>Snn}S)RdvZ;?#nbI9Xjx+lbGTdP{WzX)A);ScFU$_=;#pu1#<5=Y4Fohl zuDRV94xo2~XW)Ra1WXhzq$b52XVJo#hS*!oX$6Y9Jx}bT7W3=1{O_2Du!5Phr{j1$ zTr)6C3SsmX=DDxhFE9|S(5}lG1|ruO!Z&6iFOw(~e5gmz4uUi6 zhxkLyOTc9A%0huxJTLnMZbC=wKO;)(w=5Fxfzm}~%mO|Ez0nrjHgtj7?a~i+U-A)g zC2^ybGr243=S68L@5Y;$BbfQRSTbnmU=3G#?#Dbd)75X;$EuIlqCWgZ`_Tg6CH|?4aX?*=PUu?M; z7|m>{4Xiz4H{ldq9qw;UCp9fI83(R|tE>bX)*G7`+nmjmRrBC+y@}K8 zP`6jb4zXTgf>#XpcwVSRlBU;09>&OwU*noNAb1AstOv_o19b?#j4S@bQ=DCw zZ;AE$4pi|x?)`0duQj7qmM}kQ0>bi|0~$X?&qFE8_)s-tFmJdky<~eZQTr}@1~z#0 z!0>Yg4vB$7P0AQ5s7rUFhm^53E?dW|cNWNKM0~vB{u*6UPTWav5QLAxE5K1n4B!a9 zA|c^TU=ed_r9x60J0*UY{3vN#c+>JDVf6Dt3Cz$dM(fgU4d*}9ru#PZvJrD(KCDIf z(C-vj*h)Onl!l8}ZytAw7>0Fb7VpoWd`1AU>UWoBLTKDBCf zP`v|#UXdiCBrq0P1?CCY_-*~Ol?d(pz$iv#KhYq8m^{RyEOuPu(DQb*qy@7Ec4PA! z(x_%69R*K1^ zd%#Q)#aVkR?qO<4el0y>$m>()F&A*yd`$ZP*zO9xwT{Yc7WY7a1#l?#y5;$;B{nWg z*#TzFm}Bs_j@RNd5J&n+C$uCrr|NYbpy+*SIagYwV^*iV`S)UNzrJLdf4 zqwsTH3Wy)v&v~i%$WFVTQ(nsSuP&a&AkRKInDR3ohoAFc?;X)RdVjy->d0**l49-J zwRd~+@QMd5?BL^^K$z4qgsy!KvOkB8IUlONB+nlWBI+e0|{IwoJoyT))iDO!Hp}}ukiUxlJt!O)9xUIRVtaV* z$R(BcOP+7d)FWN>qcv}8zBCV`fk%HPgR!22z z50~a9U%foSz@~0tKdfS&%p^T}+*8EHzBDW;;7w*QIW73SW_ii%rOp@*-tIOEow^qz z4?V^iuVUvI>29&c!3TR><%P2k8jSgSK#1KTiqrbD1q0{C)V@}&9KRp%7R1;ovW(dg z)~f6uZ~-swtGFX98;j$#yEDX?S@_O8+-u*5y!))_L7@uvl6eWobJfr%Gf&T_R}6lW z<6xg}8+lX)lKi;zswf3i0N!Qfi5ZOfMe7;J_sYze#V~>(h|p^vH8Iv{N79Eo#5^#- z8Q`WL=C)DxD)$kZ_Fg8&{kFWWoYFnG*Hzxe)9!Uu4(#$?SI%}HpVxJ>a3bo{OP(nD zLGJdrhgFQ5o|Nj2W09c!#J%pU+K$h9d(CCysYtM$f z9DQG#(Jz^@vvLOChO7f3Z6<1)#mBg_e3#w}c(t@ldB)_cRlf3e^xpci@LX}mm>f&p zt52WM=dChhtP)0Vy-|Hebe~(t^IkV2=2~8 z%7WQo|KMGb{}Y_jNmACMQyDES4y|K)X>kz`Dtl7vjQ659dQRLUx0+{X`QU;2kXL}Q zoX;7jUh;(*IXQ1#k0veYvCO28KZ}&wi?u)V%Yge&frIip`jz~J zwI}T;&d1A#XvzhX`0knVCNlhe@E+ve{rF3z9#y|OOy1~~QUgo%vkp@cLfMkg9`h0o zYyLOlT3r#sdok|6lw4&;Ud8!$YCdV_XkEj+9)ZZ)QC7Zk2B@%O%x5VrBiBjh=lR$j zctLyB*Jf8(>GS+nqOy!@%k2NO;e(ul4>J?^<*QwfG1V(nrABb9+o{SBC&%E98xa?} z6V#Uj2Yd^-FdU$?*=1)uyxw`8L*gBWUNZ@r!TY#&>aiy#GJNH6RDihwhB0-^4Ze{)1@2=i5Swz%}=2Y#!#4 z?&o8uBH}mcx-y{W=C$?wQCw#>e-wqFLn>Yi+{DRhT0IK>DE=~=KkEKCe_XygAoZRP zTQP^4JJkFAUEtax{LvJRUL=g;Ni?Jv4PTwbDOa24>U}sFo@wqW+!^DZW7IOFS}F)q z1q*u-9r{`P{yJz8eTI5)*gXHX%XjNGD@Es_YTk>YF~Qw<1}jY!#n40HTvQu-7~HR} z(g)0Wmfo>^yc_7UU&b|6{i8=$Cu4@h*%Xb|j)}uz8T}If-|uQ+o;5Y%6wOoIiqnzQ z*n1JZX0;}_SNIaOG6#*THVt{}3W)sxL3c%jAXE!EkIo?gWYb-Goj4s~Ke+!vdMSPr@> z72c2t_}Y06zQVa}G+cduA0yI6_2tO!0V+TQjaMhhbq{?;aMP;1mpQZgY2U?`)bo6* zN}S{zb8MkHhNGXyTG&_M_OwV6_KS0IZ(~=^$3N!F8GS5>#JzL7*m^$BPzs)$`as4a zxzTa{6xXR|MqPR8DSc5+rqnG=8}N(V2l6*~@=2Nfqe53`D>c=$>pCA}KA(#(f+&)K zShIIrSAUANf-llnSt}Agq0USsFVxbW5@Vk*udPYA6TJxgUKKCOX268@)Vnh!kn2Ui z8cDK@JVg8~^5n=SgrCqZ$JJeGL%uDTCvJh2OJ8teQ@H4}U4ijMcnPldaPbW3o!u9$ zQWH`*CXQwcPk7G$iAvgB6ZzB*k7cR}`uA8PnL2L+FHHed+$LwB#!j7lYH{YPn7=uz zSMX)QRxGVc@qfr&fxX8RoK%q*4gvR@M;YK~I|Hs5pP@zZxB1xnLm35F%LAsj6+`jt zw%0*)3oK^eX(tS>xikB0i1Ce@nb}v36ZHEws6>0+?syAj`VmE~#@IeJzZF1dKXuK&h?m23bSw1S`Ib45eiqQhzUb|a7Duw5`Wa5kqvt;fAA)v3 zT#Ozs6dh|`i_iBw2{&UN(9ah$D%A5<9IQ|O1tzxC^I5KH)?b!+J=<&ZF?bw!w?*xV z-HP>6H69H~5?4B{J+i73Dt${(wfEqpYxJrj=`4@K<=tw+;~t0Qb4tl3J(~9s%=XA` z1P6v9-xZ$(a=7&@q*a9H;iNqX!T@+b_D_B8ei6SxQtVjkmb&qW;D5xcfJQH`=i+U8 zT>cp7jrXS3a;@0S^+W}#n0+aTL*8qnGn;GG@)+-<<_ocfH5-hbFoo6g;O|FP6^LdR{bVS%~PiSYcokTFmn^ z|6SJA`c!&bPIyY2+Rj7^miGmZ1y-UxE@?LocLY0)6>*d5&^hra0HZOi*(y&8^Y(|)e5_;x7^?1oYS^?Q~WTr zz8mvl=HLc8biayT^J5*FIi4yse6Xjs(E4%7PNCPDx;D%BuSQ4YTph5rFN|>vE3RVO z=xs=2*sv&%K9nk~CnQbiS^R)i$(q5>04#uvJ>!DFi(P&J+{Jn1 zi}nm!kJ%Uo%=QT@?(lQWrj9qjshGfJNTS= zSqpP{0rU*KQgRbW3*W#K^CPbgSRUg`Uakq|xZSym%xlg*Wmv z{F8pIMJ60Ge(AN_2cNC2V<(?fj0~^u_hn>s(3WreX&|Y1s$wuH>%diJC#jEKg2s&; zOAEwsVMW|eZNnO#rGRBTe7&}mST#DDqGIgi_TClaLc2$_L2s*dihgaa=N=p*!_4x& z)>P3?zy|5($aio`nI1%^sb>B>Xcm1H-Ipu|`84}=Fdy_9bOp&b;kNWAc(8O{Lqsc= zPK3O~Hh2`0TE0`hv#;OGUF<2F9a+TMycsKk1HqZ`=Zsrwt-V>Vw1s_UeI-1Z3D3i475{^h z>)mKqD&1Uqz1IqNLw6qIu|LGjdCQ2o4m?zGMSByL)!NY|s8hbWi&g0FH5Q*Qb{f79 z^a{=)u|s6hXb#r<;bE+~*Z9vfug(?zm8Z7-#1U!H2-Zp_uu6% z7Q)>a-+Tf|{w}1B^5e2yS_f|f4`m(x8c-F^adtztxNSDQd6u^niz`ZU%=hoX;kYiq;d}M zT(lz2t!NI|k}baWeu`zN%sf?dVU2yS4`POy8#eCCk*7^npn6KlypR2CN5%$LV>x&8 zE#Je_khm)l#(OUgg8u@FgYJHg-A=U@Xq{*`dp`Qd!tKSohou|{x+j0f;rx`z9M zzaryW&7mEISy;M?ij`X{{nb4|hiFdVmi5;~@+#TLhgf1?P76gWvs#A0pXD6_nvyr(_uR+H^K#*Uo)`HnPP^x2`7DQ{ z@VpRpU5`xY*`60HBx^VDmfpKL=7Xu9=`|uo`f%PD;mqN@F_N*VyTHi=7c5h8t)3&8 zt0oUs+;cmik#+*yyR~|gKcvNZE2N}2uX}@Ak`L6&5cne2EHomU+Ve=6#+dRzNTzC! ziHFy|6lLZrN@gjD3{Vc9?R~~bD`rd&taB12pU}Eq#2m*+Zb=m0~yXi!oT=FhVN$`1y86t*s#ah(F1jC0Q(Nv88O8 z3mmv3o1f=pUn12VsZ4!Nvyo-TEbBe+j1mJhQ|v~sPI|Ii_VC_}{*nWXYoM*|h)g#| z;C;z)q@VO7C`0Mzf~o8&IPyMV%sR&QS9t0eF?zr_UXH`1)w24zAkl$77T$LB{Geb~ z3)`_d!4)4Dt6$t9ZPmoC+%X_xFBKMuJy^BgcwAb{{uV8>8`GkXP8)~TiNx9WO3&W$ zp_Wza;yquThdbz9{YcQDM@n6H3{$M3(F&YQ`dG$F8m?+7xMke6eR(*wSDq{=W0zKylQ;h|`~ zdksAv2uKE`B#>8!U0XyJEX$kVAn+ohCR#<$@x9wOLOO3oD`d?3fQNXirRdkOhP&Z; z1$uqf1+qB%heP(>G53P+9N+c(fQI~LV3>0pfK-nG@_HeOuqBzB)-s$0yjU>xig9b81`_nJbNMja=M2esJB5j{`{;OThjQ!k<@4vaOj~&2R%XYB3j~)SIZjK_hNp? zXI2J3f?vHV{pI?B(d>5YHZqtVSc@~@{q5@R4lnP$`CGvDi`b*5#dj@!E#3*QwwzF_ z^tS*fWD@!sT-+uj}n2Zw9V^c_cL@8)j45t8^;aMi7HqU49DEOsY;arfJ}wsPh#vC}VOy#+});vN!yr+i+CZM9ZBsSK`XG^6PO}A)lT3KLIT`-Pw2wjic2UR^m#nFI))wR;|vS z`Jb5UX@w{nr%pTb4TxSZ(in)5*#aD&21Eo=;B_^wT@Scl3#g-wJ&Ai)1D03gD$l}i zFD(gC_UmFidzvA7aSx(=I~x$X7|?kfpWrB31n*A27Tk0T zD{yo@+AR-Ja;r}_L@(_@ly7GPE*In9m4Mf^z_`l+v!{W5`~#wo;;L};Q9uqHy;53% z!(b+DuLn%7L{H05y|mTS4N=~~C93BeR1e)$6PvjC#TR_-IGp#Pl$ zTe!tez!up;{9!qWUXHO(JJnM^R1oDG5QTz)47MWN6CUs={sB?27Kwd5poca9ypdJN z{wsw~z+u^y6KranJRD6tJa|B2owMf#@5_1TNzb zxfb8iFrUVi3rj+j9Xah(4>Sc+oiRjzLRS}#qHThatn_Jt>4ktLIu-iWdbAWwfhQgs zuvqeIeMy*t?WdjY!7Ia*Z)XEKU?|cE>;!7aawHCT%0KXwyX*p9Mr0Ct71cn|qL6Ku zmw@TTVmHy#>8AV(0UN{AmJ^wVKnAT-`VxLac<810d=fAQrfB}+tCs?%*spL5B=+Ti z$}&0>FufSho_;({+evte=6*4tgDwh9!#nXC@(r1UJmMPIi0!l;->_DJD!Kxk0~jA% zLIG2D@ATtoT2I1Lxa8A-+|_{FPT(Ax(zUoE>j_RP9?O|mu5HIXeMcV!_D_N*EMq+Z zQ?UQ^%c!)UWaFdjb21x@6Yqp$K8ma0DHYklSbk$Q0deW6U>LB4{=w_z@RX-dKc1!q zB`Y6Z2yaBw#J+@gVl7FRLYD_mu}9_G1DAn0oR;U1Z(!6 z@PH}4QLaJz(g1)lTmW5aC;k%Ez7VYs4%16Tm-;QpsI;SG>#qf-0Tbz`*!n;UixHS2 z%9H&}Z;puLRu1eikkr=6b?!?0~?Yaa;%Mgk!yUVbL@CSWS)qG@51 z>MoiU76RS@_yD@Wa(K$Pr(N#jbuvt4?<2dBNKiIjP-GN&E#M?M4czA%dJ}e(I0YO5 zi6);FF|6fa3Z9>Sn5G>C#^Q@cN92V3c0d+O2~L3I2c}3MvQkGP2V0UAF10FMFsf#lQE0$<`N%h5hQ?b9!# z(vGr^pEweJ(yM_r&_2J>oPa6*DYPmiz2J<`4==XPYQQlr#FGcprTosUbI~VO@#*$U z;rD1|6i`8X!dn6zug3T7fSUZL@JjF$zyH+&XY&292;c?iS<+yE%i>;sS1CRhTO&DL7-Ihk_EL}6hm#5Bgh!D%TK5H? ze;ubNl{4ydCCT|8?d9*P1?SAk+tn{Jq?Lhqb}Z z9V{>R^g`EMS#SngcS?3Q8UKbYCq-1xTctUh26-3s zw`-^kQWItoP4Uy__xRLpy+bMEP)6sc>U8QeJ(Y;-D<70T#PwaDJ~hut4x~nd@7=Hm z*Aw!PsD&(>*-z zI!e2F=tVtT??+*c+uJ(N3UA?@7Ur0pYz!fT(71BtkT&g6&(U@~Sq+}!)sJkBwuXr( zc#hXTvN_s{BtrbL&e1j)k?)Unj<#Tk9(j(3^`{>-&Da7U4(K@^)_Z=`bF}76RNQkM zdO{E8Pdn;4T1Og=Bx8_G=ZUhLEVI{QX7H_ zk{j{Psc+&JH63J`ya^2n>HaXR6MWby+gGCX&G<*n9co2v#=URjn(9K(!-J^J^VjHS z_~e6Vc_(TaZp7yg(Zhemn0#i1h(0=T(0Q)MjHn~_Bxb?9sh>neqO5PR=zdvQ3NF;`oBwphh&{rTga;Wxoqo-NH&^6BH-`EQDsAm5F*I4r?>BClJZ|ss^Yw>vwpPL8ggK{d>6~oh4*BoAacKGS)C*ST%U-C&U4mZz` z43B>-q07#G{y5;MSuPI0c6R&W-?F<)rvEZ?(o;tdr}mu^@0Z@ydHo#!tQ9SNbYRH# zv#$F&`dQyC6iTg}Wh_DA=d3>F&2~9DuSZ%BYZLCGxqlV&rv|Jv=f!NF;q2%2Id3)f zOeDMNEA`wC%GvIQwxDXMJzgAKM@NI$zpr`gT#m!cUc=&CXZGBWhb!ismzm@7%&FIM z9f4bXhQj!H{mk3_cFYR@ew#7l|wx8`m z_h{_-d8_i5xKb)&?k1ZQer+- z9shHD=Um>O1G@#4UJo_*VpO6=Sv`DS%Zv-bK{g}ew79ftJxz{dEdsOKP5f#+l65;) z0VM96`Kqj@j%3;Ep143h46Sd+e?ITUN|Zgdf4nVWKrezFFehH8UAPxlfzOTjeP_3Y z+C7XNzPYzs!*(YZzc5T|54!in(F`CxcAq_41m3C%e=s=z*u)+`4)|K9JP5AVaP#v$ zJbisXc#=nqmV_MVtpW#uYmV_T;H`KO7EtY9TpX_B&o2wtSDlWsC{Oq}VY;}NQnYVa z>N(4at-!V3Cp(YU(dFy*mi)6}*^Zk$`QyRQUIOME_t%?i*v{&whPAx0`$70|(7htu zi@=pWKVE3on#X=x>^x|?pJl0kyRnQ+)BD4@m5F}tV}f{k!Fmi_oYS_eoZVv&{n;&R zDw>DyFN34(=kJ`SzlpyrGLMgkM#lU`2ceDr`F>XtOXq8DuYN-kaop-%oC1VL= 1 -AND CHARINDEX('F',userTypeDefaultPermissions,0) < 1 -; - -UPDATE umbracoUserType SET userTypeDefaultPermissions = userTypeDefaultPermissions + 'H' WHERE userTypeAlias = 'writer' -AND CHARINDEX('F',userTypeDefaultPermissions,0) < 1 -; - -INSERT INTO umbracoUser2NodePermission (userID, nodeId, permission) -SELECT userID, nodeId, 'F' FROM umbracoUser2NodePermission WHERE permission='A' -; - -INSERT INTO umbracoUser2NodePermission (userID, nodeId, permission) -SELECT DISTINCT userID, nodeId, 'H' FROM umbracoUser2NodePermission WHERE userId IN -(SELECT umbracoUser.id FROM umbracoUserType INNER JOIN umbracoUser ON umbracoUserType.id = umbracoUser.userType WHERE (umbracoUserType.userTypeAlias = 'writer')) -; - -alter TABLE [cmsContentType] -add [masterContentType] int NULL CONSTRAINT -[DF_cmsContentType_masterContentType] DEFAULT (0) -; -CREATE TABLE [cmsTagRelationship]( - [nodeId] [int] NOT NULL, - [tagId] [int] NOT NULL) -; - -CREATE TABLE [cmsTags]( - [id] [int] IDENTITY(1,1) NOT NULL, - [tag] [nvarchar](200) NULL, - [parentId] [int] NULL, - [group] [nvarchar](100) NULL) -; -alter TABLE [umbracoUser] -add [defaultToLiveEditing] bit NOT NULL CONSTRAINT -[DF_umbracoUser_defaultToLiveEditing] DEFAULT (0) -; - -CREATE TABLE [cmsPreviewXml]( - [nodeId] [int] NOT NULL, - [versionId] [uniqueidentifier] NOT NULL, - [timestamp] [datetime] NOT NULL, - [xml] [ntext] NOT NULL) -; - - -ALTER TABLE [umbracoNode] ALTER COLUMN id IDENTITY(1042,1) -; -ALTER TABLE [cmsContentType] ALTER COLUMN pk IDENTITY(535,1) -; -ALTER TABLE [umbracoUser] ALTER COLUMN id IDENTITY(1,1) -; -ALTER TABLE [umbracoUserType] ALTER COLUMN id IDENTITY(5,1) -; -ALTER TABLE [cmsMacroPropertyType] ALTER COLUMN id IDENTITY(26,1) -; -ALTER TABLE [cmsTab] ALTER COLUMN id IDENTITY(6,1) -; -ALTER TABLE [cmsPropertyType] ALTER COLUMN id IDENTITY(28,1) -; -ALTER TABLE [umbracoLanguage] ALTER COLUMN id IDENTITY(2,1) -; -ALTER TABLE [cmsDataType] ALTER COLUMN pk IDENTITY(39,1) -; -ALTER TABLE [cmsDataTypePreValues] ALTER COLUMN id IDENTITY(5,1) \ No newline at end of file diff --git a/src/Umbraco.Tests/Migrations/SqlScripts/SqlResources.Designer.cs b/src/Umbraco.Tests/Migrations/SqlScripts/SqlResources.Designer.cs deleted file mode 100644 index 7a7cee0ce3..0000000000 --- a/src/Umbraco.Tests/Migrations/SqlScripts/SqlResources.Designer.cs +++ /dev/null @@ -1,143 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace Umbraco.Tests.Migrations.SqlScripts { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class SqlResources { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal SqlResources() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Umbraco.Tests.Migrations.SqlScripts.SqlResources", typeof(SqlResources).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized string similar to CREATE TABLE [umbracoUserType] ( - /// [id] int NOT NULL IDENTITY (5,1) - ///, [userTypeAlias] nvarchar(50) NULL - ///, [userTypeName] nvarchar(255) NOT NULL - ///, [userTypeDefaultPermissions] nvarchar(50) NULL - ///); - ///GO - ///CREATE TABLE [umbracoUser2NodePermission] ( - /// [userId] int NOT NULL - ///, [nodeId] int NOT NULL - ///, [permission] nchar(1) NOT NULL - ///); - ///GO - ///CREATE TABLE [umbracoUser2NodeNotify] ( - /// [userId] int NOT NULL - ///, [nodeId] int NOT NULL - ///, [action] nchar(1) NOT NULL - ///); - ///GO - ///CREATE TABLE [umbracoUser] ( - /// [id] in [rest of string was truncated]";. - /// - internal static string SqlCe_SchemaAndData_4110 { - get { - return ResourceManager.GetString("SqlCe_SchemaAndData_4110", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to CREATE TABLE [umbracoRelation] - ///( - ///[id] [int] NOT NULL IDENTITY(1, 1), - ///[parentId] [int] NOT NULL, - ///[childId] [int] NOT NULL, - ///[relType] [int] NOT NULL, - ///[datetime] [datetime] NOT NULL CONSTRAINT [DF_umbracoRelation_datetime] DEFAULT (getdate()), - ///[comment] [nvarchar] (1000) NOT NULL - ///) - /// - ///; - ///ALTER TABLE [umbracoRelation] ADD CONSTRAINT [PK_umbracoRelation] PRIMARY KEY ([id]) - ///; - ///CREATE TABLE [cmsDocument] - ///( - ///[nodeId] [int] NOT NULL, - ///[published] [bit] NOT NULL, - ///[documentUser] [int] NOT [rest of string was truncated]";. - /// - internal static string SqlCeTotal_480 { - get { - return ResourceManager.GetString("SqlCeTotal_480", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to /******************************************************************************************* - /// - /// - /// - /// - /// - /// - /// - /// Umbraco database installation script for SQL Server - /// - ///IMPORTANT IMPORTANT IMPORTANT IMPORTANT IMPORTANT IMPORTANT IMPORTANT IMPORTANT IMPORTANT - /// - /// Database version: 4.8.0.0 - /// - /// Please increment this version number if ANY change is made to this script, - /// so compatibility with scripts for other database systems can be verified easily. - /// The first 3 digits depict the Umbraco versi [rest of string was truncated]";. - /// - internal static string SqlServerTotal_480 { - get { - return ResourceManager.GetString("SqlServerTotal_480", resourceCulture); - } - } - } -} diff --git a/src/Umbraco.Tests/Migrations/SqlScripts/SqlResources.resx b/src/Umbraco.Tests/Migrations/SqlScripts/SqlResources.resx deleted file mode 100644 index 20ba6d0e8e..0000000000 --- a/src/Umbraco.Tests/Migrations/SqlScripts/SqlResources.resx +++ /dev/null @@ -1,130 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - sqlcetotal-480.sql;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 - - - sqlce-schemaanddata-4110.sql;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-16 - - - sqlservertotal-480.sql;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 - - diff --git a/src/Umbraco.Tests/Migrations/SqlScripts/SqlServerTotal-480.sql b/src/Umbraco.Tests/Migrations/SqlScripts/SqlServerTotal-480.sql deleted file mode 100644 index e69d87f759..0000000000 --- a/src/Umbraco.Tests/Migrations/SqlScripts/SqlServerTotal-480.sql +++ /dev/null @@ -1,1671 +0,0 @@ -/******************************************************************************************* - - - - - - - - Umbraco database installation script for SQL Server - -IMPORTANT IMPORTANT IMPORTANT IMPORTANT IMPORTANT IMPORTANT IMPORTANT IMPORTANT IMPORTANT - - Database version: 4.8.0.0 - - Please increment this version number if ANY change is made to this script, - so compatibility with scripts for other database systems can be verified easily. - The first 3 digits depict the Umbraco version, the last digit is the database version. - (e.g. version 4.0.0.3 means "Umbraco version 4.0.0, database version 3") - - Check-in policy: only commit this script if - * you ran the Umbraco installer completely; - * you ran it on the targetted database system; - * you ran the Runway and Module installations; - * you were able to browse the Boost site; - * you were able to open the Umbraco administration panel; - * you have documented the code change in this script; - * you have incremented the version number in this script. - -IMPORTANT IMPORTANT IMPORTANT IMPORTANT IMPORTANT IMPORTANT IMPORTANT IMPORTANT IMPORTANT - - - - - - - -********************************************************************************************/ - -CREATE TABLE [umbracoRelation] -( -[id] [int] NOT NULL IDENTITY(1, 1), -[parentId] [int] NOT NULL, -[childId] [int] NOT NULL, -[relType] [int] NOT NULL, -[datetime] [datetime] NOT NULL CONSTRAINT [DF_umbracoRelation_datetime] DEFAULT (getdate()), -[comment] [nvarchar] (1000) COLLATE Danish_Norwegian_CI_AS NOT NULL -) - -; -ALTER TABLE [umbracoRelation] ADD CONSTRAINT [PK_umbracoRelation] PRIMARY KEY CLUSTERED ([id]) -; -CREATE TABLE [cmsDocument] -( -[nodeId] [int] NOT NULL, -[published] [bit] NOT NULL, -[documentUser] [int] NOT NULL, -[versionId] [uniqueidentifier] NOT NULL, -[text] [nvarchar] (255) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, -[releaseDate] [datetime] NULL, -[expireDate] [datetime] NULL, -[updateDate] [datetime] NOT NULL CONSTRAINT [DF_cmsDocument_updateDate] DEFAULT (getdate()), -[templateId] [int] NULL, -[alias] [nvarchar] (255) COLLATE Danish_Norwegian_CI_AS NULL , -[newest] [bit] NOT NULL CONSTRAINT [DF_cmsDocument_newest] DEFAULT (0) -) - -; -ALTER TABLE [cmsDocument] ADD CONSTRAINT [PK_cmsDocument] PRIMARY KEY CLUSTERED ([versionId]) -; -CREATE TABLE [umbracoLog] -( -[id] [int] NOT NULL IDENTITY(1, 1), -[userId] [int] NOT NULL, -[NodeId] [int] NOT NULL, -[Datestamp] [datetime] NOT NULL CONSTRAINT [DF_umbracoLog_Datestamp] DEFAULT (getdate()), -[logHeader] [nvarchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, -[logComment] [nvarchar] (1000) COLLATE Danish_Norwegian_CI_AS NULL -) - -; -ALTER TABLE [umbracoLog] ADD CONSTRAINT [PK_umbracoLog] PRIMARY KEY CLUSTERED ([id]) -; - -/* TABLES ARE NEVER USED, REMOVED FOR 4.1 - -CREATE TABLE [umbracoUserGroup] -( -[id] [smallint] NOT NULL IDENTITY(1, 1), -[userGroupName] [nvarchar] (255) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL -) -; -ALTER TABLE [umbracoUserGroup] ADD CONSTRAINT [PK_userGroup] PRIMARY KEY CLUSTERED ([id]) -; -CREATE TABLE [umbracoUser2userGroup] -( -[user] [int] NOT NULL, -[userGroup] [smallint] NOT NULL -) -; -ALTER TABLE [umbracoUser2userGroup] ADD CONSTRAINT [PK_user2userGroup] PRIMARY KEY CLUSTERED ([user], [userGroup]) -; - -*/ - -CREATE TABLE [umbracoApp] -( -[sortOrder] [tinyint] NOT NULL CONSTRAINT [DF_app_sortOrder] DEFAULT (0), -[appAlias] [nvarchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, -[appIcon] [nvarchar] (255) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, -[appName] [nvarchar] (255) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, -[appInitWithTreeAlias] [nvarchar] (255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL -) - -; -ALTER TABLE [umbracoApp] ADD CONSTRAINT [PK_umbracoApp] PRIMARY KEY CLUSTERED ([appAlias]) -; -CREATE TABLE [cmsPropertyData] -( -[id] [int] NOT NULL IDENTITY(1, 1), -[contentNodeId] [int] NOT NULL, -[versionId] [uniqueidentifier] NULL, -[propertytypeid] [int] NOT NULL, -[dataInt] [int] NULL, -[dataDate] [datetime] NULL, -[dataNvarchar] [nvarchar] (500) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, -[dataNtext] [ntext] COLLATE SQL_Latin1_General_CP1_CI_AS NULL -) - -; -ALTER TABLE [cmsPropertyData] ADD CONSTRAINT [PK_cmsPropertyData] PRIMARY KEY CLUSTERED ([id]) -; -CREATE NONCLUSTERED INDEX [IX_cmsPropertyData] ON [cmsPropertyData] ([id]) -; -CREATE NONCLUSTERED INDEX [IX_cmsPropertyData_1] ON [cmsPropertyData] ([contentNodeId]) -; -CREATE NONCLUSTERED INDEX [IX_cmsPropertyData_2] ON [cmsPropertyData] ([versionId]) -; -CREATE NONCLUSTERED INDEX [IX_cmsPropertyData_3] ON [cmsPropertyData] ([propertytypeid]) -; -CREATE TABLE [cmsContent] -( -[pk] [int] NOT NULL IDENTITY(1, 1), -[nodeId] [int] NOT NULL, -[contentType] [int] NOT NULL -) - -; -ALTER TABLE [cmsContent] ADD CONSTRAINT [PK_cmsContent] PRIMARY KEY CLUSTERED ([pk]) -; -CREATE TABLE [cmsContentType] -( -[pk] [int] NOT NULL IDENTITY(1, 1), -[nodeId] [int] NOT NULL, -[alias] [nvarchar] (255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, -[icon] [nvarchar] (255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL -) - -; -ALTER TABLE [cmsContentType] ADD CONSTRAINT [PK_cmsContentType] PRIMARY KEY CLUSTERED ([pk]) -; -CREATE TABLE [cmsMacroPropertyType] -( -[id] [smallint] NOT NULL IDENTITY(1, 1), -[macroPropertyTypeAlias] [nvarchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, -[macroPropertyTypeRenderAssembly] [nvarchar] (255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, -[macroPropertyTypeRenderType] [nvarchar] (255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, -[macroPropertyTypeBaseType] [nvarchar] (255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL -) - -; -ALTER TABLE [cmsMacroPropertyType] ADD CONSTRAINT [PK_macroPropertyType] PRIMARY KEY CLUSTERED ([id]) -; - -/* TABLE IS NEVER USED, REMOVED FOR 4.1 - -CREATE TABLE [umbracoStylesheetProperty] -( -[id] [smallint] NOT NULL IDENTITY(1, 1), -[stylesheetPropertyEditor] [bit] NOT NULL CONSTRAINT [DF_stylesheetProperty_stylesheetPropertyEditor] DEFAULT (0), -[stylesheet] [tinyint] NOT NULL, -[stylesheetPropertyAlias] [nvarchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, -[stylesheetPropertyName] [nvarchar] (255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, -[stylesheetPropertyValue] [nvarchar] (400) COLLATE SQL_Latin1_General_CP1_CI_AS NULL -) -; - -ALTER TABLE [umbracoStylesheetProperty] ADD CONSTRAINT [PK_stylesheetProperty] PRIMARY KEY CLUSTERED ([id]) -; - -*/ - -CREATE TABLE [cmsTab] -( -[id] [int] NOT NULL IDENTITY(1, 1), -[contenttypeNodeId] [int] NOT NULL, -[text] [nvarchar] (255) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, -[sortorder] [int] NOT NULL -) - -; -ALTER TABLE [cmsTab] ADD CONSTRAINT [PK_cmsTab] PRIMARY KEY CLUSTERED ([id]) -; -CREATE TABLE [cmsTemplate] -( -[pk] [int] NOT NULL IDENTITY(1, 1), -[nodeId] [int] NOT NULL, -[master] [int] NULL, -[alias] [nvarchar] (100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, -[design] [ntext] COLLATE Danish_Norwegian_CI_AS NOT NULL -) - -; -ALTER TABLE [cmsTemplate] ADD CONSTRAINT [PK_templates] PRIMARY KEY CLUSTERED ([pk]) -; -CREATE TABLE [umbracoUser2app] -( -[user] [int] NOT NULL, -[app] [nvarchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL -) - -; -ALTER TABLE [umbracoUser2app] ADD CONSTRAINT [PK_user2app] PRIMARY KEY CLUSTERED ([user], [app]) -; -CREATE TABLE [umbracoUserType] -( -[id] [smallint] NOT NULL IDENTITY(1, 1), -[userTypeAlias] [nvarchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, -[userTypeName] [nvarchar] (255) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, -[userTypeDefaultPermissions] [nvarchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL -) - -; -ALTER TABLE [umbracoUserType] ADD CONSTRAINT [PK_userType] PRIMARY KEY CLUSTERED ([id]) -; -CREATE TABLE [umbracoUser] -( -[id] [int] NOT NULL IDENTITY(1, 1), -[userDisabled] [bit] NOT NULL CONSTRAINT [DF_umbracoUser_userDisabled] DEFAULT (0), -[userNoConsole] [bit] NOT NULL CONSTRAINT [DF_umbracoUser_userNoConsole] DEFAULT (0), -[userType] [smallint] NOT NULL, -[startStructureID] [int] NOT NULL, -[startMediaID] [int] NULL, -[userName] [nvarchar] (255) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, -[userLogin] [nvarchar] (125) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, -[userPassword] [nvarchar] (125) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, -[userEmail] [nvarchar] (255) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, -[userDefaultPermissions] [nvarchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, -[userLanguage] [nvarchar] (10) COLLATE SQL_Latin1_General_CP1_CI_AS NULL -) - -; -ALTER TABLE [umbracoUser] ADD CONSTRAINT [PK_user] PRIMARY KEY CLUSTERED ([id]) -; -CREATE TABLE [cmsDocumentType] -( -[contentTypeNodeId] [int] NOT NULL, -[templateNodeId] [int] NOT NULL, -[IsDefault] [bit] NOT NULL CONSTRAINT [DF_cmsDocumentType_IsDefault] DEFAULT (0) -) - -; -ALTER TABLE [cmsDocumentType] ADD CONSTRAINT [PK_cmsDocumentType] PRIMARY KEY CLUSTERED ([contentTypeNodeId], [templateNodeId]) -; -CREATE TABLE [cmsMemberType] -( -[pk] [int] NOT NULL IDENTITY(1, 1), -[NodeId] [int] NOT NULL, -[propertytypeId] [int] NOT NULL, -[memberCanEdit] [bit] NOT NULL CONSTRAINT [DF_cmsMemberType_memberCanEdit] DEFAULT (0), -[viewOnProfile] [bit] NOT NULL CONSTRAINT [DF_cmsMemberType_viewOnProfile] DEFAULT (0) -) - -; -ALTER TABLE [cmsMemberType] ADD CONSTRAINT [PK_cmsMemberType] PRIMARY KEY CLUSTERED ([pk]) -; -CREATE TABLE [cmsMember] -( -[nodeId] [int] NOT NULL, -[Email] [nvarchar] (1000) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL CONSTRAINT [DF_cmsMember_Email] DEFAULT (''), -[LoginName] [nvarchar] (1000) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL CONSTRAINT [DF_cmsMember_LoginName] DEFAULT (''), -[Password] [nvarchar] (1000) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL CONSTRAINT [DF_cmsMember_Password] DEFAULT ('') -) - -; -CREATE TABLE [umbracoNode] -( -[id] [int] NOT NULL IDENTITY(1, 1), -[trashed] [bit] NOT NULL CONSTRAINT [DF_umbracoNode_trashed] DEFAULT (0), -[parentID] [int] NOT NULL, -[nodeUser] [int] NULL, -[level] [smallint] NOT NULL, -[path] [nvarchar] (150) COLLATE Danish_Norwegian_CI_AS NOT NULL, -[sortOrder] [int] NOT NULL, -[uniqueID] [uniqueidentifier] NULL, -[text] [nvarchar] (255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, -[nodeObjectType] [uniqueidentifier] NULL, -[createDate] [datetime] NOT NULL CONSTRAINT [DF_umbracoNode_createDate] DEFAULT (getdate()) -) - -; -ALTER TABLE [umbracoNode] ADD CONSTRAINT [PK_structure] PRIMARY KEY CLUSTERED ([id]) -; -CREATE NONCLUSTERED INDEX [IX_umbracoNodeParentId] ON [umbracoNode] ([parentID]) -; -CREATE NONCLUSTERED INDEX [IX_umbracoNodeObjectType] ON [umbracoNode] ([nodeObjectType]) -; -CREATE TABLE [cmsPropertyType] -( -[id] [int] NOT NULL IDENTITY(1, 1), -[dataTypeId] [int] NOT NULL, -[contentTypeId] [int] NOT NULL, -[tabId] [int] NULL, -[Alias] [nvarchar] (255) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, -[Name] [nvarchar] (255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, -[helpText] [nvarchar] (1000) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, -[sortOrder] [int] NOT NULL CONSTRAINT [DF__cmsProper__sortO__1EA48E88] DEFAULT (0), -[mandatory] [bit] NOT NULL CONSTRAINT [DF__cmsProper__manda__2180FB33] DEFAULT (0), -[validationRegExp] [nvarchar] (255) COLLATE Danish_Norwegian_CI_AS NULL, -[Description] [nvarchar] (2000) COLLATE Danish_Norwegian_CI_AS NULL -) - -; -ALTER TABLE [cmsPropertyType] ADD CONSTRAINT [PK_cmsPropertyType] PRIMARY KEY CLUSTERED ([id]) -; - -CREATE TABLE [cmsMacroProperty] -( -[id] [int] NOT NULL IDENTITY(1, 1), -[macroPropertyHidden] [bit] NOT NULL CONSTRAINT [DF_macroProperty_macroPropertyHidden] DEFAULT (0), -[macroPropertyType] [smallint] NOT NULL, -[macro] [int] NOT NULL, -[macroPropertySortOrder] [tinyint] NOT NULL CONSTRAINT [DF_macroProperty_macroPropertySortOrder] DEFAULT (0), -[macroPropertyAlias] [nvarchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, -[macroPropertyName] [nvarchar] (255) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL -) - -; -ALTER TABLE [cmsMacroProperty] ADD CONSTRAINT [PK_macroProperty] PRIMARY KEY CLUSTERED ([id]) -; -CREATE TABLE [cmsMacro] -( -[id] [int] NOT NULL IDENTITY(1, 1), -[macroUseInEditor] [bit] NOT NULL CONSTRAINT [DF_macro_macroUseInEditor] DEFAULT (0), -[macroRefreshRate] [int] NOT NULL CONSTRAINT [DF_macro_macroRefreshRate] DEFAULT (0), -[macroAlias] [nvarchar] (255) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, -[macroName] [nvarchar] (255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, -[macroScriptType] [nvarchar] (255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, -[macroScriptAssembly] [nvarchar] (255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, -[macroXSLT] [nvarchar] (255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, -[macroCacheByPage] [bit] NOT NULL CONSTRAINT [DF_cmsMacro_macroCacheByPage] DEFAULT (1), -[macroCachePersonalized] [bit] NOT NULL CONSTRAINT [DF_cmsMacro_macroCachePersonalized] DEFAULT (0), -[macroDontRender] [bit] NOT NULL CONSTRAINT [DF_cmsMacro_macroDontRender] DEFAULT (0) -) - -; -ALTER TABLE [cmsMacro] ADD CONSTRAINT [PK_macro] PRIMARY KEY CLUSTERED ([id]) -; -CREATE TABLE [cmsContentVersion] -( -[id] [int] NOT NULL IDENTITY(1, 1) PRIMARY KEY, -[ContentId] [int] NOT NULL, -[VersionId] [uniqueidentifier] NOT NULL, -[VersionDate] [datetime] NOT NULL CONSTRAINT [DF_cmsContentVersion_VersionDate] DEFAULT (getdate()) -) - -; -CREATE TABLE [umbracoAppTree] -( -[treeSilent] [bit] NOT NULL CONSTRAINT [DF_umbracoAppTree_treeSilent] DEFAULT (0), -[treeInitialize] [bit] NOT NULL CONSTRAINT [DF_umbracoAppTree_treeInitialize] DEFAULT (1), -[treeSortOrder] [tinyint] NOT NULL, -[appAlias] [nvarchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, -[treeAlias] [nvarchar] (150) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, -[treeTitle] [nvarchar] (255) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, -[treeIconClosed] [nvarchar] (255) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, -[treeIconOpen] [nvarchar] (255) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, -[treeHandlerAssembly] [nvarchar] (255) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, -[treeHandlerType] [nvarchar] (255) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, -[action] [nvarchar] (255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL -) - -; -ALTER TABLE [umbracoAppTree] ADD CONSTRAINT [PK_umbracoAppTree] PRIMARY KEY CLUSTERED ([appAlias], [treeAlias]) -; - -CREATE TABLE [cmsContentTypeAllowedContentType] -( -[Id] [int] NOT NULL, -[AllowedId] [int] NOT NULL -) - -; -ALTER TABLE [cmsContentTypeAllowedContentType] ADD CONSTRAINT [PK_cmsContentTypeAllowedContentType] PRIMARY KEY CLUSTERED ([Id], [AllowedId]) -; -CREATE TABLE [cmsContentXml] -( -[nodeId] [int] NOT NULL, -[xml] [ntext] COLLATE Danish_Norwegian_CI_AS NOT NULL -) - -; -ALTER TABLE [cmsContentXml] ADD CONSTRAINT [PK_cmsContentXml] PRIMARY KEY CLUSTERED ([nodeId]) -; -CREATE TABLE [cmsDataType] -( -[pk] [int] NOT NULL IDENTITY(1, 1), -[nodeId] [int] NOT NULL, -[controlId] [uniqueidentifier] NOT NULL, -[dbType] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL -) - -; -ALTER TABLE [cmsDataType] ADD CONSTRAINT [PK_cmsDataType] PRIMARY KEY CLUSTERED ([pk]) -; -CREATE TABLE [cmsDataTypePreValues] -( -[id] [int] NOT NULL IDENTITY(1, 1), -[datatypeNodeId] [int] NOT NULL, -[value] [nvarchar] (255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, -[sortorder] [int] NOT NULL, -[alias] [nvarchar] (50) COLLATE Danish_Norwegian_CI_AS NULL -) - -; -ALTER TABLE [cmsDataTypePreValues] ADD CONSTRAINT [PK_cmsDataTypePreValues] PRIMARY KEY CLUSTERED ([id]) -; -CREATE TABLE [cmsDictionary] -( -[pk] [int] NOT NULL IDENTITY(1, 1), -[id] [uniqueidentifier] NOT NULL, -[parent] [uniqueidentifier] NOT NULL, -[key] [nvarchar] (1000) COLLATE Danish_Norwegian_CI_AS NOT NULL -) - -; -ALTER TABLE [cmsDictionary] ADD CONSTRAINT [PK_cmsDictionary] PRIMARY KEY CLUSTERED ([pk]) -; -CREATE TABLE [cmsLanguageText] -( -[pk] [int] NOT NULL IDENTITY(1, 1), -[languageId] [int] NOT NULL, -[UniqueId] [uniqueidentifier] NOT NULL, -[value] [nvarchar] (1000) COLLATE Danish_Norwegian_CI_AS NOT NULL -) - -; -ALTER TABLE [cmsLanguageText] ADD CONSTRAINT [PK_cmsLanguageText] PRIMARY KEY CLUSTERED ([pk]) -; -CREATE TABLE [cmsMember2MemberGroup] -( -[Member] [int] NOT NULL, -[MemberGroup] [int] NOT NULL -) - -; -ALTER TABLE [cmsMember2MemberGroup] ADD CONSTRAINT [PK_cmsMember2MemberGroup] PRIMARY KEY CLUSTERED ([Member], [MemberGroup]) -; -CREATE TABLE [cmsStylesheet] -( -[nodeId] [int] NOT NULL, -[filename] [nvarchar] (100) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, -[content] [ntext] COLLATE SQL_Latin1_General_CP1_CI_AS NULL -) - -; -CREATE TABLE [cmsStylesheetProperty] -( -[nodeId] [int] NOT NULL, -[stylesheetPropertyEditor] [bit] NULL, -[stylesheetPropertyAlias] [nvarchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, -[stylesheetPropertyValue] [nvarchar] (400) COLLATE SQL_Latin1_General_CP1_CI_AS NULL -) - -; -CREATE TABLE [umbracoDomains] -( -[id] [int] NOT NULL IDENTITY(1, 1), -[domainDefaultLanguage] [int] NULL, -[domainRootStructureID] [int] NULL, -[domainName] [nvarchar] (255) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL -) - -; -ALTER TABLE [umbracoDomains] ADD CONSTRAINT [PK_domains] PRIMARY KEY CLUSTERED ([id]) -; -CREATE TABLE [umbracoLanguage] -( -[id] [smallint] NOT NULL IDENTITY(1, 1), -[languageISOCode] [nvarchar] (10) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, -[languageCultureName] [nvarchar] (100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL -) - -; -ALTER TABLE [umbracoLanguage] ADD CONSTRAINT [PK_language] PRIMARY KEY CLUSTERED ([id]) -; -CREATE TABLE [umbracoRelationType] -( -[id] [int] NOT NULL IDENTITY(1, 1), -[dual] [bit] NOT NULL, -[parentObjectType] [uniqueidentifier] NOT NULL, -[childObjectType] [uniqueidentifier] NOT NULL, -[name] [nvarchar] (255) COLLATE Danish_Norwegian_CI_AS NOT NULL, -[alias] [nvarchar] (100) COLLATE Danish_Norwegian_CI_AS NULL -) - -; -ALTER TABLE [umbracoRelationType] ADD CONSTRAINT [PK_umbracoRelationType] PRIMARY KEY CLUSTERED ([id]) -; - -/* TABLE IS NEVER USED, REMOVED FOR 4.1 - -CREATE TABLE [umbracoStylesheet] -( -[nodeId] [int] NOT NULL, -[filename] [nvarchar] (100) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, -[content] [ntext] COLLATE SQL_Latin1_General_CP1_CI_AS NULL -) -; - -ALTER TABLE [umbracoStylesheet] ADD CONSTRAINT [PK_umbracoStylesheet] PRIMARY KEY CLUSTERED ([nodeId]) -; - -*/ - -CREATE TABLE [umbracoUser2NodeNotify] -( -[userId] [int] NOT NULL, -[nodeId] [int] NOT NULL, -[action] [char] (1) COLLATE Danish_Norwegian_CI_AS NOT NULL -) - -; -ALTER TABLE [umbracoUser2NodeNotify] ADD CONSTRAINT [PK_umbracoUser2NodeNotify] PRIMARY KEY CLUSTERED ([userId], [nodeId], [action]) -; -CREATE TABLE [umbracoUser2NodePermission] -( -[userId] [int] NOT NULL, -[nodeId] [int] NOT NULL, -[permission] [char] (1) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL -) - -; -ALTER TABLE [umbracoUser2NodePermission] ADD CONSTRAINT [PK_umbracoUser2NodePermission] PRIMARY KEY CLUSTERED ([userId], [nodeId], [permission]) -; -ALTER TABLE [umbracoAppTree] ADD -CONSTRAINT [FK_umbracoAppTree_umbracoApp] FOREIGN KEY ([appAlias]) REFERENCES [umbracoApp] ([appAlias]) -; -ALTER TABLE [cmsPropertyData] ADD -CONSTRAINT [FK_cmsPropertyData_umbracoNode] FOREIGN KEY ([contentNodeId]) REFERENCES [umbracoNode] ([id]) -; - -/* TABLES ARE NEVER USED, REMOVED FOR 4.1 - -ALTER TABLE [umbracoUser2userGroup] ADD -CONSTRAINT [FK_user2userGroup_user] FOREIGN KEY ([user]) REFERENCES [umbracoUser] ([id]), -CONSTRAINT [FK_user2userGroup_userGroup] FOREIGN KEY ([userGroup]) REFERENCES [umbracoUserGroup] ([id]) -; - -*/ - -ALTER TABLE [cmsDocument] ADD -CONSTRAINT [FK_cmsDocument_umbracoNode] FOREIGN KEY ([nodeId]) REFERENCES [umbracoNode] ([id]) -; -ALTER TABLE [cmsMacroProperty] ADD -CONSTRAINT [FK_umbracoMacroProperty_umbracoMacroPropertyType] FOREIGN KEY ([macroPropertyType]) REFERENCES [cmsMacroPropertyType] ([id]) -; -ALTER TABLE [umbracoUser] ADD -CONSTRAINT [FK_user_userType] FOREIGN KEY ([userType]) REFERENCES [umbracoUserType] ([id]) -; -ALTER TABLE [umbracoNode] ADD -CONSTRAINT [FK_umbracoNode_umbracoNode] FOREIGN KEY ([parentID]) REFERENCES [umbracoNode] ([id]) -; -ALTER TABLE [cmsTemplate] ADD -CONSTRAINT [FK_cmsTemplate_umbracoNode] FOREIGN KEY ([nodeId]) REFERENCES [umbracoNode] ([id]) -; -ALTER TABLE [cmsContentType] ADD -CONSTRAINT [FK_cmsContentType_umbracoNode] FOREIGN KEY ([nodeId]) REFERENCES [umbracoNode] ([id]) -; -ALTER TABLE [cmsPropertyType] ADD -CONSTRAINT [FK_cmsPropertyType_cmsTab] FOREIGN KEY ([tabId]) REFERENCES [cmsTab] ([id]) -; -ALTER TABLE [cmsContent] ADD -CONSTRAINT [FK_cmsContent_umbracoNode] FOREIGN KEY ([nodeId]) REFERENCES [umbracoNode] ([id]) -; -ALTER TABLE [umbracoUser2app] ADD -CONSTRAINT [FK_umbracoUser2app_umbracoApp] FOREIGN KEY ([app]) REFERENCES [umbracoApp] ([appAlias]), -CONSTRAINT [FK_umbracoUser2app_umbracoUser] FOREIGN KEY ([user]) REFERENCES [umbracoUser] ([id]) -; - -ALTER TABLE [cmsTemplate] DROP CONSTRAINT [FK_cmsTemplate_umbracoNode] -; -ALTER TABLE [cmsPropertyType] DROP CONSTRAINT [FK_cmsPropertyType_cmsTab] -; -ALTER TABLE [cmsContent] DROP CONSTRAINT [FK_cmsContent_umbracoNode] -; -ALTER TABLE [cmsMacroProperty] DROP CONSTRAINT [FK_umbracoMacroProperty_umbracoMacroPropertyType] -; -ALTER TABLE [umbracoAppTree] DROP CONSTRAINT [FK_umbracoAppTree_umbracoApp] -; -ALTER TABLE [umbracoUser2app] DROP CONSTRAINT [FK_umbracoUser2app_umbracoApp] -; -ALTER TABLE [umbracoUser2app] DROP CONSTRAINT [FK_umbracoUser2app_umbracoUser] -; -ALTER TABLE [cmsPropertyData] DROP CONSTRAINT [FK_cmsPropertyData_umbracoNode] -; - -/* TABLE IS NEVER USED, REMOVED FOR 4.1 - -ALTER TABLE [umbracoUser2userGroup] DROP CONSTRAINT [FK_user2userGroup_user] -; -ALTER TABLE [umbracoUser2userGroup] DROP CONSTRAINT [FK_user2userGroup_userGroup] -; - -*/ - -ALTER TABLE [umbracoUser] DROP CONSTRAINT [FK_user_userType] -; -ALTER TABLE [cmsContentType] DROP CONSTRAINT [FK_cmsContentType_umbracoNode] -; -ALTER TABLE [cmsDocument] DROP CONSTRAINT [FK_cmsDocument_umbracoNode] -; -ALTER TABLE [umbracoNode] DROP CONSTRAINT [FK_umbracoNode_umbracoNode] -; -SET IDENTITY_INSERT [umbracoNode] ON -INSERT INTO [umbracoNode] ([id], [trashed], [parentID], [nodeUser], [level], [path], [sortOrder], [uniqueID], [text], [nodeObjectType], [createDate]) VALUES (-92, 0, -1, 0, 11, N'-1,-92', 37, 'f0bc4bfb-b499-40d6-ba86-058885a5178c', N'Label', '30a2a501-1978-4ddb-a57b-f7efed43ba3c', '20040930 14:01:49.920') -INSERT INTO [umbracoNode] ([id], [trashed], [parentID], [nodeUser], [level], [path], [sortOrder], [uniqueID], [text], [nodeObjectType], [createDate]) VALUES (-90, 0, -1, 0, 11, N'-1,-90', 35, '84c6b441-31df-4ffe-b67e-67d5bc3ae65a', N'Upload', '30a2a501-1978-4ddb-a57b-f7efed43ba3c', '20040930 14:01:49.920') -INSERT INTO [umbracoNode] ([id], [trashed], [parentID], [nodeUser], [level], [path], [sortOrder], [uniqueID], [text], [nodeObjectType], [createDate]) VALUES (-89, 0, -1, 0, 11, N'-1,-89', 34, 'c6bac0dd-4ab9-45b1-8e30-e4b619ee5da3', N'Textarea', '30a2a501-1978-4ddb-a57b-f7efed43ba3c', '20040930 14:01:49.920') -INSERT INTO [umbracoNode] ([id], [trashed], [parentID], [nodeUser], [level], [path], [sortOrder], [uniqueID], [text], [nodeObjectType], [createDate]) VALUES (-88, 0, -1, 0, 11, N'-1,-88', 33, '0cc0eba1-9960-42c9-bf9b-60e150b429ae', N'Textstring', '30a2a501-1978-4ddb-a57b-f7efed43ba3c', '20040930 14:01:49.920') -INSERT INTO [umbracoNode] ([id], [trashed], [parentID], [nodeUser], [level], [path], [sortOrder], [uniqueID], [text], [nodeObjectType], [createDate]) VALUES (-87, 0, -1, 0, 11, N'-1,-87', 32, 'ca90c950-0aff-4e72-b976-a30b1ac57dad', N'Richtext editor', '30a2a501-1978-4ddb-a57b-f7efed43ba3c', '20040930 14:01:49.920') -INSERT INTO [umbracoNode] ([id], [trashed], [parentID], [nodeUser], [level], [path], [sortOrder], [uniqueID], [text], [nodeObjectType], [createDate]) VALUES (-51, 0, -1, 0, 11, N'-1,-51', 4, '2e6d3631-066e-44b8-aec4-96f09099b2b5', N'Numeric', '30a2a501-1978-4ddb-a57b-f7efed43ba3c', '20040930 14:01:49.920') -INSERT INTO [umbracoNode] ([id], [trashed], [parentID], [nodeUser], [level], [path], [sortOrder], [uniqueID], [text], [nodeObjectType], [createDate]) VALUES (-49, 0, -1, 0, 11, N'-1,-49', 2, '92897bc6-a5f3-4ffe-ae27-f2e7e33dda49', N'True/false', '30a2a501-1978-4ddb-a57b-f7efed43ba3c', '20040930 14:01:49.920') -INSERT INTO [umbracoNode] ([id], [trashed], [parentID], [nodeUser], [level], [path], [sortOrder], [uniqueID], [text], [nodeObjectType], [createDate]) VALUES (-43, 0, -1, 0, 1, N'-1,-43', 2, 'fbaf13a8-4036-41f2-93a3-974f678c312a', N'Checkbox list', '30a2a501-1978-4ddb-a57b-f7efed43ba3c', '20041015 14:11:04.367') -INSERT INTO [umbracoNode] ([id], [trashed], [parentID], [nodeUser], [level], [path], [sortOrder], [uniqueID], [text], [nodeObjectType], [createDate]) VALUES (-42, 0, -1, 0, 1, N'-1,-42', 2, '0b6a45e7-44ba-430d-9da5-4e46060b9e03', N'Dropdown', '30a2a501-1978-4ddb-a57b-f7efed43ba3c', '20041015 14:10:59.000') -INSERT INTO [umbracoNode] ([id], [trashed], [parentID], [nodeUser], [level], [path], [sortOrder], [uniqueID], [text], [nodeObjectType], [createDate]) VALUES (-41, 0, -1, 0, 1, N'-1,-41', 2, '5046194e-4237-453c-a547-15db3a07c4e1', N'Date Picker', '30a2a501-1978-4ddb-a57b-f7efed43ba3c', '20041015 14:10:54.303') -INSERT INTO [umbracoNode] ([id], [trashed], [parentID], [nodeUser], [level], [path], [sortOrder], [uniqueID], [text], [nodeObjectType], [createDate]) VALUES (-40, 0, -1, 0, 1, N'-1,-40', 2, 'bb5f57c9-ce2b-4bb9-b697-4caca783a805', N'Radiobox', '30a2a501-1978-4ddb-a57b-f7efed43ba3c', '20041015 14:10:49.253') -INSERT INTO [umbracoNode] ([id], [trashed], [parentID], [nodeUser], [level], [path], [sortOrder], [uniqueID], [text], [nodeObjectType], [createDate]) VALUES (-39, 0, -1, 0, 1, N'-1,-39', 2, 'f38f0ac7-1d27-439c-9f3f-089cd8825a53', N'Dropdown multiple', '30a2a501-1978-4ddb-a57b-f7efed43ba3c', '20041015 14:10:44.480') -INSERT INTO [umbracoNode] ([id], [trashed], [parentID], [nodeUser], [level], [path], [sortOrder], [uniqueID], [text], [nodeObjectType], [createDate]) VALUES (-38, 0, -1, 0, 1, N'-1,-38', 2, 'fd9f1447-6c61-4a7c-9595-5aa39147d318', N'Folder Browser', '30a2a501-1978-4ddb-a57b-f7efed43ba3c', '20041015 14:10:37.020') -INSERT INTO [umbracoNode] ([id], [trashed], [parentID], [nodeUser], [level], [path], [sortOrder], [uniqueID], [text], [nodeObjectType], [createDate]) VALUES (-37, 0, -1, 0, 1, N'-1,-37', 2, '0225af17-b302-49cb-9176-b9f35cab9c17', N'Approved Color', '30a2a501-1978-4ddb-a57b-f7efed43ba3c', '20041015 14:10:30.580') -INSERT INTO [umbracoNode] ([id], [trashed], [parentID], [nodeUser], [level], [path], [sortOrder], [uniqueID], [text], [nodeObjectType], [createDate]) VALUES (-36, 0, -1, 0, 1, N'-1,-36', 2, 'e4d66c0f-b935-4200-81f0-025f7256b89a', N'Date Picker with time', '30a2a501-1978-4ddb-a57b-f7efed43ba3c', '20041015 14:10:23.007') -INSERT INTO [umbracoNode] ([id], [trashed], [parentID], [nodeUser], [level], [path], [sortOrder], [uniqueID], [text], [nodeObjectType], [createDate]) VALUES (-1, 0, -1, 0, 0, N'-1', 0, '916724a5-173d-4619-b97e-b9de133dd6f5', N'SYSTEM DATA: umbraco master root', 'ea7d8624-4cfe-4578-a871-24aa946bf34d', '20040930 14:01:49.920') -INSERT INTO [umbracoNode] ([id], [trashed], [parentID], [nodeUser], [level], [path], [sortOrder], [uniqueID], [text], [nodeObjectType], [createDate]) VALUES (1031, 0, -1, 1, 1, N'-1,1031', 2, 'f38bd2d7-65d0-48e6-95dc-87ce06ec2d3d', N'Folder', '4ea4382b-2f5a-4c2b-9587-ae9b3cf3602e', '20041201 00:13:40.743') -INSERT INTO [umbracoNode] ([id], [trashed], [parentID], [nodeUser], [level], [path], [sortOrder], [uniqueID], [text], [nodeObjectType], [createDate]) VALUES (1032, 0, -1, 1, 1, N'-1,1032', 2, 'cc07b313-0843-4aa8-bbda-871c8da728c8', N'Image', '4ea4382b-2f5a-4c2b-9587-ae9b3cf3602e', '20041201 00:13:43.737') -INSERT INTO [umbracoNode] ([id], [trashed], [parentID], [nodeUser], [level], [path], [sortOrder], [uniqueID], [text], [nodeObjectType], [createDate]) VALUES (1033, 0, -1, 1, 1, N'-1,1033', 2, '4c52d8ab-54e6-40cd-999c-7a5f24903e4d', N'File', '4ea4382b-2f5a-4c2b-9587-ae9b3cf3602e', '20041201 00:13:46.210') -INSERT INTO [umbracoNode] ([id], [trashed], [parentID], [nodeUser], [level], [path], [sortOrder], [uniqueID], [text], [nodeObjectType], [createDate]) VALUES (1034, 0, -1, 0, 1, N'-1,1034', 2, 'a6857c73-d6e9-480c-b6e6-f15f6ad11125', N'Content Picker', '30a2a501-1978-4ddb-a57b-f7efed43ba3c', '20060103 13:07:29.203') -INSERT INTO [umbracoNode] ([id], [trashed], [parentID], [nodeUser], [level], [path], [sortOrder], [uniqueID], [text], [nodeObjectType], [createDate]) VALUES (1035, 0, -1, 0, 1, N'-1,1035', 2, '93929b9a-93a2-4e2a-b239-d99334440a59', N'Media Picker', '30a2a501-1978-4ddb-a57b-f7efed43ba3c', '20060103 13:07:36.143') -INSERT INTO [umbracoNode] ([id], [trashed], [parentID], [nodeUser], [level], [path], [sortOrder], [uniqueID], [text], [nodeObjectType], [createDate]) VALUES (1036, 0, -1, 0, 1, N'-1,1036', 2, '2b24165f-9782-4aa3-b459-1de4a4d21f60', N'Member Picker', '30a2a501-1978-4ddb-a57b-f7efed43ba3c', '20060103 13:07:40.260') -INSERT INTO [umbracoNode] ([id], [trashed], [parentID], [nodeUser], [level], [path], [sortOrder], [uniqueID], [text], [nodeObjectType], [createDate]) VALUES (1038, 0, -1, 0, 1, N'-1,1038', 2, '1251c96c-185c-4e9b-93f4-b48205573cbd', N'Simple Editor', '30a2a501-1978-4ddb-a57b-f7efed43ba3c', '20060103 13:07:55.250') -INSERT INTO [umbracoNode] ([id], [trashed], [parentID], [nodeUser], [level], [path], [sortOrder], [uniqueID], [text], [nodeObjectType], [createDate]) VALUES (1039, 0, -1, 0, 1, N'-1,1039', 2, '06f349a9-c949-4b6a-8660-59c10451af42', N'Ultimate Picker', '30a2a501-1978-4ddb-a57b-f7efed43ba3c', '20060103 13:07:55.250') -INSERT INTO [umbracoNode] ([id], [trashed], [parentID], [nodeUser], [level], [path], [sortOrder], [uniqueID], [text], [nodeObjectType], [createDate]) VALUES (1040, 0, -1, 0, 1, N'-1,1040', 2, '21e798da-e06e-4eda-a511-ed257f78d4fa', N'Related Links', '30a2a501-1978-4ddb-a57b-f7efed43ba3c', '20060103 13:07:55.250') -INSERT INTO [umbracoNode] ([id], [trashed], [parentID], [nodeUser], [level], [path], [sortOrder], [uniqueID], [text], [nodeObjectType], [createDate]) VALUES (1041, 0, -1, 0, 1, N'-1,1041', 2, 'b6b73142-b9c1-4bf8-a16d-e1c23320b549', N'Tags', '30a2a501-1978-4ddb-a57b-f7efed43ba3c', '20060103 13:07:55.250') -INSERT INTO [umbracoNode] ([id], [trashed], [parentID], [nodeUser], [level], [path], [sortOrder], [uniqueID], [text], [nodeObjectType], [createDate]) VALUES (1042, 0, -1, 0, 1, N'-1,1042', 2, '0a452bd5-83f9-4bc3-8403-1286e13fb77e', N'Macro Container', '30a2a501-1978-4ddb-a57b-f7efed43ba3c', '20060103 13:07:55.250') -INSERT INTO [umbracoNode] ([id], [trashed], [parentID], [nodeUser], [level], [path], [sortOrder], [uniqueID], [text], [nodeObjectType], [createDate]) VALUES (1043, 0, -1, 0, 1, N'-1,1043', 2, '1df9f033-e6d4-451f-b8d2-e0cbc50a836f', N'Image Cropper', '30a2a501-1978-4ddb-a57b-f7efed43ba3c', '20060103 13:07:55.250') - -SET IDENTITY_INSERT [umbracoNode] OFF -; -SET IDENTITY_INSERT [cmsContentType] ON -INSERT INTO [cmsContentType] ([pk], [nodeId], [alias], [icon]) VALUES (532, 1031, N'Folder', N'folder.gif') -INSERT INTO [cmsContentType] ([pk], [nodeId], [alias], [icon]) VALUES (533, 1032, N'Image', N'mediaPhoto.gif') -INSERT INTO [cmsContentType] ([pk], [nodeId], [alias], [icon]) VALUES (534, 1033, N'File', N'mediaMulti.gif') -SET IDENTITY_INSERT [cmsContentType] OFF -; -SET IDENTITY_INSERT [umbracoUser] ON -INSERT INTO [umbracoUser] ([id], [userDisabled], [userNoConsole], [userType], [startStructureID], [startMediaID], [userName], [userLogin], [userPassword], [userEmail], [userDefaultPermissions], [userLanguage]) VALUES (0, 0, 0, 1, -1, -1, N'Administrator', N'admin', N'default', N'', NULL, N'en') -SET IDENTITY_INSERT [umbracoUser] OFF -; -SET IDENTITY_INSERT [umbracoUserType] ON -INSERT INTO [umbracoUserType] ([id], [userTypeAlias], [userTypeName], [userTypeDefaultPermissions]) VALUES (1, N'admin', N'Administrators', N'CADMOSKTPIURZ:') -INSERT INTO [umbracoUserType] ([id], [userTypeAlias], [userTypeName], [userTypeDefaultPermissions]) VALUES (2, N'writer', N'Writer', N'CAH:') -INSERT INTO [umbracoUserType] ([id], [userTypeAlias], [userTypeName], [userTypeDefaultPermissions]) VALUES (3, N'editor', N'Editors', N'CADMOSKTPUZ:') -SET IDENTITY_INSERT [umbracoUserType] OFF -; -INSERT INTO [umbracoUser2app] ([user], [app]) VALUES (0, N'content') -INSERT INTO [umbracoUser2app] ([user], [app]) VALUES (0, N'developer') -INSERT INTO [umbracoUser2app] ([user], [app]) VALUES (0, N'media') -INSERT INTO [umbracoUser2app] ([user], [app]) VALUES (0, N'member') -INSERT INTO [umbracoUser2app] ([user], [app]) VALUES (0, N'settings') -INSERT INTO [umbracoUser2app] ([user], [app]) VALUES (0, N'users') - -INSERT INTO [umbracoApp] ([appAlias], [sortOrder], [appIcon], [appName], [appInitWithTreeAlias]) VALUES (N'content', 0, N'.traycontent', N'Indhold', N'content') -INSERT INTO [umbracoApp] ([appAlias], [sortOrder], [appIcon], [appName], [appInitWithTreeAlias]) VALUES (N'developer', 7, N'.traydeveloper', N'Developer', NULL) -INSERT INTO [umbracoApp] ([appAlias], [sortOrder], [appIcon], [appName], [appInitWithTreeAlias]) VALUES (N'media', 1, N'.traymedia', N'Mediearkiv', NULL) -INSERT INTO [umbracoApp] ([appAlias], [sortOrder], [appIcon], [appName], [appInitWithTreeAlias]) VALUES (N'member', 8, N'.traymember', N'Medlemmer', NULL) -INSERT INTO [umbracoApp] ([appAlias], [sortOrder], [appIcon], [appName], [appInitWithTreeAlias]) VALUES (N'settings', 6, N'.traysettings', N'Indstillinger', NULL) -INSERT INTO [umbracoApp] ([appAlias], [sortOrder], [appIcon], [appName], [appInitWithTreeAlias]) VALUES (N'users', 5, N'.trayusers', N'Brugere', NULL) - - -INSERT INTO [umbracoAppTree] ([appAlias], [treeAlias], [treeSilent], [treeInitialize], [treeSortOrder], [treeTitle], [treeIconClosed], [treeIconOpen], [treeHandlerAssembly], [treeHandlerType]) VALUES (N'content', N'content', 1, 1, 0, N'Indhold', N'.sprTreeFolder', N'.sprTreeFolder_o', N'umbraco', N'loadContent') -INSERT INTO [umbracoAppTree] ([appAlias], [treeAlias], [treeSilent], [treeInitialize], [treeSortOrder], [treeTitle], [treeIconClosed], [treeIconOpen], [treeHandlerAssembly], [treeHandlerType]) VALUES (N'developer', N'cacheBrowser', 0, 1, 0, N'CacheBrowser', N'.sprTreeFolder', N'.sprTreeFolder_o', N'umbraco', N'loadCache') -INSERT INTO [umbracoAppTree] ([appAlias], [treeAlias], [treeSilent], [treeInitialize], [treeSortOrder], [treeTitle], [treeIconClosed], [treeIconOpen], [treeHandlerAssembly], [treeHandlerType]) VALUES (N'developer', N'CacheItem', 0, 0, 0, N'Cachebrowser', N'.sprTreeFolder', N'.sprTreeFolder_o', N'umbraco', N'loadCacheItem') -INSERT INTO [umbracoAppTree] ([appAlias], [treeAlias], [treeSilent], [treeInitialize], [treeSortOrder], [treeTitle], [treeIconClosed], [treeIconOpen], [treeHandlerAssembly], [treeHandlerType]) VALUES (N'developer', N'datatype', 0, 1, 1, N'Datatyper', N'.sprTreeFolder', N'.sprTreeFolder_o', N'umbraco', N'loadDataTypes') -INSERT INTO [umbracoAppTree] ([appAlias], [treeAlias], [treeSilent], [treeInitialize], [treeSortOrder], [treeTitle], [treeIconClosed], [treeIconOpen], [treeHandlerAssembly], [treeHandlerType]) VALUES (N'developer', N'macros', 0, 1, 2, N'Macros', N'.sprTreeFolder', N'.sprTreeFolder_o', N'umbraco', N'loadMacros') -INSERT INTO [umbracoAppTree] ([appAlias], [treeAlias], [treeSilent], [treeInitialize], [treeSortOrder], [treeTitle], [treeIconClosed], [treeIconOpen], [treeHandlerAssembly], [treeHandlerType]) VALUES (N'developer', N'xslt', 0, 1, 5, N'XSLT Files', N'.sprTreeFolder', N'.sprTreeFolder_o', N'umbraco', N'loadXslt') - -INSERT INTO [umbracoAppTree] ([appAlias], [treeAlias], [treeSilent], [treeInitialize], [treeSortOrder], [treeTitle], [treeIconClosed], [treeIconOpen], [treeHandlerAssembly], [treeHandlerType]) VALUES (N'media', N'media', 0, 1, 0, N'Medier', N'.sprTreeFolder', N'.sprTreeFolder_o', N'umbraco', N'loadMedia') -INSERT INTO [umbracoAppTree] ([appAlias], [treeAlias], [treeSilent], [treeInitialize], [treeSortOrder], [treeTitle], [treeIconClosed], [treeIconOpen], [treeHandlerAssembly], [treeHandlerType]) VALUES (N'member', N'member', 0, 1, 0, N'Medlemmer', N'.sprTreeFolder', N'.sprTreeFolder_o', N'umbraco', N'loadMembers') -INSERT INTO [umbracoAppTree] ([appAlias], [treeAlias], [treeSilent], [treeInitialize], [treeSortOrder], [treeTitle], [treeIconClosed], [treeIconOpen], [treeHandlerAssembly], [treeHandlerType]) VALUES (N'member', N'memberGroups', 0, 1, 1, N'MemberGroups', N'.sprTreeFolder', N'.sprTreeFolder_o', N'umbraco', N'loadMemberGroups') -INSERT INTO [umbracoAppTree] ([appAlias], [treeAlias], [treeSilent], [treeInitialize], [treeSortOrder], [treeTitle], [treeIconClosed], [treeIconOpen], [treeHandlerAssembly], [treeHandlerType]) VALUES (N'member', N'memberTypes', 0, 1, 2, N'Medlemstyper', N'.sprTreeFolder', N'.sprTreeFolder_o', N'umbraco', N'loadMemberTypes') -INSERT INTO [umbracoAppTree] ([appAlias], [treeAlias], [treeSilent], [treeInitialize], [treeSortOrder], [treeTitle], [treeIconClosed], [treeIconOpen], [treeHandlerAssembly], [treeHandlerType], [action]) VALUES (N'settings', N'dictionary', 0, 1, 3, N'Dictionary', N'.sprTreeFolder', N'.sprTreeFolder_o', N'umbraco', N'loadDictionary', N'openDictionary()') -INSERT INTO [umbracoAppTree] ([appAlias], [treeAlias], [treeSilent], [treeInitialize], [treeSortOrder], [treeTitle], [treeIconClosed], [treeIconOpen], [treeHandlerAssembly], [treeHandlerType]) VALUES (N'settings', N'languages', 0, 1, 4, N'Languages', N'.sprTreeFolder', N'.sprTreeFolder_o', N'umbraco', N'loadLanguages') -INSERT INTO [umbracoAppTree] ([appAlias], [treeAlias], [treeSilent], [treeInitialize], [treeSortOrder], [treeTitle], [treeIconClosed], [treeIconOpen], [treeHandlerAssembly], [treeHandlerType]) VALUES (N'settings', N'mediaTypes', 0, 1, 5, N'Medietyper', N'.sprTreeFolder', N'.sprTreeFolder_o', N'umbraco', N'loadMediaTypes') -INSERT INTO [umbracoAppTree] ([appAlias], [treeAlias], [treeSilent], [treeInitialize], [treeSortOrder], [treeTitle], [treeIconClosed], [treeIconOpen], [treeHandlerAssembly], [treeHandlerType]) VALUES (N'settings', N'documentTypes', 0, 1, 6, N'Dokumenttyper', N'.sprTreeFolder', N'.sprTreeFolder_o', N'umbraco', N'loadNodeTypes') -INSERT INTO [umbracoAppTree] ([appAlias], [treeAlias], [treeSilent], [treeInitialize], [treeSortOrder], [treeTitle], [treeIconClosed], [treeIconOpen], [treeHandlerAssembly], [treeHandlerType]) VALUES (N'settings', N'stylesheetProperty', 0, 0, 0, N'Stylesheet Property', N'', N'', N'umbraco', N'loadStylesheetProperty') -INSERT INTO [umbracoAppTree] ([appAlias], [treeAlias], [treeSilent], [treeInitialize], [treeSortOrder], [treeTitle], [treeIconClosed], [treeIconOpen], [treeHandlerAssembly], [treeHandlerType]) VALUES (N'settings', N'stylesheets', 0, 1, 0, N'Stylesheets', N'.sprTreeFolder', N'.sprTreeFolder_o', N'umbraco', N'loadStylesheets') -INSERT INTO [umbracoAppTree] ([appAlias], [treeAlias], [treeSilent], [treeInitialize], [treeSortOrder], [treeTitle], [treeIconClosed], [treeIconOpen], [treeHandlerAssembly], [treeHandlerType]) VALUES (N'settings', N'templates', 0, 1, 1, N'Templates', N'.sprTreeFolder', N'.sprTreeFolder_o', N'umbraco', N'loadTemplates') - -INSERT INTO [umbracoAppTree] ([appAlias], [treeAlias], [treeSilent], [treeInitialize], [treeSortOrder], [treeTitle], [treeIconClosed], [treeIconOpen], [treeHandlerAssembly], [treeHandlerType]) VALUES (N'users', N'users', 0, 1, 0, N'Brugere', N'.sprTreeFolder', N'.sprTreeFolder_o', N'umbraco', N'loadUsers') - -SET IDENTITY_INSERT [cmsMacroPropertyType] ON -INSERT INTO [cmsMacroPropertyType] ([id], [macroPropertyTypeAlias], [macroPropertyTypeRenderAssembly], [macroPropertyTypeRenderType], [macroPropertyTypeBaseType]) VALUES (3, N'mediaCurrent', N'umbraco.macroRenderings', N'media', N'Int32') -INSERT INTO [cmsMacroPropertyType] ([id], [macroPropertyTypeAlias], [macroPropertyTypeRenderAssembly], [macroPropertyTypeRenderType], [macroPropertyTypeBaseType]) VALUES (4, N'contentSubs', N'umbraco.macroRenderings', N'content', N'Int32') -INSERT INTO [cmsMacroPropertyType] ([id], [macroPropertyTypeAlias], [macroPropertyTypeRenderAssembly], [macroPropertyTypeRenderType], [macroPropertyTypeBaseType]) VALUES (5, N'contentRandom', N'umbraco.macroRenderings', N'content', N'Int32') -INSERT INTO [cmsMacroPropertyType] ([id], [macroPropertyTypeAlias], [macroPropertyTypeRenderAssembly], [macroPropertyTypeRenderType], [macroPropertyTypeBaseType]) VALUES (6, N'contentPicker', N'umbraco.macroRenderings', N'content', N'Int32') -INSERT INTO [cmsMacroPropertyType] ([id], [macroPropertyTypeAlias], [macroPropertyTypeRenderAssembly], [macroPropertyTypeRenderType], [macroPropertyTypeBaseType]) VALUES (13, N'number', N'umbraco.macroRenderings', N'numeric', N'Int32') -INSERT INTO [cmsMacroPropertyType] ([id], [macroPropertyTypeAlias], [macroPropertyTypeRenderAssembly], [macroPropertyTypeRenderType], [macroPropertyTypeBaseType]) VALUES (14, N'bool', N'umbraco.macroRenderings', N'yesNo', N'Boolean') -INSERT INTO [cmsMacroPropertyType] ([id], [macroPropertyTypeAlias], [macroPropertyTypeRenderAssembly], [macroPropertyTypeRenderType], [macroPropertyTypeBaseType]) VALUES (16, N'text', N'umbraco.macroRenderings', N'text', N'String') -INSERT INTO [cmsMacroPropertyType] ([id], [macroPropertyTypeAlias], [macroPropertyTypeRenderAssembly], [macroPropertyTypeRenderType], [macroPropertyTypeBaseType]) VALUES (17, N'contentTree', N'umbraco.macroRenderings', N'content', N'Int32') -INSERT INTO [cmsMacroPropertyType] ([id], [macroPropertyTypeAlias], [macroPropertyTypeRenderAssembly], [macroPropertyTypeRenderType], [macroPropertyTypeBaseType]) VALUES (18, N'contentType', N'umbraco.macroRenderings', N'contentTypeSingle', N'Int32') -INSERT INTO [cmsMacroPropertyType] ([id], [macroPropertyTypeAlias], [macroPropertyTypeRenderAssembly], [macroPropertyTypeRenderType], [macroPropertyTypeBaseType]) VALUES (19, N'contentTypeMultiple', N'umbraco.macroRenderings', N'contentTypeMultiple', N'Int32') -INSERT INTO [cmsMacroPropertyType] ([id], [macroPropertyTypeAlias], [macroPropertyTypeRenderAssembly], [macroPropertyTypeRenderType], [macroPropertyTypeBaseType]) VALUES (20, N'contentAll', N'umbraco.macroRenderings', N'content', N'Int32') -INSERT INTO [cmsMacroPropertyType] ([id], [macroPropertyTypeAlias], [macroPropertyTypeRenderAssembly], [macroPropertyTypeRenderType], [macroPropertyTypeBaseType]) VALUES (21, N'tabPicker', N'umbraco.macroRenderings', N'tabPicker', N'String') -INSERT INTO [cmsMacroPropertyType] ([id], [macroPropertyTypeAlias], [macroPropertyTypeRenderAssembly], [macroPropertyTypeRenderType], [macroPropertyTypeBaseType]) VALUES (22, N'tabPickerMultiple', N'umbraco.macroRenderings', N'tabPickerMultiple', N'String') -INSERT INTO [cmsMacroPropertyType] ([id], [macroPropertyTypeAlias], [macroPropertyTypeRenderAssembly], [macroPropertyTypeRenderType], [macroPropertyTypeBaseType]) VALUES (23, N'propertyTypePicker', N'umbraco.macroRenderings', N'propertyTypePicker', N'String') -INSERT INTO [cmsMacroPropertyType] ([id], [macroPropertyTypeAlias], [macroPropertyTypeRenderAssembly], [macroPropertyTypeRenderType], [macroPropertyTypeBaseType]) VALUES (24, N'propertyTypePickerMultiple', N'umbraco.macroRenderings', N'propertyTypePickerMultiple', N'String') -INSERT INTO [cmsMacroPropertyType] ([id], [macroPropertyTypeAlias], [macroPropertyTypeRenderAssembly], [macroPropertyTypeRenderType], [macroPropertyTypeBaseType]) VALUES (25, N'textMultiLine', N'umbraco.macroRenderings', N'textMultiple', N'String') -SET IDENTITY_INSERT [cmsMacroPropertyType] OFF -; -SET IDENTITY_INSERT [cmsTab] ON -INSERT INTO [cmsTab] ([id], [contenttypeNodeId], [text], [sortorder]) VALUES (3, 1032, N'Image', 1) -INSERT INTO [cmsTab] ([id], [contenttypeNodeId], [text], [sortorder]) VALUES (4, 1033, N'File', 1) -INSERT INTO [cmsTab] ([id], [contenttypeNodeId], [text], [sortorder]) VALUES (5, 1031, N'Contents', 1) -SET IDENTITY_INSERT [cmsTab] OFF -; -SET IDENTITY_INSERT [cmsPropertyType] ON -INSERT INTO [cmsPropertyType] ([id], [dataTypeId], [contentTypeId], [tabId], [Alias], [Name], [helpText], [sortOrder], [mandatory], [validationRegExp], [Description]) VALUES (6, -90, 1032, 3, N'umbracoFile', N'Upload image', NULL, 0, 0, NULL, NULL) -INSERT INTO [cmsPropertyType] ([id], [dataTypeId], [contentTypeId], [tabId], [Alias], [Name], [helpText], [sortOrder], [mandatory], [validationRegExp], [Description]) VALUES (7, -92, 1032, 3, N'umbracoWidth', N'Width', NULL, 0, 0, NULL, NULL) -INSERT INTO [cmsPropertyType] ([id], [dataTypeId], [contentTypeId], [tabId], [Alias], [Name], [helpText], [sortOrder], [mandatory], [validationRegExp], [Description]) VALUES (8, -92, 1032, 3, N'umbracoHeight', N'Height', NULL, 0, 0, NULL, NULL) -INSERT INTO [cmsPropertyType] ([id], [dataTypeId], [contentTypeId], [tabId], [Alias], [Name], [helpText], [sortOrder], [mandatory], [validationRegExp], [Description]) VALUES (9, -92, 1032, 3, N'umbracoBytes', N'Size', NULL, 0, 0, NULL, NULL) -INSERT INTO [cmsPropertyType] ([id], [dataTypeId], [contentTypeId], [tabId], [Alias], [Name], [helpText], [sortOrder], [mandatory], [validationRegExp], [Description]) VALUES (10, -92, 1032, 3, N'umbracoExtension', N'Type', NULL, 0, 0, NULL, NULL) -INSERT INTO [cmsPropertyType] ([id], [dataTypeId], [contentTypeId], [tabId], [Alias], [Name], [helpText], [sortOrder], [mandatory], [validationRegExp], [Description]) VALUES (24, -90, 1033, 4, N'umbracoFile', N'Upload file', NULL, 0, 0, NULL, NULL) -INSERT INTO [cmsPropertyType] ([id], [dataTypeId], [contentTypeId], [tabId], [Alias], [Name], [helpText], [sortOrder], [mandatory], [validationRegExp], [Description]) VALUES (25, -92, 1033, 4, N'umbracoExtension', N'Type', NULL, 0, 0, NULL, NULL) -INSERT INTO [cmsPropertyType] ([id], [dataTypeId], [contentTypeId], [tabId], [Alias], [Name], [helpText], [sortOrder], [mandatory], [validationRegExp], [Description]) VALUES (26, -92, 1033, 4, N'umbracoBytes', N'Size', NULL, 0, 0, NULL, NULL) -INSERT INTO [cmsPropertyType] ([id], [dataTypeId], [contentTypeId], [tabId], [Alias], [Name], [helpText], [sortOrder], [mandatory], [validationRegExp], [Description]) VALUES (27, -38, 1031, 5, N'contents', N'Contents:', NULL, 0, 0, NULL, NULL) -SET IDENTITY_INSERT [cmsPropertyType] OFF -; -SET IDENTITY_INSERT [umbracoLanguage] ON -INSERT INTO [umbracoLanguage] ([id], [languageISOCode], [languageCultureName]) VALUES (1, N'en-US', N'en-US') -SET IDENTITY_INSERT [umbracoLanguage] OFF -; -INSERT INTO [cmsContentTypeAllowedContentType] ([Id], [AllowedId]) VALUES (1031, 1031) -INSERT INTO [cmsContentTypeAllowedContentType] ([Id], [AllowedId]) VALUES (1031, 1032) -INSERT INTO [cmsContentTypeAllowedContentType] ([Id], [AllowedId]) VALUES (1031, 1033) -SET IDENTITY_INSERT [cmsDataType] ON -INSERT INTO [cmsDataType] ([pk], [nodeId], [controlId], [dbType]) VALUES (4, -49, '38b352c1-e9f8-4fd8-9324-9a2eab06d97a', 'Integer') -INSERT INTO [cmsDataType] ([pk], [nodeId], [controlId], [dbType]) VALUES (6, -51, '1413afcb-d19a-4173-8e9a-68288d2a73b8', 'Integer') -INSERT INTO [cmsDataType] ([pk], [nodeId], [controlId], [dbType]) VALUES (8, -87, '5E9B75AE-FACE-41c8-B47E-5F4B0FD82F83', 'Ntext') -INSERT INTO [cmsDataType] ([pk], [nodeId], [controlId], [dbType]) VALUES (9, -88, 'ec15c1e5-9d90-422a-aa52-4f7622c63bea', 'Nvarchar') -INSERT INTO [cmsDataType] ([pk], [nodeId], [controlId], [dbType]) VALUES (10, -89, '67db8357-ef57-493e-91ac-936d305e0f2a', 'Ntext') -INSERT INTO [cmsDataType] ([pk], [nodeId], [controlId], [dbType]) VALUES (11, -90, '5032a6e6-69e3-491d-bb28-cd31cd11086c', 'Nvarchar') -INSERT INTO [cmsDataType] ([pk], [nodeId], [controlId], [dbType]) VALUES (12, -91, 'a74ea9c9-8e18-4d2a-8cf6-73c6206c5da6', 'Nvarchar') -INSERT INTO [cmsDataType] ([pk], [nodeId], [controlId], [dbType]) VALUES (13, -92, '6c738306-4c17-4d88-b9bd-6546f3771597', 'Nvarchar') -INSERT INTO [cmsDataType] ([pk], [nodeId], [controlId], [dbType]) VALUES (14, -36, 'b6fb1622-afa5-4bbf-a3cc-d9672a442222', 'Date') -INSERT INTO [cmsDataType] ([pk], [nodeId], [controlId], [dbType]) VALUES (15, -37, 'f8d60f68-ec59-4974-b43b-c46eb5677985', 'Nvarchar') -INSERT INTO [cmsDataType] ([pk], [nodeId], [controlId], [dbType]) VALUES (16, -38, 'cccd4ae9-f399-4ed2-8038-2e88d19e810c', 'Nvarchar') -INSERT INTO [cmsDataType] ([pk], [nodeId], [controlId], [dbType]) VALUES (17, -39, '928639ed-9c73-4028-920c-1e55dbb68783', 'Nvarchar') -INSERT INTO [cmsDataType] ([pk], [nodeId], [controlId], [dbType]) VALUES (18, -40, 'a52c7c1c-c330-476e-8605-d63d3b84b6a6', 'Nvarchar') -INSERT INTO [cmsDataType] ([pk], [nodeId], [controlId], [dbType]) VALUES (19, -41, '23e93522-3200-44e2-9f29-e61a6fcbb79a', 'Date') -INSERT INTO [cmsDataType] ([pk], [nodeId], [controlId], [dbType]) VALUES (20, -42, 'a74ea9c9-8e18-4d2a-8cf6-73c6206c5da6', 'Integer') -INSERT INTO [cmsDataType] ([pk], [nodeId], [controlId], [dbType]) VALUES (21, -43, 'b4471851-82b6-4c75-afa4-39fa9c6a75e9', 'Nvarchar') -INSERT INTO [cmsDataType] ([pk], [nodeId], [controlId], [dbType]) VALUES (22, -44, 'a3776494-0574-4d93-b7de-efdfdec6f2d1', 'Ntext') -INSERT INTO [cmsDataType] ([pk], [nodeId], [controlId], [dbType]) VALUES (23, -128, 'a52c7c1c-c330-476e-8605-d63d3b84b6a6', 'Nvarchar') -INSERT INTO [cmsDataType] ([pk], [nodeId], [controlId], [dbType]) VALUES (24, -129, '928639ed-9c73-4028-920c-1e55dbb68783', 'Nvarchar') -INSERT INTO [cmsDataType] ([pk], [nodeId], [controlId], [dbType]) VALUES (25, -130, 'a74ea9c9-8e18-4d2a-8cf6-73c6206c5da6', 'Nvarchar') -INSERT INTO [cmsDataType] ([pk], [nodeId], [controlId], [dbType]) VALUES (26, -131, 'a74ea9c9-8e18-4d2a-8cf6-73c6206c5da6', 'Nvarchar') -INSERT INTO [cmsDataType] ([pk], [nodeId], [controlId], [dbType]) VALUES (27, -132, 'a74ea9c9-8e18-4d2a-8cf6-73c6206c5da6', 'Nvarchar') -INSERT INTO [cmsDataType] ([pk], [nodeId], [controlId], [dbType]) VALUES (28, -133, '6c738306-4c17-4d88-b9bd-6546f3771597', 'Ntext') -INSERT INTO [cmsDataType] ([pk], [nodeId], [controlId], [dbType]) VALUES (29, -134, '928639ed-9c73-4028-920c-1e55dbb68783', 'Nvarchar') -INSERT INTO [cmsDataType] ([pk], [nodeId], [controlId], [dbType]) VALUES (30, -50, 'aaf99bb2-dbbe-444d-a296-185076bf0484', 'Date') -INSERT INTO [cmsDataType] ([pk], [nodeId], [controlId], [dbType]) VALUES (31, 1034, '158aa029-24ed-4948-939e-c3da209e5fba', 'Integer') -INSERT INTO [cmsDataType] ([pk], [nodeId], [controlId], [dbType]) VALUES (32, 1035, 'ead69342-f06d-4253-83ac-28000225583b', 'Integer') -INSERT INTO [cmsDataType] ([pk], [nodeId], [controlId], [dbType]) VALUES (33, 1036, '39f533e4-0551-4505-a64b-e0425c5ce775', 'Integer') -INSERT INTO [cmsDataType] ([pk], [nodeId], [controlId], [dbType]) VALUES (35, 1038, '60b7dabf-99cd-41eb-b8e9-4d2e669bbde9', 'Ntext') -INSERT INTO [cmsDataType] ([pk], [nodeId], [controlId], [dbType]) VALUES (36, 1039, 'cdbf0b5d-5cb2-445f-bc12-fcaaec07cf2c', 'Ntext') -INSERT INTO [cmsDataType] ([pk], [nodeId], [controlId], [dbType]) VALUES (37, 1040, '71b8ad1a-8dc2-425c-b6b8-faa158075e63', 'Ntext') -INSERT INTO [cmsDataType] ([pk], [nodeId], [controlId], [dbType]) VALUES (38, 1041, '4023e540-92f5-11dd-ad8b-0800200c9a66', 'Ntext') -INSERT INTO [cmsDataType] ([pk], [nodeId], [controlId], [dbType]) VALUES (39, 1042, '474FCFF8-9D2D-11DE-ABC6-AD7A56D89593', 'Ntext') -INSERT INTO [cmsDataType] ([pk], [nodeId], [controlId], [dbType]) VALUES (40, 1043, '7A2D436C-34C2-410F-898F-4A23B3D79F54', 'Ntext') - -SET IDENTITY_INSERT [cmsDataType] OFF -; -ALTER TABLE [cmsTemplate] ADD CONSTRAINT [FK_cmsTemplate_umbracoNode] FOREIGN KEY ([nodeId]) REFERENCES [umbracoNode] ([id]) -ALTER TABLE [cmsPropertyType] ADD CONSTRAINT [FK_cmsPropertyType_cmsTab] FOREIGN KEY ([tabId]) REFERENCES [cmsTab] ([id]) -ALTER TABLE [cmsContent] ADD CONSTRAINT [FK_cmsContent_umbracoNode] FOREIGN KEY ([nodeId]) REFERENCES [umbracoNode] ([id]) -ALTER TABLE [cmsMacroProperty] ADD CONSTRAINT [FK_umbracoMacroProperty_umbracoMacroPropertyType] FOREIGN KEY ([macroPropertyType]) REFERENCES [cmsMacroPropertyType] ([id]) -ALTER TABLE [umbracoAppTree] ADD CONSTRAINT [FK_umbracoAppTree_umbracoApp] FOREIGN KEY ([appAlias]) REFERENCES [umbracoApp] ([appAlias]) -ALTER TABLE [umbracoUser2app] ADD CONSTRAINT [FK_umbracoUser2app_umbracoApp] FOREIGN KEY ([app]) REFERENCES [umbracoApp] ([appAlias]) -ALTER TABLE [umbracoUser2app] ADD CONSTRAINT [FK_umbracoUser2app_umbracoUser] FOREIGN KEY ([user]) REFERENCES [umbracoUser] ([id]) -ALTER TABLE [cmsPropertyData] ADD CONSTRAINT [FK_cmsPropertyData_umbracoNode] FOREIGN KEY ([contentNodeId]) REFERENCES [umbracoNode] ([id]) - -/* TABLE IS NEVER USED, REMOVED FOR 4.1 - -ALTER TABLE [umbracoUser2userGroup] ADD CONSTRAINT [FK_user2userGroup_user] FOREIGN KEY ([user]) REFERENCES [umbracoUser] ([id]) -ALTER TABLE [umbracoUser2userGroup] ADD CONSTRAINT [FK_user2userGroup_userGroup] FOREIGN KEY ([userGroup]) REFERENCES [umbracoUserGroup] ([id]) - -*/ - -ALTER TABLE [umbracoUser] ADD CONSTRAINT [FK_user_userType] FOREIGN KEY ([userType]) REFERENCES [umbracoUserType] ([id]) -ALTER TABLE [cmsContentType] ADD CONSTRAINT [FK_cmsContentType_umbracoNode] FOREIGN KEY ([nodeId]) REFERENCES [umbracoNode] ([id]) -ALTER TABLE [cmsDocument] ADD CONSTRAINT [FK_cmsDocument_umbracoNode] FOREIGN KEY ([nodeId]) REFERENCES [umbracoNode] ([id]) -ALTER TABLE [umbracoNode] ADD CONSTRAINT [FK_umbracoNode_umbracoNode] FOREIGN KEY ([parentID]) REFERENCES [umbracoNode] ([id]) -; -set identity_insert umbracoNode on -insert into umbracoNode -(id, trashed, parentID, nodeUser, level, path, sortOrder, uniqueID, text, nodeObjectType) -values -(-20, 0, -1, 0, 0, '-1,-20', 0, '0F582A79-1E41-4CF0-BFA0-76340651891A', 'Recycle Bin', '01BB7FF2-24DC-4C0C-95A2-C24EF72BBAC8') -set identity_insert umbracoNode off -; -ALTER TABLE cmsDataTypePreValues ALTER COLUMN value NVARCHAR(2500) NULL -; -CREATE TABLE [cmsTask] -( -[closed] [bit] NOT NULL CONSTRAINT [DF__cmsTask__closed__04E4BC85] DEFAULT ((0)), -[id] [int] NOT NULL IDENTITY(1, 1), -[taskTypeId] [tinyint] NOT NULL, -[nodeId] [int] NOT NULL, -[parentUserId] [int] NOT NULL, -[userId] [int] NOT NULL, -[DateTime] [datetime] NOT NULL CONSTRAINT [DF__cmsTask__DateTim__05D8E0BE] DEFAULT (getdate()), -[Comment] [nvarchar] (500) NULL -) -; -ALTER TABLE [cmsTask] ADD CONSTRAINT [PK_cmsTask] PRIMARY KEY CLUSTERED ([id]) -; -CREATE TABLE [cmsTaskType] -( -[id] [tinyint] NOT NULL IDENTITY(1, 1), -[alias] [nvarchar] (255) NOT NULL -) -; -ALTER TABLE [cmsTaskType] ADD CONSTRAINT [PK_cmsTaskType] PRIMARY KEY CLUSTERED ([id]) -; -ALTER TABLE [cmsTask] ADD -CONSTRAINT [FK_cmsTask_cmsTaskType] FOREIGN KEY ([taskTypeId]) REFERENCES [cmsTaskType] ([id]) -; -insert into cmsTaskType (alias) values ('toTranslate') -; -/* Add send to translate actions to admins and editors */ -update umbracoUserType set userTypeDefaultPermissions = userTypeDefaultPermissions + '5' where userTypeAlias in ('editor','admin') -; -/* Add translator usertype */ -if not exists(select id from umbracoUserType where userTypeAlias = 'translator') -insert into umbracoUserType (userTypeAlias, userTypeName, userTypeDefaultPermissions) values ('translator', 'Translator', 'A') -; -insert into umbracoRelationType (dual, parentObjectType, childObjectType, name, alias) values (1, 'c66ba18e-eaf3-4cff-8a22-41b16d66a972', 'c66ba18e-eaf3-4cff-8a22-41b16d66a972', 'Relate Document On Copy','relateDocumentOnCopy') -; -ALTER TABLE cmsMacro ADD macroPython nvarchar(255) -; - -INSERT INTO [umbracoAppTree]([treeSilent], [treeInitialize], [treeSortOrder], [appAlias], [treeAlias], [treeTitle], [treeIconClosed], [treeIconOpen], [treeHandlerAssembly], [treeHandlerType]) VALUES(0, 1, 4, 'developer', 'python', 'Python Files', 'folder.gif', 'folder_o.gif', 'umbraco', 'loadPython') -; -INSERT INTO [umbracoAppTree]([treeSilent], [treeInitialize], [treeSortOrder], [appAlias], [treeAlias], [treeTitle], [treeIconClosed], [treeIconOpen], [treeHandlerAssembly], [treeHandlerType]) VALUES(0, 1, 2, 'settings', 'scripts', 'Scripts', 'folder.gif', 'folder_o.gif', 'umbraco', 'loadScripts') -; -alter TABLE [cmsContentType] -add [thumbnail] nvarchar(255) NOT NULL CONSTRAINT -[DF_cmsContentType_thumbnail] DEFAULT ('folder.png') -; -alter TABLE [cmsContentType] -add [description] nvarchar(1500) NULL -; -ALTER TABLE umbracoLog ALTER COLUMN logComment NVARCHAR(4000) NULL -; -SET IDENTITY_INSERT [cmsDataTypePreValues] ON -insert into cmsDataTypePreValues (id, dataTypeNodeId, [value], sortorder, alias) -values (3,-87,',code,undo,redo,cut,copy,mcepasteword,stylepicker,bold,italic,bullist,numlist,outdent,indent,mcelink,unlink,mceinsertanchor,mceimage,umbracomacro,mceinserttable,mcecharmap,' + char(124) + '1' + char(124) + '1,2,3,' + char(124) + '0' + char(124) + '500,400' + char(124) + '1049,' + char(124) + '', 0, '') - -insert into cmsDataTypePreValues (id, dataTypeNodeId, [value], sortorder, alias) -values (4,1041,'default', 0, 'group') - -SET IDENTITY_INSERT [cmsDataTypePreValues] OFF -; -/* 3.1 SQL changes */ - -INSERT INTO [umbracoAppTree] ([appAlias], [treeAlias], [treeSilent], [treeInitialize], [treeSortOrder], [treeTitle], [treeIconClosed], [treeIconOpen], [treeHandlerAssembly], [treeHandlerType]) VALUES (N'developer', N'packagerPackages', 0, 0, 1, N'Packager Packages', N'folder.gif', N'folder_o.gif', N'umbraco', N'loadPackages'); - - -/* Add ActionBrowse as a default permission to all user types that have ActionUpdate */ -UPDATE umbracoUserType SET userTypeDefaultPermissions = userTypeDefaultPermissions + 'F' WHERE CHARINDEX('A',userTypeDefaultPermissions,0) >= 1 -AND CHARINDEX('F',userTypeDefaultPermissions,0) < 1 -; -/* Add ActionToPublish to all users types that have the alias 'writer' */ -UPDATE umbracoUserType SET userTypeDefaultPermissions = userTypeDefaultPermissions + 'H' WHERE userTypeAlias = 'writer' -AND CHARINDEX('F',userTypeDefaultPermissions,0) < 1 -; -/* Add ActionBrowse to all user permissions for nodes that have the ActionUpdate permission */ -IF NOT EXISTS (SELECT permission FROM umbracoUser2NodePermission WHERE permission='F') -INSERT INTO umbracoUser2NodePermission (userID, nodeId, permission) -SELECT userID, nodeId, 'F' FROM umbracoUser2NodePermission WHERE permission='A' -; -/* Add ActionToPublish permissions to all nodes for users that are of type 'writer' */ -IF NOT EXISTS (SELECT permission FROM umbracoUser2NodePermission WHERE permission='H') -INSERT INTO umbracoUser2NodePermission (userID, nodeId, permission) -SELECT DISTINCT userID, nodeId, 'H' FROM umbracoUser2NodePermission WHERE userId IN -(SELECT umbracoUser.id FROM umbracoUserType INNER JOIN umbracoUser ON umbracoUserType.id = umbracoUser.userType WHERE (umbracoUserType.userTypeAlias = 'writer')) -; -/* Add the contentRecycleBin tree type */ -IF NOT EXISTS (SELECT treeAlias FROM umbracoAppTree WHERE treeAlias='contentRecycleBin') -INSERT INTO umbracoAppTree (treeSilent, treeInitialize, treeSortOrder, appAlias, treeAlias, treeTitle, treeIconClosed, treeIconOpen, treeHandlerAssembly, treeHandlerType) -VALUES (0, 0, 0, 'content', 'contentRecycleBin', 'RecycleBin', 'folder.gif', 'folder_o.gif', 'umbraco', 'cms.presentation.Trees.ContentRecycleBin') -; -/* Add the UserType tree type */ -IF NOT EXISTS (SELECT treeAlias FROM umbracoAppTree WHERE treeAlias='userTypes') -INSERT INTO umbracoAppTree (treeSilent, treeInitialize, treeSortOrder, appAlias, treeAlias, treeTitle, treeIconClosed, treeIconOpen, treeHandlerAssembly, treeHandlerType) -VALUES (0, 1, 1, 'users', 'userTypes', 'User Types', 'folder.gif', 'folder_o.gif', 'umbraco', 'cms.presentation.Trees.UserTypes') -; -/* Add the User Permission tree type */ -IF NOT EXISTS (SELECT treeAlias FROM umbracoAppTree WHERE treeAlias='userPermissions') -INSERT INTO umbracoAppTree (treeSilent, treeInitialize, treeSortOrder, appAlias, treeAlias, treeTitle, treeIconClosed, treeIconOpen, treeHandlerAssembly, treeHandlerType) -VALUES (0, 1, 2, 'users', 'userPermissions', 'User Permissions', 'folder.gif', 'folder_o.gif', 'umbraco', 'cms.presentation.Trees.UserPermissions'); - - -/* TRANSLATION RELATED SQL */ -INSERT INTO [umbracoApp] ([appAlias], [sortOrder], [appIcon], [appName], [appInitWithTreeAlias]) VALUES (N'translation', 5, N'.traytranslation', N'Translation', NULL) -INSERT INTO umbracoAppTree (treeSilent, treeInitialize, treeSortOrder, appAlias, treeAlias, treeTitle, treeIconClosed, treeIconOpen, treeHandlerAssembly, treeHandlerType) -VALUES (0, 1, 1, 'translation','openTasks', 'Tasks assigned to you', '.sprTreeFolder', '.sprTreeFolder_o', 'umbraco', 'loadOpenTasks'); -INSERT INTO umbracoAppTree (treeSilent, treeInitialize, treeSortOrder, appAlias, treeAlias, treeTitle, treeIconClosed, treeIconOpen, treeHandlerAssembly, treeHandlerType) -VALUES (0, 1, 2, 'translation','yourTasks', 'Tasks created by you', '.sprTreeFolder', '.sprTreeFolder_o', 'umbraco', 'loadYourTasks'); - - -alter TABLE [cmsContentType] -add [masterContentType] int NULL CONSTRAINT -[DF_cmsContentType_masterContentType] DEFAULT (0) -; - -CREATE TABLE [cmsTagRelationship]( - [nodeId] [int] NOT NULL, - [tagId] [int] NOT NULL, - CONSTRAINT [PK_cmsTagRelationship] PRIMARY KEY CLUSTERED -( - [nodeId] ASC, - [tagId] ASC -) -) ON [PRIMARY] -; - -CREATE TABLE [cmsTags]( - [id] [int] IDENTITY(1,1) NOT NULL, - [tag] [varchar](200) NULL, - [parentId] [int] NULL, - [group] [varchar](100) NULL, - CONSTRAINT [PK_cmsTags] PRIMARY KEY CLUSTERED -( - [id] ASC -) -) ON [PRIMARY] -; - -ALTER TABLE [cmsTagRelationship] WITH CHECK ADD CONSTRAINT [umbracoNode_cmsTagRelationship] FOREIGN KEY([nodeId]) -REFERENCES [umbracoNode] ([id]) -ON DELETE CASCADE -; - -ALTER TABLE [cmsTagRelationship] CHECK CONSTRAINT [umbracoNode_cmsTagRelationship] -; - -ALTER TABLE [cmsTagRelationship] WITH CHECK ADD CONSTRAINT [cmsTags_cmsTagRelationship] FOREIGN KEY([tagId]) -REFERENCES [cmsTags] ([id]) -ON DELETE CASCADE -; - -ALTER TABLE [cmsTagRelationship] CHECK CONSTRAINT [cmsTags_cmsTagRelationship] -; -alter TABLE [umbracoUser] -add [defaultToLiveEditing] bit NOT NULL CONSTRAINT -[DF_umbracoUser_defaultToLiveEditing] DEFAULT (0) -; - -/* INSERT NEW MEDIA RECYCLE BIN NODE */ -SET IDENTITY_INSERT [umbracoNode] ON -INSERT INTO umbracoNode (id, trashed, parentID, nodeUser, level, path, sortOrder, uniqueID, text, nodeObjectType) -VALUES (-21, 0, -1, 0, 0, '-1,-21', 0, 'BF7C7CBC-952F-4518-97A2-69E9C7B33842', 'Recycle Bin', 'CF3D8E34-1C1C-41e9-AE56-878B57B32113') -SET IDENTITY_INSERT [umbracoNode] OFF -; -/* Add the mediaRecycleBin tree type */ -IF NOT EXISTS (SELECT treeAlias FROM umbracoAppTree WHERE treeAlias='mediaRecycleBin') -INSERT INTO umbracoAppTree (treeSilent, treeInitialize, treeSortOrder, appAlias, treeAlias, treeTitle, treeIconClosed, treeIconOpen, treeHandlerAssembly, treeHandlerType) -VALUES (0, 0, 0, 'media', 'mediaRecycleBin', 'RecycleBin', 'folder.gif', 'folder_o.gif', 'umbraco', 'cms.presentation.Trees.MediaRecycleBin') -; - -/* PREVIEW */ -CREATE TABLE [cmsPreviewXml]( - [nodeId] [int] NOT NULL, - [versionId] [uniqueidentifier] NOT NULL, - [timestamp] [datetime] NOT NULL, - [xml] [ntext] NOT NULL, - CONSTRAINT [PK_cmsContentPreviewXml] PRIMARY KEY CLUSTERED -( - [nodeId] ASC, - [versionId] ASC -) WITH ( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF) -) -; - - - - -/*********************************************************************************************************************** - -ADD NEW PRIMARY KEYS, FOREIGN KEYS AND INDEXES FOR VERSION 4.1 - -IMPORTANT!!!!! -YOU MUST MAKE SURE THAT THE SCRIPT BELOW THIS MATCHES THE KeysIndexesAndConstraints.sql FILE FOR THE MANUAL UPGRADE - -*/ - -/************************** CLEANUP ***********************************************/ - -/* DELETE NON-EXISTING DOCUMENTS */ -delete from cmsDocument where nodeId not in (select id from umbracoNode) -; - -/* CLEAN UNUSED CONTENT ROWS */ -delete from cmsContent where nodeId not in (select id from umbracoNode) -; - -/* CLEAN UNUSED VERSIONS */ -delete from cmsContentVersion where contentid not in (select nodeId from cmsContent) -; - -/* CLEAN UNUSED XML */ -delete from cmsContentXml where nodeid not in (select nodeId from cmsContent) -; - -/* CLEAN UNUSED DOCUMENT TYPES */ -delete from cmsDocumentType where contentTypeNodeId not in (select nodeId from cmsContentType) -; -delete from cmsDocumentType where templateNodeId not in (select nodeid from cmsTemplate) -; - -/* UPDATE EMPTY TEMPLATE REFERENCES IN DOCUMENTS */ -update cmsDocument set templateId = NULL where templateId not in (select nodeId from cmsTemplate) -; - -/* DELETE ALL NOTIFICATIONS THAT NO LONGER HAVE NODES */ -delete from umbracoUser2NodeNotify where nodeId not in (select id from umbracoNode) -; - -/* DELETE ALL NOTIFICATIONS THAT NO LONGER HAVE USERS */ -delete from umbracoUser2NodeNotify where userId not in (select id from umbracoUser) -; - -/* DELETE UMBRACO NODE DATA THAT IS FLAGGED AS A DOCUMENT OBJECT TYPE THAT DOESN'T EXIST IN THE CONTENT TABLE ANY LONGER */ -delete from umbracoNode where id not in -(select nodeId from cmsContent) and nodeObjectType = 'c66ba18e-eaf3-4cff-8a22-41b16d66a972' -; - -/* DELETE PERMISSIONS THAT RELATED TO NON-EXISTING USERS */ -delete from umbracoUser2NodePermission where userId not in (select id from umbracoUser) -; - -/* DELETE PERMISSIONS THAT RELATED TO NON-EXISTING NODES */ -delete from umbracoUser2NodePermission where nodeId not in (select id from umbracoNode) -; - -/* SET MASTER TEMPLATE TO NULL WHEN THERE ISN'T ONE SPECIFIED */ -update cmsTemplate set [master] = NULL where [master] = 0 - -/* -We need to remove any data type that doesn't exist in umbracoNode as these shouldn't actually exist -I think they must be left over from how Umbraco used to show the types of data types registered instead -of using reflection. Here are the data types in the cmsDataType table that are not in umbracoNode: - -12 -91 A74EA9C9-8E18-4D2A-8CF6-73C6206C5DA6 Nvarchar -22 -44 A3776494-0574-4D93-B7DE-EFDFDEC6F2D1 Ntext -23 -128 A52C7C1C-C330-476E-8605-D63D3B84B6A6 Nvarchar -24 -129 928639ED-9C73-4028-920C-1E55DBB68783 Nvarchar -25 -130 A74EA9C9-8E18-4D2A-8CF6-73C6206C5DA6 Nvarchar -26 -131 A74EA9C9-8E18-4D2A-8CF6-73C6206C5DA6 Nvarchar -27 -132 A74EA9C9-8E18-4D2A-8CF6-73C6206C5DA6 Nvarchar -28 -133 6C738306-4C17-4D88-B9BD-6546F3771597 Ntext -29 -134 928639ED-9C73-4028-920C-1E55DBB68783 Nvarchar -30 -50 AAF99BB2-DBBE-444D-A296-185076BF0484 Date -39 1042 5E9B75AE-FACE-41C8-B47E-5F4B0FD82F83 Ntext -40 1043 5E9B75AE-FACE-41C8-B47E-5F4B0FD82F83 Ntext -41 1044 A74EA9C9-8E18-4D2A-8CF6-73C6206C5DA6 Ntext -42 1045 A74EA9C9-8E18-4D2A-8CF6-73C6206C5DA6 Ntext -47 1194 D15E1281-E456-4B24-AA86-1DDA3E4299D5 Ntext - -*/ -DELETE FROM cmsDataType WHERE nodeId NOT IN (SELECT id FROM umbracoNode) -; - -/* Need to remove any data type prevalues that aren't related to a data type */ -DELETE FROM cmsDataTypePreValues WHERE dataTypeNodeID NOT IN (SELECT nodeId FROM cmsDataType) -; - -/* Remove any domains that should not exist as they weren't deleted before when documents were deleted */ -DELETE FROM umbracoDomains WHERE domainRootStructureId NOT IN (SELECT id FROM umbracoNode) -; - --- It would be good to add constraints from cmsLanguageText to umbracoLanguage but unfortunately, a 'zero' id --- is entered into cmsLanguageText when a new entry is made, since there's not language with id of zero this won't work. --- However, we need to remove translations that aren't related to a language (these would be left over from deleting a language) -DELETE FROM cmsLanguageText -WHERE languageId <> 0 AND languageId NOT IN (SELECT id FROM umbracoLanguage) -; - -/* need to remove any content restrictions that don't exist in cmsContent */ - -DELETE FROM cmsContentTypeAllowedContentType WHERE id NOT IN (SELECT nodeId FROM cmsContentType) -; -DELETE FROM cmsContentTypeAllowedContentType WHERE Allowedid NOT IN (SELECT nodeId FROM cmsContentType) -; - -/* Though this should not have to be run because it's a new install, you need to clean the previews if you've been testing before the RC */ -DELETE FROM cmsPreviewXml WHERE VersionID NOT IN (SELECT VersionId FROM cmsContentVersion) -; - -/* Though this should not have to run because it's a new install, you need to remove this constraint if you've been testing with the RC */ -/*IF EXISTS (SELECT name FROM sysindexes WHERE name = 'IX_cmsMemberType')*/ -/*ALTER TABLE [cmsMemberType] DROP CONSTRAINT [IX_cmsMemberType]*/ - -/************************** CLEANUP END ********************************************/ - - -/* Create missing indexes and primary keys */ -CREATE NONCLUSTERED INDEX [IX_Icon] ON CMSContenttype(nodeId, Icon) -; - -ALTER TABLE cmsContentType ADD CONSTRAINT - IX_cmsContentType UNIQUE NONCLUSTERED - ( - nodeId - ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) -; - -ALTER TABLE cmsContent ADD CONSTRAINT - IX_cmsContent UNIQUE NONCLUSTERED - ( - nodeId - ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) -; - -ALTER TABLE cmsContentVersion ADD CONSTRAINT - FK_cmsContentVersion_cmsContent FOREIGN KEY - ( - ContentId - ) REFERENCES cmsContent - ( - nodeId - ) ON UPDATE NO ACTION - ON DELETE NO ACTION -; - -ALTER TABLE cmsMember ADD CONSTRAINT - PK_cmsMember PRIMARY KEY CLUSTERED - ( - nodeId - ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) -; - -ALTER TABLE cmsMember ADD CONSTRAINT - FK_cmsMember_cmsContent FOREIGN KEY - ( - nodeId - ) REFERENCES cmsContent - ( - nodeId - ) ON UPDATE NO ACTION - ON DELETE NO ACTION -; - -ALTER TABLE cmsMember ADD CONSTRAINT - FK_cmsMember_umbracoNode FOREIGN KEY - ( - nodeId - ) REFERENCES umbracoNode - ( - id - ) ON UPDATE NO ACTION - ON DELETE NO ACTION -; - -ALTER TABLE cmsStylesheet ADD CONSTRAINT - PK_cmsStylesheet PRIMARY KEY CLUSTERED - ( - nodeId - ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) -; - -ALTER TABLE cmsStylesheetProperty ADD CONSTRAINT - PK_cmsStylesheetProperty PRIMARY KEY CLUSTERED - ( - nodeId - ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) -; - -ALTER TABLE cmsStylesheetProperty ADD CONSTRAINT - FK_cmsStylesheetProperty_umbracoNode FOREIGN KEY - ( - nodeId - ) REFERENCES umbracoNode - ( - id - ) ON UPDATE NO ACTION - ON DELETE NO ACTION -; - -ALTER TABLE cmsStylesheet ADD CONSTRAINT - FK_cmsStylesheet_umbracoNode FOREIGN KEY - ( - nodeId - ) REFERENCES umbracoNode - ( - id - ) ON UPDATE NO ACTION - ON DELETE NO ACTION -; - -ALTER TABLE cmsContentXml ADD CONSTRAINT - FK_cmsContentXml_cmsContent FOREIGN KEY - ( - nodeId - ) REFERENCES cmsContent - ( - nodeId - ) ON UPDATE NO ACTION - ON DELETE NO ACTION -; - -ALTER TABLE cmsDataType ADD CONSTRAINT - IX_cmsDataType UNIQUE NONCLUSTERED - ( - nodeId - ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) -; - - - -ALTER TABLE cmsDataType ADD CONSTRAINT - FK_cmsDataType_umbracoNode FOREIGN KEY - ( - nodeId - ) REFERENCES umbracoNode - ( - id - ) ON UPDATE NO ACTION - ON DELETE NO ACTION -; - - - -ALTER TABLE cmsDataTypePreValues ADD CONSTRAINT - FK_cmsDataTypePreValues_cmsDataType FOREIGN KEY - ( - datatypeNodeId - ) REFERENCES cmsDataType - ( - nodeId - ) ON UPDATE NO ACTION - ON DELETE NO ACTION -; - -ALTER TABLE cmsDocument ADD CONSTRAINT - FK_cmsDocument_cmsContent FOREIGN KEY - ( - nodeId - ) REFERENCES cmsContent - ( - nodeId - ) ON UPDATE NO ACTION - ON DELETE NO ACTION -; - -ALTER TABLE cmsDocumentType ADD CONSTRAINT - FK_cmsDocumentType_cmsContentType FOREIGN KEY - ( - contentTypeNodeId - ) REFERENCES cmsContentType - ( - nodeId - ) ON UPDATE NO ACTION - ON DELETE NO ACTION -; - -ALTER TABLE cmsDocumentType ADD CONSTRAINT - FK_cmsDocumentType_umbracoNode FOREIGN KEY - ( - contentTypeNodeId - ) REFERENCES umbracoNode - ( - id - ) ON UPDATE NO ACTION - ON DELETE NO ACTION -; - -ALTER TABLE cmsMacroProperty ADD CONSTRAINT - FK_cmsMacroProperty_cmsMacro FOREIGN KEY - ( - macro - ) REFERENCES cmsMacro - ( - id - ) ON UPDATE NO ACTION - ON DELETE NO ACTION -; - -ALTER TABLE cmsMemberType ADD CONSTRAINT - FK_cmsMemberType_cmsContentType FOREIGN KEY - ( - NodeId - ) REFERENCES cmsContentType - ( - nodeId - ) ON UPDATE NO ACTION - ON DELETE NO ACTION -; - -ALTER TABLE cmsMemberType ADD CONSTRAINT - FK_cmsMemberType_umbracoNode FOREIGN KEY - ( - NodeId - ) REFERENCES umbracoNode - ( - id - ) ON UPDATE NO ACTION - ON DELETE NO ACTION -; - -ALTER TABLE cmsMember2MemberGroup ADD CONSTRAINT - FK_cmsMember2MemberGroup_cmsMember FOREIGN KEY - ( - Member - ) REFERENCES cmsMember - ( - nodeId - ) ON UPDATE NO ACTION - ON DELETE NO ACTION -; - -ALTER TABLE cmsDocument ADD CONSTRAINT - IX_cmsDocument UNIQUE NONCLUSTERED - ( - nodeId, - versionId - ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) -; - -ALTER TABLE cmsPropertyData ADD CONSTRAINT - FK_cmsPropertyData_cmsPropertyType FOREIGN KEY - ( - propertytypeid - ) REFERENCES cmsPropertyType - ( - id - ) ON UPDATE NO ACTION - ON DELETE NO ACTION -; - -ALTER TABLE cmsPropertyType ADD CONSTRAINT - FK_cmsPropertyType_cmsContentType FOREIGN KEY - ( - contentTypeId - ) REFERENCES cmsContentType - ( - nodeId - ) ON UPDATE NO ACTION - ON DELETE NO ACTION -; - -ALTER TABLE cmsPropertyType ADD CONSTRAINT - FK_cmsPropertyType_cmsDataType FOREIGN KEY - ( - dataTypeId - ) REFERENCES cmsDataType - ( - nodeId - ) ON UPDATE NO ACTION - ON DELETE NO ACTION -; - -ALTER TABLE cmsTab ADD CONSTRAINT - FK_cmsTab_cmsContentType FOREIGN KEY - ( - contenttypeNodeId - ) REFERENCES cmsContentType - ( - nodeId - ) ON UPDATE NO ACTION - ON DELETE NO ACTION -; - -ALTER TABLE cmsTemplate ADD CONSTRAINT - IX_cmsTemplate UNIQUE NONCLUSTERED - ( - nodeId - ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) -; - -ALTER TABLE cmsDocument ADD CONSTRAINT - FK_cmsDocument_cmsTemplate FOREIGN KEY - ( - templateId - ) REFERENCES cmsTemplate - ( - nodeId - ) ON UPDATE NO ACTION - ON DELETE NO ACTION -; - - -ALTER TABLE umbracoDomains ADD CONSTRAINT - FK_umbracoDomains_umbracoNode FOREIGN KEY - ( - domainRootStructureID - ) REFERENCES umbracoNode - ( - id - ) ON UPDATE NO ACTION - ON DELETE NO ACTION -; - -ALTER TABLE cmsDictionary ADD CONSTRAINT - IX_cmsDictionary UNIQUE NONCLUSTERED - ( - id - ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) -; - -ALTER TABLE cmsLanguageText ADD CONSTRAINT - FK_cmsLanguageText_cmsDictionary FOREIGN KEY - ( - UniqueId - ) REFERENCES cmsDictionary - ( - id - ) ON UPDATE NO ACTION - ON DELETE NO ACTION -; - - - -ALTER TABLE umbracoUser2NodeNotify ADD CONSTRAINT - FK_umbracoUser2NodeNotify_umbracoUser FOREIGN KEY - ( - userId - ) REFERENCES umbracoUser - ( - id - ) ON UPDATE NO ACTION - ON DELETE NO ACTION -; - -ALTER TABLE umbracoUser2NodeNotify ADD CONSTRAINT - FK_umbracoUser2NodeNotify_umbracoNode FOREIGN KEY - ( - nodeId - ) REFERENCES umbracoNode - ( - id - ) ON UPDATE NO ACTION - ON DELETE NO ACTION -; - -ALTER TABLE umbracoUser2NodePermission ADD CONSTRAINT - FK_umbracoUser2NodePermission_umbracoUser FOREIGN KEY - ( - userId - ) REFERENCES umbracoUser - ( - id - ) ON UPDATE NO ACTION - ON DELETE NO ACTION -; - -ALTER TABLE umbracoUser2NodePermission ADD CONSTRAINT - FK_umbracoUser2NodePermission_umbracoNode FOREIGN KEY - ( - nodeId - ) REFERENCES umbracoNode - ( - id - ) ON UPDATE NO ACTION - ON DELETE NO ACTION -; - -ALTER TABLE cmsTask ADD CONSTRAINT - FK_cmsTask_umbracoUser FOREIGN KEY - ( - parentUserId - ) REFERENCES umbracoUser - ( - id - ) ON UPDATE NO ACTION - ON DELETE NO ACTION -; - -ALTER TABLE cmsTask ADD CONSTRAINT - FK_cmsTask_umbracoUser1 FOREIGN KEY - ( - userId - ) REFERENCES umbracoUser - ( - id - ) ON UPDATE NO ACTION - ON DELETE NO ACTION -; - -ALTER TABLE cmsTask ADD CONSTRAINT - FK_cmsTask_umbracoNode FOREIGN KEY - ( - nodeId - ) REFERENCES umbracoNode - ( - id - ) ON UPDATE NO ACTION - ON DELETE NO ACTION -; - -CREATE NONCLUSTERED INDEX IX_umbracoLog ON umbracoLog - ( - NodeId - ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) -; - -ALTER TABLE umbracoRelation ADD CONSTRAINT - FK_umbracoRelation_umbracoRelationType FOREIGN KEY - ( - relType - ) REFERENCES umbracoRelationType - ( - id - ) ON UPDATE NO ACTION - ON DELETE NO ACTION -; - -ALTER TABLE umbracoRelation ADD CONSTRAINT - FK_umbracoRelation_umbracoNode FOREIGN KEY - ( - parentId - ) REFERENCES umbracoNode - ( - id - ) ON UPDATE NO ACTION - ON DELETE NO ACTION -; - -ALTER TABLE umbracoRelation ADD CONSTRAINT - FK_umbracoRelation_umbracoNode1 FOREIGN KEY - ( - childId - ) REFERENCES umbracoNode - ( - id - ) ON UPDATE NO ACTION - ON DELETE NO ACTION -; - - - -ALTER TABLE cmsContentTypeAllowedContentType ADD CONSTRAINT - FK_cmsContentTypeAllowedContentType_cmsContentType FOREIGN KEY - ( - Id - ) REFERENCES cmsContentType - ( - nodeId - ) ON UPDATE NO ACTION - ON DELETE NO ACTION -; - -ALTER TABLE cmsContentTypeAllowedContentType ADD CONSTRAINT - FK_cmsContentTypeAllowedContentType_cmsContentType1 FOREIGN KEY - ( - AllowedId - ) REFERENCES cmsContentType - ( - nodeId - ) ON UPDATE NO ACTION - ON DELETE NO ACTION -; - -ALTER TABLE umbracoLanguage ADD CONSTRAINT - IX_umbracoLanguage UNIQUE NONCLUSTERED - ( - languageISOCode - ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) -; - -ALTER TABLE umbracoUser ADD CONSTRAINT - IX_umbracoUser UNIQUE NONCLUSTERED - ( - userLogin - ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) -; - -ALTER TABLE cmsTaskType ADD CONSTRAINT - IX_cmsTaskType UNIQUE NONCLUSTERED - ( - alias - ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) -; - -ALTER TABLE cmsDocumentType ADD CONSTRAINT - FK_cmsDocumentType_cmsTemplate FOREIGN KEY - ( - templateNodeId - ) REFERENCES cmsTemplate - ( - nodeId - ) ON UPDATE NO ACTION - ON DELETE NO ACTION -; - -ALTER TABLE cmsTemplate ADD CONSTRAINT - FK_cmsTemplate_cmsTemplate FOREIGN KEY - ( - master - ) REFERENCES cmsTemplate - ( - nodeId - ) ON UPDATE NO ACTION - ON DELETE NO ACTION -; - -ALTER TABLE cmsContentVersion ADD CONSTRAINT - IX_cmsContentVersion UNIQUE NONCLUSTERED - ( - VersionId - ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) -; - -ALTER TABLE cmsPreviewXml ADD CONSTRAINT - FK_cmsPreviewXml_cmsContentVersion FOREIGN KEY - ( - versionId - ) REFERENCES cmsContentVersion - ( - VersionId - ) ON UPDATE NO ACTION - ON DELETE NO ACTION -; - -ALTER TABLE cmsPreviewXml ADD CONSTRAINT - FK_cmsPreviewXml_cmsContent FOREIGN KEY - ( - nodeId - ) REFERENCES cmsContent - ( - nodeId - ) ON UPDATE NO ACTION - ON DELETE NO ACTION -; - - -ALTER TABLE cmsMember2MemberGroup ADD CONSTRAINT - FK_cmsMember2MemberGroup_umbracoNode FOREIGN KEY - ( - MemberGroup - ) REFERENCES umbracoNode - ( - id - ) ON UPDATE NO ACTION - ON DELETE NO ACTION -; - - -/*********************************************************************************************************************** - -END OF NEW CONSTRAINTS - -***********************************************************************************************************************/ diff --git a/src/Umbraco.Tests/Umbraco.Tests.csproj b/src/Umbraco.Tests/Umbraco.Tests.csproj index 74eed99143..0320161398 100644 --- a/src/Umbraco.Tests/Umbraco.Tests.csproj +++ b/src/Umbraco.Tests/Umbraco.Tests.csproj @@ -129,16 +129,11 @@ - - - - - @@ -160,12 +155,10 @@ - - @@ -186,14 +179,13 @@ - - + @@ -204,9 +196,6 @@ - - - @@ -218,15 +207,6 @@ - - - True - True - SqlResources.resx - - - - @@ -336,11 +316,6 @@ - - ResXFileCodeGenerator - SqlResources.Designer.cs - Designer - ResXFileCodeGenerator ImportResources.Designer.cs @@ -353,10 +328,6 @@ - - - - Designer diff --git a/src/Umbraco.Web/Macros/PartialViewMacroPage.cs b/src/Umbraco.Web/Macros/PartialViewMacroPage.cs deleted file mode 100644 index 7297fec6d3..0000000000 --- a/src/Umbraco.Web/Macros/PartialViewMacroPage.cs +++ /dev/null @@ -1,11 +0,0 @@ -using Umbraco.Web.Models; -using Umbraco.Web.Mvc; - -namespace Umbraco.Web.Macros -{ - /// - /// The base view class that PartialViewMacro views need to inherit from - /// - public abstract class PartialViewMacroPage : UmbracoViewPage - { } -} diff --git a/src/Umbraco.Web/Umbraco.Web.csproj b/src/Umbraco.Web/Umbraco.Web.csproj index ad7dd86730..8e988e3980 100644 --- a/src/Umbraco.Web/Umbraco.Web.csproj +++ b/src/Umbraco.Web/Umbraco.Web.csproj @@ -204,6 +204,7 @@ +