public void Test() { var spec = entitySpec.Begin().Add("*"); var testObj = new WithDictionary { AnnoyingThing = new AnnoyingThing { Dic = new Dictionary <string, object> { { "nisse", "kalle" }, { "sture", null }, { "ulrik", 7 } } } }; SqlTestHelpers.WithNewDb("Gurka", conn => { var tm = new SqlTableManager(SqlTestHelpers.ConnectionString("Gurka")); var dataExtract = new DataExtract <WithDictionary>(spec, tm); dataExtract.Run(testObj); var result = SqlTestHelpers.SimpleQuery(conn, "SELECT * FROM WithDictionary"); Assert.AreEqual(1, result.NameAndTypes.Length); result = SqlTestHelpers.SimpleQuery(conn, "SELECT * FROM WithDictionary_AnnoyingThingDic"); Assert.AreEqual(2, result.NameAndTypes.Length); }); }
public void SetUp() { if (SqlTestHelpers.ConnectionString(null) == null) { return; } SqlTestHelpers.WithNewDb("LogTest", conn => { var tableFactory = new SqlTableManager(SqlTestHelpers.ConnectionString("LogTest"), "log"); var export = new DataExtract <School>(Spec, tableFactory); export.Run(new[] { School }); tableFactory = new SqlTableManager(SqlTestHelpers.ConnectionString("LogTest"), "log"); tableFactory.WriteLog("Explicit logging from the outside A"); export = new DataExtract <School>(Spec, tableFactory); export.Run(new[] { School }); tableFactory.WriteLog("Explicit logging from the outside B"); tableFactory = new SqlTableManager(SqlTestHelpers.ConnectionString("LogTest"), "log"); tableFactory.WriteLog("Explicit logging from the outside C"); _logRows = SqlTestHelpers.SimpleQuery(conn, "SELECT * FROM log").Rows.Select(_ => new logEntry(_)).ToList(); var lookup = _logRows.ToLookup(_ => _.SessionId, _ => _); _log1 = lookup.FirstOrDefault(_ => _.Count() == 3)?.ToList(); _log2 = lookup.FirstOrDefault(_ => _.Count() == 6)?.ToList(); _log3 = lookup.FirstOrDefault(_ => _.Count() == 1)?.ToList(); _log1?.Sort((x, y) => x.SeqId.CompareTo(y.SeqId)); _log2?.Sort((x, y) => x.SeqId.CompareTo(y.SeqId)); _log3?.Sort((x, y) => x.SeqId.CompareTo(y.SeqId)); }); }
public void SetUp2() { Spec = entitySpec.Begin() .Add("Name") .Add(entitySpec.Begin("Classes") .Add("Name").PrimaryKey() .Add(entitySpec.Begin("Students") .Add("FirstName") .Add("LastName"))); var exportMem = new DataExtract <School>(Spec); exportMem.Run(School); var tables = exportMem.TableManager.GetWithAllData(); Assert.AreEqual(1, tables.Single(_ => _.Name == "School").Rows.Count); Assert.AreEqual(6, tables.Single(_ => _.Name == "Classes").Rows.Count); Assert.AreEqual(100, tables.Single(_ => _.Name == "Students").Rows.Count); if (Environment.MachineName != "DAN_FACTOR10") { return; } var tableFactory = new SqlTableManager(SqlTestHelpers.ConnectionString("SchoolPkTest")); var exportDb = new DataExtract <School>(Spec, tableFactory); SqlTestHelpers.WithNewDb("SchoolPkTest", conn => { var sw = Stopwatch.StartNew(); exportDb.Run(Enumerable.Range(0, 1).Select(_ => School)); _classQueryResult = SqlTestHelpers.SimpleQuery(conn, "SELECT * FROM school_classes"); }); }
static void Main(string[] args) { var school = new School { Name = "Old School", Classes = new[] { "Klass 1a", "Klass 1b", "Klass 2a", "Klass 2b", "Klass 3a", "Klass 3b" }.Select( _ => new Class { Name = _, Students = new List <Student>() }).ToList() }; var firstNames = new[] { "Ada", "Bertil", "Cecilia", "David", "Elina", "Fredrik", "Gun", "Hans", "Ida", "Jan", "Klara" }; var lastNames = new[] { "Johansson", "Eriksson", "Karlsson", "Andersson", "Nilsson", "Svensson", "Pettersson" }; for (var i = 0; i < 100; i++) { school.Classes[i % school.Classes.Count].Students.Add(new Student { FirstName = firstNames[i % firstNames.Length], LastName = lastNames[i % lastNames.Length] }); } var spec = entitySpec.Begin() .Add("Name") .Add(entitySpec.Begin("Classes") .Add("Name") .Add(entitySpec.Begin("Students") .Add("FirstName") .Add("LastName"))); const int numberOfSchools = 10000; var tableFactory = new SqlTableManager(SqlTestHelpers.ConnectionString("SchoolTest")); var export = new DataExtract <School>(spec, tableFactory); SqlTestHelpers.WithNewDb("SchoolTest", conn => { var sw = Stopwatch.StartNew(); export.Run(Enumerable.Range(0, numberOfSchools).Select(_ => school)); Console.WriteLine(sw.ElapsedMilliseconds.ToString()); sw.Restart(); Console.WriteLine(sw.ElapsedMilliseconds.ToString()); //Assert.AreEqual(numberOfSchools, SqlStuff.SimpleQuery<int>(conn, "SELECT count(*) FROM school")); //Assert.AreEqual(numberOfSchools * 6, SqlStuff.SimpleQuery<int>(conn, "SELECT count(*) FROM classes")); //Assert.AreEqual(numberOfSchools * 100, SqlStuff.SimpleQuery<int>(conn, "SELECT count(*) FROM students")); }); Console.ReadLine(); }
public void TestTableProgression() { SqlTestHelpers.WithNewDb("SqlTableProgression", conn => { using (var cmd = new SqlCommand("CREATE TABLE School_bck (x int)", conn)) cmd.ExecuteNonQuery(); using (var cmd = new SqlCommand("CREATE TABLE School_Classes (x int)", conn)) cmd.ExecuteNonQuery(); using (var cmd = new SqlCommand("CREATE TABLE School_Classes_Students_tmp (x int)", conn)) cmd.ExecuteNonQuery(); var tableManager = new SqlTableManager(SqlTestHelpers.ConnectionString("SqlTableProgression")); var dataExtract = new DataExtract <School>(Spec, tableManager); var entityWithTable = new EntityWithTable(dataExtract.TopEntity, tableManager); // just to make some use of entityWithTable Assert.IsNotNull(entityWithTable); // pre-assert var tables = tableManager.GetExistingTableNames(conn, false); CollectionAssert.AreEquivalent(new[] { "School_bck", "School_Classes", "School_Classes_Students_tmp" }, tables); // after first begin, we should have a full set of _tmp, nothing else touched tableManager.Begin(); tables = tableManager.GetExistingTableNames(conn, false); CollectionAssert.AreEquivalent(new[] { "School_bck", "School_Classes", "School_Classes_Students_tmp", "School_tmp", "School_Classes_tmp" }, tables); // after first end, we should have a _bck of the faked School_Classes and the three real tables and no _tmp tableManager.End(); tables = tableManager.GetExistingTableNames(conn, false); CollectionAssert.AreEquivalent(new[] { "School_Classes_bck", "School", "School_Classes", "School_Classes_Students" }, tables); // after second begin, we should have a full set of _tmp, nothing else touched since last check tableManager.Begin(); tables = tableManager.GetExistingTableNames(conn, false); CollectionAssert.AreEquivalent(new[] { "School_Classes_bck", "School", "School_Classes", "School_Classes_Students", "School_Classes_Students_tmp", "School_tmp", "School_Classes_tmp" }, tables); // efter second, we should have a full set of _bck and and real files and no _tmp tableManager.End(); tables = tableManager.GetExistingTableNames(conn, false); CollectionAssert.AreEquivalent(new[] { "School_bck", "School_Classes_bck", "School_Classes_Students_bck", "School", "School_Classes", "School_Classes_Students" }, tables); }); }
public void Test() { var spec = entitySpec.Begin() .Add("Blob1") .Add("Blob2") .Add("Blob3"); var testObj = new WithBlobs { Blob1 = new byte[] { 1, 2, 3, 4, 5 }, Blob3 = new byte[] { 6, 7, 8, 9, 0 } }; SqlTestHelpers.WithNewDb("Gurka", conn => { var tm = new SqlTableManager(SqlTestHelpers.ConnectionString("Gurka")); var dataExtract = new DataExtract <WithBlobs>(spec, tm); dataExtract.Run(testObj); var result = SqlTestHelpers.SimpleQuery(conn, "SELECT * FROM WithBlobs"); Assert.AreEqual(3, result.NameAndTypes.Length); }); }
public void SetUp() { if (SqlTestHelpers.ConnectionString(null) == null) { return; } var tableFactory = new SqlTableManager(SqlTestHelpers.ConnectionString("SchoolTest"), "log"); var export = new DataExtract <School>(Spec, tableFactory); SqlTestHelpers.WithNewDb("SchoolTest", conn => { var sw = Stopwatch.StartNew(); export.Run(Enumerable.Range(0, NumberOfSchools).Select(_ => School)); Console.WriteLine(sw.ElapsedMilliseconds.ToString()); _schoolQueryResult = SqlTestHelpers.SimpleQuery(conn, "SELECT * FROM school"); _classQueryResult = SqlTestHelpers.SimpleQuery(conn, "SELECT * FROM school_classes"); _studentQueryResult = SqlTestHelpers.SimpleQuery(conn, "SELECT TOP 1 * FROM school_classes_students"); _studentCount = SqlTestHelpers.SimpleQuery <int>(conn, "SELECT count(*) FROM school_classes_students"); _logQueryResult = SqlTestHelpers.SimpleQuery(conn, "SELECT * FROM log"); }); }
public void TestThatWrongNumberOfRowsIsCaught() { SqlTestHelpers.WithNewDb("SqlTableSimulateBadWrite", conn => { var tableManager = new SqlTableManager(SqlTestHelpers.ConnectionString("SqlTableSimulateBadWrite")); var dataExtract = new DataExtract <School>(Spec, tableManager); var entityWithTable = new EntityWithTable(dataExtract.TopEntity, tableManager); // just to make some use of entityWithTable Assert.IsNotNull(entityWithTable); // after first begin, we should have a full set of _tmp, nothing else touched tableManager.Begin(); using (var cmd = new SqlCommand($"INSERT INTO school_tmp (_id_,name) VALUES ('{Guid.NewGuid()}','nisse')", conn)) cmd.ExecuteNonQuery(); var ex = Assert.Throws <Exception>(() => tableManager.End()); Assert.AreEqual("Found 1 rows in table School but expected 0", ex.Message); }); }