private List <ConceptApplication> LoadOldConceptApplicationsFromDatabase() { var previoslyAppliedConcepts = new List <ConceptApplication>(); _sqlExecuter.ExecuteReader( "SELECT ID, InfoType, ConceptInfoKey, ImplementationType, CreateQuery, RemoveQuery, ModificationOrder FROM Rhetos.AppliedConcept ORDER BY ModificationOrder", dataReader => { previoslyAppliedConcepts.Add(new ConceptApplication { Id = SqlUtility.ReadGuid(dataReader, 0), ConceptInfoTypeName = dataReader.GetString(1), ConceptInfoKey = dataReader.GetString(2), ConceptImplementationTypeName = dataReader.GetString(3), CreateQuery = SqlUtility.EmptyNullString(dataReader, 4), RemoveQuery = SqlUtility.EmptyNullString(dataReader, 5), OldCreationOrder = SqlUtility.ReadInt(dataReader, 6), DependsOn = null // It will be set later }); }); var invalidCa = previoslyAppliedConcepts.FirstOrDefault(ca => ca.ConceptInfoKey == ObsoleteConceptApplicationMark); if (invalidCa != null) { throw new FrameworkException($"Obsolete concept application loaded from database" + $" (Rhetos.ConceptApplication, ID = {SqlUtility.GuidToString(invalidCa.Id)})." + $" The update procedure for old version of the system should include deployment" + $" with empty DslScripts folder (using old version of Rhetos framework and packages)" + $" to remove old database structure and keep the data."); } return(previoslyAppliedConcepts); }
public void LoadPreviouslyAppliedConceptsTest_DuplicateAppliedConcepts() { try { var ca1 = MockSqlExecuter.ConceptApplication; var ca2 = MockSqlExecuter.ConceptApplicationCopy; Assert.AreEqual(ca1.GetConceptApplicationKey(), ca2.GetConceptApplicationKey()); var expected = new[] { ca1, ca2 }; var conceptApplicationRepository = TestConceptApplicationRepository(expected); var appliedConcepts = conceptApplicationRepository.Load(); Assert.IsNotNull(appliedConcepts); } catch (Exception ex) { Console.WriteLine(ex.Message); TestUtility.AssertContains(ex.Message, MockSqlExecuter.ConceptApplication.GetConceptApplicationKey()); TestUtility.AssertContains(ex.Message, new[] { SqlUtility.GuidToString(MockSqlExecuter.ConceptApplication.Id), SqlUtility.GuidToString(MockSqlExecuter.ConceptApplicationCopy.Id) }); throw; } }
public void Complex() { using (var container = new RhetosTestContainer()) { container.Resolve <ISqlExecuter>().ExecuteSql(new[] { "DELETE FROM TestLogging.Complex", "DELETE FROM TestLogging.Simple", }); var repository = container.Resolve <Common.DomRepository>(); var id = Guid.NewGuid(); var simple = new TestLogging.Simple { ID = Guid.NewGuid() }; repository.TestLogging.Simple.Insert(new[] { simple }); var complex = new TestLogging.Complex { bi = new byte[] { 1, 2, 3 }, bo = true, da = new DateTime(2001, 2, 3), t = new DateTime(2001, 2, 3, 4, 5, 6), de = 123.4567m, g = Guid.NewGuid(), ls = "abc", m = 11.22m, rID = simple.ID }; repository.TestLogging.Complex.Insert(new[] { complex }); complex.ls = "def"; repository.TestLogging.Complex.Update(new[] { complex }); repository.TestLogging.Complex.Delete(new[] { complex }); var ids = new Guid?[] { simple.ID, complex.ID }; var ins = repository.Common.Log.Query().Where(log => log.TableName == "TestLogging.Complex" && log.Action == "Insert" && ids.Contains(log.ItemId)).Single(); var upd = repository.Common.Log.Query().Where(log => log.TableName == "TestLogging.Complex" && log.Action == "Update" && ids.Contains(log.ItemId)).Single(); var del = repository.Common.Log.Query().Where(log => log.TableName == "TestLogging.Complex" && log.Action == "Delete" && ids.Contains(log.ItemId)).Single(); Assert.AreEqual("", ins.Description); Assert.AreEqual(@"<PREVIOUS ls=""abc"" />", upd.Description); Console.WriteLine(del.Description); var description = del.Description.Split(' ').OrderBy(x => x).ToList(); Assert.AreEqual(@"/>", description[0]); Assert.AreEqual(@"<PREVIOUS", description[1]); Assert.AreEqual(@"bi=""0x010203""", description[2]); Assert.AreEqual(@"bo=""1""", description[3]); Assert.AreEqual(@"da=""2001-02-03""", description[4]); Assert.IsTrue(new Regex(@"^de=""123\.45670*""$").IsMatch(description[5]));// optional additional zeros Assert.AreEqual(@"g=""" + SqlUtility.GuidToString(complex.g.Value) + @"""", description[6]); Assert.AreEqual(@"ls=""def""", description[7]); Assert.AreEqual(@"m=""11.2200""", description[8]); Assert.AreEqual(@"rID=""" + SqlUtility.GuidToString(simple.ID) + @"""", description[9]); Assert.IsTrue(new Regex(@"^t=""2001-02-03T04:05:06(.0+)?""$").IsMatch(description[10]));// optional milliseconds } }
private void LogDatabaseChanges(ConceptApplication conceptApplication, string action, Func <string> additionalInfo = null) { _changesLogger.Trace("{0} {1}, ID={2}.{3}{4}", action, conceptApplication.GetConceptApplicationKey(), SqlUtility.GuidToString(conceptApplication.Id), additionalInfo != null ? " " : null, additionalInfo != null ? additionalInfo() : null); }
public void LoadPreviouslyAppliedConceptsTest_DuplicateAppliedConcepts() { var ca1 = MockSqlExecuter.ConceptApplication; var ca2 = MockSqlExecuter.ConceptApplicationCopy; Assert.AreEqual(ca1.GetConceptApplicationKey(), ca2.GetConceptApplicationKey()); var expected = new[] { ca1, ca2 }; var conceptApplicationRepository = TestConceptApplicationRepository(expected); TestUtility.ShouldFail <FrameworkException>( () => conceptApplicationRepository.Load(), MockSqlExecuter.ConceptApplication.GetConceptApplicationKey(), SqlUtility.GuidToString(MockSqlExecuter.ConceptApplication.Id), SqlUtility.GuidToString(MockSqlExecuter.ConceptApplicationCopy.Id)); }