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();
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
 public bool IsCompatible(ExtractionInformation extractionInformation)
 {
     return(extractionInformation.GetRuntimeName() == RuntimeName && extractionInformation.ColumnInfo.Data_type == DataType);
 }
Beispiel #5
0
 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 + ")");
 }