public void TestImageTemplates(DatabaseType type) { var db = GetCleanedServer(type); var template = new ImageTableTemplate { TableName = "Fish", Columns = new[] { new ImageColumnTemplate { IsPrimaryKey = true, AllowNulls = true, ColumnName = "RelativeFileArchiveURI" }, new ImageColumnTemplate { IsPrimaryKey = false, AllowNulls = true, ColumnName = "SeriesInstanceUID" } } }; var tbl = db.ExpectTable(template.TableName); var cmd = new ExecuteCommandCreateNewImagingDataset(RepositoryLocator, tbl, template); Assert.IsFalse(cmd.IsImpossible); cmd.Execute(); Assert.IsTrue(tbl.Exists()); var cols = tbl.DiscoverColumns(); Assert.AreEqual(2, cols.Length); var rfa = cols.Single(c => c.GetRuntimeName().Equals("RelativeFileArchiveURI")); Assert.IsTrue(rfa.IsPrimaryKey); Assert.IsFalse(rfa.AllowNulls); //because PK! var sid = cols.Single(c => c.GetRuntimeName().Equals("SeriesInstanceUID")); Assert.IsFalse(sid.IsPrimaryKey); Assert.IsTrue(sid.AllowNulls); }
public void TestImageTemplates(DatabaseType type) { var db = GetCleanedServer(type); // Create a nice template with lots of columns var template = new ImageTableTemplate(); template.TableName = "Fish"; template.Columns = new[] { new ImageColumnTemplate { IsPrimaryKey = true, AllowNulls = true, ColumnName = "RelativeFileArchiveURI" }, new ImageColumnTemplate { IsPrimaryKey = false, AllowNulls = true, ColumnName = "SeriesInstanceUID" }, new ImageColumnTemplate { IsPrimaryKey = false, AllowNulls = true, ColumnName = "StudyDate" }, new ImageColumnTemplate { IsPrimaryKey = false, AllowNulls = true, ColumnName = "StudyInstanceUID" }, new ImageColumnTemplate { IsPrimaryKey = false, AllowNulls = true, ColumnName = "StudyDescription" }, new ImageColumnTemplate { IsPrimaryKey = false, AllowNulls = true, ColumnName = "EchoTime" }, new ImageColumnTemplate { IsPrimaryKey = false, AllowNulls = true, ColumnName = "RepetitionTime" }, new ImageColumnTemplate { IsPrimaryKey = false, AllowNulls = true, ColumnName = "PatientAge" }, }; // use it to create a table var tbl = db.ExpectTable(template.TableName); var cmd = new ExecuteCommandCreateNewImagingDataset(RepositoryLocator, tbl, template); Assert.IsFalse(cmd.IsImpossible); cmd.Execute(); Assert.IsTrue(tbl.Exists()); // import RDMP reference to the table var importer = new TableInfoImporter(CatalogueRepository, tbl); importer.DoImport(out TableInfo ti, out _); // compare the live with the template var comparer = new LiveVsTemplateComparer(ti, new ImageTableTemplateCollection() { DatabaseType = type, Tables = new List <ImageTableTemplate> { template } }); // should be no differences Assert.AreEqual(comparer.TemplateSql, comparer.LiveSql); // make a difference tbl.DropColumn(tbl.DiscoverColumn("EchoTime")); //now comparer should see a difference comparer = new LiveVsTemplateComparer(ti, new ImageTableTemplateCollection() { DatabaseType = type, Tables = new List <ImageTableTemplate> { template } }); Assert.AreNotEqual(comparer.TemplateSql, comparer.LiveSql); tbl.Drop(); }
public void TestAddTag_WithArchive(DatabaseType type) { var db = GetCleanedServer(type); // Create a nice template with lots of columns var template = new ImageTableTemplate(); template.TableName = "Fish"; template.Columns = new[] { new ImageColumnTemplate { IsPrimaryKey = true, AllowNulls = true, ColumnName = "RelativeFileArchiveURI" }, new ImageColumnTemplate { IsPrimaryKey = false, AllowNulls = true, ColumnName = "SeriesInstanceUID" }, new ImageColumnTemplate { IsPrimaryKey = false, AllowNulls = true, ColumnName = "StudyDate" }, }; // use it to create a table var tbl = db.ExpectTable(template.TableName); IAtomicCommand cmd = new ExecuteCommandCreateNewImagingDataset(RepositoryLocator, tbl, template); Assert.IsFalse(cmd.IsImpossible); cmd.Execute(); Assert.IsTrue(tbl.Exists()); // import RDMP reference to the table var importer = new TableInfoImporter(CatalogueRepository, tbl); importer.DoImport(out TableInfo ti, out ColumnInfo[] cols); var forward = new ForwardEngineerCatalogue(ti, cols); forward.ExecuteForwardEngineering(out Catalogue catalogue, out _, out _); // Create an archive table and backup trigger like we would have if this were the target of a data load var triggerImplementerFactory = new TriggerImplementerFactory(type); var implementer = triggerImplementerFactory.Create(tbl); implementer.CreateTrigger(new ThrowImmediatelyCheckNotifier()); var archive = tbl.Database.ExpectTable(tbl.GetRuntimeName() + "_Archive"); Assert.IsTrue(archive.Exists()); var activator = new ConsoleInputManager(RepositoryLocator, new ThrowImmediatelyCheckNotifier()) { DisallowInput = true }; // Test the actual commands cmd = new ExecuteCommandAddTag(activator, catalogue, "ffffff", "int"); Assert.IsFalse(cmd.IsImpossible, cmd.ReasonCommandImpossible); cmd.Execute(); cmd = new ExecuteCommandAddTag(activator, catalogue, "EchoTime", null); Assert.IsFalse(cmd.IsImpossible, cmd.ReasonCommandImpossible); cmd.Execute(); var ex = Assert.Throws <Exception>(() => new ExecuteCommandAddTag(activator, catalogue, "StudyDate", null).Execute()); StringAssert.StartsWith("Failed check with message: There is already a column called 'StudyDate' in TableInfo ", ex.Message); cmd = new ExecuteCommandAddTag(activator, catalogue, "SeriesDate", null); Assert.IsFalse(cmd.IsImpossible, cmd.ReasonCommandImpossible); cmd.Execute(); Assert.AreEqual("int", tbl.DiscoverColumn("ffffff").DataType.SQLType); Assert.AreEqual("decimal(38,19)", tbl.DiscoverColumn("EchoTime").DataType.SQLType); Assert.AreEqual(typeof(DateTime), tbl.DiscoverColumn("SeriesDate").DataType.GetCSharpDataType()); Assert.AreEqual("int", archive.DiscoverColumn("ffffff").DataType.SQLType); Assert.AreEqual("decimal(38,19)", archive.DiscoverColumn("EchoTime").DataType.SQLType); Assert.AreEqual(typeof(DateTime), archive.DiscoverColumn("SeriesDate").DataType.GetCSharpDataType()); }