private DataTable GetDataTable(int timeout, int?topX) { var qb = new QueryBuilder("distinct", null); if (topX != null) { qb.TopX = topX.Value; } qb.AddColumn(_extractionInformation); var server = _extractionInformation.CatalogueItem.Catalogue.GetDistinctLiveDatabaseServer(DataAccessContext.DataExport, true); var colName = _extractionInformation.GetRuntimeName(); DataTable dt = new DataTable(); dt.Columns.Add(colName); using (var con = server.GetConnection()) { con.Open(); var cmd = server.GetCommand(qb.SQL, con); cmd.CommandTimeout = timeout; var r = cmd.ExecuteReader(); while (r.Read()) { dt.Rows.Add(new[] { r[colName] }); } } return(dt); }
/// <inheritdoc/> public override void Execute() { base.Execute(); foreach (var descCol in _lookupDescriptionColumns) { Lookup lookup = new Lookup(_catalogueRepository, descCol, _fkToPkTuples.First().Item1, _fkToPkTuples.First().Item2, ExtractionJoinType.Left, _collation); foreach (var supplementalKeyPair in _fkToPkTuples.Skip(1)) { new LookupCompositeJoinInfo(_catalogueRepository, lookup, supplementalKeyPair.Item1, supplementalKeyPair.Item2, _collation); } if (_alsoCreateExtractionInformations) { string proposedName; if (_lookupDescriptionColumns.Length == 1) { proposedName = _foreignKeyExtractionInformation.GetRuntimeName() + "_Desc"; } else { proposedName = _foreignKeyExtractionInformation.GetRuntimeName() + "_" + descCol.GetRuntimeName(); } var newCatalogueItem = new CatalogueItem(_catalogueRepository, _catalogue, proposedName); newCatalogueItem.SetColumnInfo(descCol); //bump everyone down 1 foreach (var toBumpDown in _allExtractionInformations.Where(e => e.Order > _foreignKeyExtractionInformation.Order)) { toBumpDown.Order++; toBumpDown.SaveToDatabase(); } var newExtractionInformation = new ExtractionInformation(_catalogueRepository, newCatalogueItem, descCol, descCol.ToString()); newExtractionInformation.ExtractionCategory = ExtractionCategory.Supplemental; newExtractionInformation.Alias = newCatalogueItem.Name; newExtractionInformation.Order = _foreignKeyExtractionInformation.Order + 1; newExtractionInformation.SaveToDatabase(); } } _catalogue.ClearAllInjections(); }
public override void Execute() { if (_extractionIdentifierColumn == null) { var cata = SelectOne(Activator.RepositoryLocator.CatalogueRepository.GetAllObjects <Catalogue>()); if (cata == null) { return; } SetExtractionIdentifierColumn(GetExtractionInformationFromCatalogue(cata)); } base.Execute(); var request = GetCohortCreationRequest("All patient identifiers in ExtractionInformation '" + _extractionIdentifierColumn.CatalogueItem.Catalogue + "." + _extractionIdentifierColumn.GetRuntimeName() + "' (ID=" + _extractionIdentifierColumn.ID + ")"); //user choose to cancel the cohort creation request dialogue if (request == null) { return; } request.ExtractionIdentifierColumn = _extractionIdentifierColumn; var configureAndExecute = GetConfigureAndExecuteControl(request, "Import column " + _extractionIdentifierColumn + " as cohort and commmit results"); Activator.ShowWindow(configureAndExecute); }
public bool IsCompatible(ExtractionInformation extractionInformation) { return(extractionInformation.GetRuntimeName() == RuntimeName && extractionInformation.ColumnInfo.Data_type == DataType); }
public PrivateIdentifierPrototype(ExtractionInformation extractionInformation) { RuntimeName = extractionInformation.GetRuntimeName(); DataType = extractionInformation.ColumnInfo.Data_type; MatchingExtractionInformations = new List <ExtractionInformation>(new [] { extractionInformation }); }
public void TestActuallyCreatingIt(DatabaseType type) { var db = GetCleanedServer(type); //drop it db.Drop(); CreateNewCohortDatabaseWizard wizard = new CreateNewCohortDatabaseWizard(db, CatalogueRepository, DataExportRepository, false); _extractionInfo2.IsExtractionIdentifier = true; _extractionInfo2.SaveToDatabase(); var candidate = wizard.GetPrivateIdentifierCandidates().Single(c => c.RuntimeName.Equals("PrivateIdentifierB")); var ect = wizard.CreateDatabase( candidate, new ThrowImmediatelyCheckNotifier()); //database should exist DiscoveredServerICanCreateRandomDatabasesAndTablesOn.ExpectDatabase(cohortDatabaseName); Assert.IsTrue(db.Exists()); //did it create the correct type? Assert.AreEqual(type, ect.DatabaseType); //the ExternalCohortTable should pass tests ect.Check(new ThrowImmediatelyCheckNotifier()); //now try putting someone in it //the project it will go under var project = new Project(DataExportRepository, "MyProject"); project.ProjectNumber = 10; project.SaveToDatabase(); //the request to put it under there var request = new CohortCreationRequest(project, new CohortDefinition(null, "My cohort", 1, 10, ect), DataExportRepository, "Blah"); //the actual cohort data DataTable dt = new DataTable(); dt.Columns.Add(_extractionInfo2.GetRuntimeName()); dt.Rows.Add(101243); //_extractionInfo2 is of type int //the destination component that will put it there var dest = new BasicCohortDestination(); dest.PreInitialize(request, new ThrowImmediatelyDataLoadEventListener()); //tell it to use the guid allocator dest.ReleaseIdentifierAllocator = typeof(GuidReleaseIdentifierAllocator); dest.ProcessPipelineData(dt, new ThrowImmediatelyDataLoadEventListener(), new GracefulCancellationToken()); dest.Dispose(new ThrowImmediatelyDataLoadEventListener(), null); var cohort = request.CohortCreatedIfAny; Assert.IsNotNull(cohort); var externalData = cohort.GetExternalData(); Assert.AreEqual(10, externalData.ExternalProjectNumber); Assert.IsFalse(string.IsNullOrEmpty(externalData.ExternalDescription)); Assert.AreEqual(DateTime.Now.Year, externalData.ExternalCohortCreationDate.Value.Year); Assert.AreEqual(DateTime.Now.Month, externalData.ExternalCohortCreationDate.Value.Month); Assert.AreEqual(DateTime.Now.Day, externalData.ExternalCohortCreationDate.Value.Day); Assert.AreEqual(DateTime.Now.Hour, externalData.ExternalCohortCreationDate.Value.Hour); cohort.AppendToAuditLog("Test"); Assert.IsTrue(cohort.AuditLog.Contains("Test")); Assert.AreEqual(1, cohort.Count); Assert.AreEqual(1, cohort.CountDistinct); var cohortTable = cohort.FetchEntireCohort(); Assert.AreEqual(1, cohortTable.Rows.Count); var helper = ect.GetQuerySyntaxHelper(); Assert.AreEqual(101243, cohortTable.Rows[0][helper.GetRuntimeName(ect.PrivateIdentifierField)]); var aguid = cohortTable.Rows[0][helper.GetRuntimeName(ect.ReleaseIdentifierField)].ToString(); Assert.IsFalse(string.IsNullOrWhiteSpace(aguid)); //should be a guid //test reversing the anonymisation of something var dtAno = new DataTable(); dtAno.Columns.Add(cohort.GetReleaseIdentifier(true)); dtAno.Columns.Add("Age"); dtAno.Rows.Add(aguid, 23); dtAno.Rows.Add(aguid, 99); cohort.ReverseAnonymiseDataTable(dtAno, new ThrowImmediatelyDataLoadEventListener(), true); Assert.AreEqual(2, dtAno.Columns.Count); Assert.IsTrue(dtAno.Columns.Contains(cohort.GetPrivateIdentifier(true))); Assert.AreEqual("101243", dtAno.Rows[0][cohort.GetPrivateIdentifier(true)]); Assert.AreEqual("101243", dtAno.Rows[1][cohort.GetPrivateIdentifier(true)]); }
/// <summary> /// Returns a human readable description recording that an <see cref="ExtractableCohort"/> /// was generated by fetching identifiers from the given column <paramref name="extractionIdentifierColumn"/> /// </summary> /// <param name="extractionIdentifierColumn"></param> /// <returns></returns> public string GetDescription(ExtractionInformation extractionIdentifierColumn) { return(InExtractionInformation + " '" + extractionIdentifierColumn.CatalogueItem.Catalogue + "." + extractionIdentifierColumn.GetRuntimeName() + "' (ID=" + extractionIdentifierColumn.ID + ")"); }