コード例 #1
0
ファイル: ChunkPart.cs プロジェクト: lanicon/ETL-CDMBuilder
        private void AddEntity(QueryDefinition queryDefinition, IEnumerable <EntityDefinition> definitions,
                               IDataRecord reader, Guid recordGuid, string definitionName)
        {
            if (definitions == null)
            {
                return;
            }

            foreach (var d in queryDefinition.FindDefinition(definitions, reader))
            {
                var personId = reader.GetLong(d.PersonId);

                if (LastSavedPersonId.HasValue && personId <= LastSavedPersonId)
                {
                    continue;
                }

                if (!queryDefinition.ProcessedPersonIds.ContainsKey(personId.Value))
                {
                    queryDefinition.ProcessedPersonIds.Add(personId.Value, 0);
                }

                try
                {
                    Concept conceptDef = null;
                    if (d.Concepts != null && d.Concepts.Any())
                    {
                        conceptDef = d.Concepts[0];
                    }

                    bool added;
                    var  pb =
                        PersonBuilders.GetOrAdd(personId.Value, key => new Lazy <IPersonBuilder>(() => CreatePersonBuilder()),
                                                out added).Value;

                    pb.JoinToVocabulary(d.Vocabulary);

                    foreach (var entity in d.GetConcepts(conceptDef, reader, OffsetManager))
                    {
                        if (entity == null)
                        {
                            continue;
                        }

                        entity.SourceRecordGuid = recordGuid;
                        AddEntity(entity);

                        switch (entity.GeEntityType())
                        {
                        case EntityType.DrugExposure:
                        {
                            var parent = (DrugExposure)entity;
                            if (queryDefinition.DrugCost != null && queryDefinition.DrugCost[0].Match(reader))
                            {
                                PersonBuilders[parent.PersonId].Value.AddChildData(parent, queryDefinition.DrugCost[0].CreateEnity(parent, reader));
                            }
                            break;
                        }

                        case EntityType.ProcedureOccurrence:
                        {
                            if (queryDefinition.ProcedureCost != null &&
                                queryDefinition.ProcedureCost[0].Match(reader))
                            {
                                var parent = (ProcedureOccurrence)entity;
                                PersonBuilders[parent.PersonId].Value.AddChildData(parent,
                                                                                   queryDefinition.ProcedureCost[0].CreateEnity(parent,
                                                                                                                                reader,
                                                                                                                                OffsetManager));
                            }

                            break;
                        }

                        case EntityType.VisitOccurrence:
                        {
                            if (queryDefinition.VisitCost != null && queryDefinition.VisitCost[0].Match(reader))
                            {
                                var parent = (VisitOccurrence)entity;
                                PersonBuilders[parent.PersonId].Value.AddChildData(parent,
                                                                                   queryDefinition.VisitCost[0].CreateEnity(parent, reader,
                                                                                                                            OffsetManager));
                            }

                            break;
                        }

                        case EntityType.DeviceExposure:
                        {
                            var parent = (DeviceExposure)entity;
                            if (queryDefinition.DeviceCost != null && queryDefinition.DeviceCost[0].Match(reader))
                            {
                                PersonBuilders[parent.PersonId].Value.AddChildData(parent,
                                                                                   queryDefinition.DeviceCost[0].CreateEnity(parent, reader,
                                                                                                                             OffsetManager));
                            }
                            break;
                        }

                        case EntityType.Observation:
                        {
                            var parent = (Observation)entity;
                            if (queryDefinition.ObservationCost != null && queryDefinition.ObservationCost[0].Match(reader))
                            {
                                PersonBuilders[parent.PersonId].Value.AddChildData(parent,
                                                                                   queryDefinition.ObservationCost[0].CreateEnity(parent, reader));
                            }
                            break;
                        }

                        case EntityType.Measurement:
                        {
                            var parent = (Measurement)entity;
                            if (queryDefinition.MeasurementCost != null && queryDefinition.MeasurementCost[0].Match(reader))
                            {
                                PersonBuilders[parent.PersonId].Value.AddChildData(parent,
                                                                                   queryDefinition.MeasurementCost[0].CreateEnity(parent, reader));
                            }
                            break;
                        }
                        }
                    }

                    queryDefinition.RowProcessed();
                }
                catch (Exception e)
                {
                    Console.WriteLine("Error");
                    Console.WriteLine(e.Message);
                    Console.WriteLine(e.StackTrace);
                    throw;
                }
            }
        }
コード例 #2
0
        private void AddEntity(QueryDefinition queryDefinition, IEnumerable <EntityDefinition> definitions,
                               IDataRecord reader, Guid recordGuid)
        {
            if (definitions == null)
            {
                return;
            }

            foreach (var d in queryDefinition.FindDefinition(definitions, reader))
            {
                var personId = reader.GetLong(d.PersonId);

                if (_lastSavedPersonId.HasValue && personId <= _lastSavedPersonId)
                {
                    continue;
                }

                queryDefinition.ProcessedPersonIds.TryAdd(personId.Value, 0);
                queryDefinition.ProcessedPersonIds[personId.Value] = ((S3DataReader2)reader).RowIndex;

                try
                {
                    Concept conceptDef = null;
                    if (d.Concepts != null && d.Concepts.Any())
                    {
                        conceptDef = d.Concepts[0];
                    }

                    bool added;
                    var  pb =
                        _personBuilders.GetOrAdd(personId.Value,
                                                 key => new Lazy <IPersonBuilder>(() => _createPersonBuilder()),
                                                 out added).Value;

                    pb.JoinToVocabulary(d.Vocabulary);

                    foreach (var entity in d.GetConcepts(conceptDef, reader, _offsetManager))
                    {
                        if (entity == null)
                        {
                            continue;
                        }

                        entity.SourceRecordGuid = recordGuid;
                        AddEntity(entity);

                        switch (entity.GeEntityType())
                        {
                        case EntityType.DrugExposure:
                        {
                            if (queryDefinition.DrugCost != null && queryDefinition.DrugCost[0].Match(reader))
                            {
                                AddChildData((DrugExposure)entity,
                                             queryDefinition.DrugCost[0].CreateEnity((DrugExposure)entity, reader));
                            }
                            break;
                        }

                        case EntityType.ProcedureOccurrence:
                        {
                            if (queryDefinition.ProcedureCost != null &&
                                queryDefinition.ProcedureCost[0].Match(reader))
                            {
                                AddChildData((ProcedureOccurrence)entity,
                                             queryDefinition.ProcedureCost[0].CreateEnity((ProcedureOccurrence)entity,
                                                                                          reader,
                                                                                          _offsetManager));
                            }
                            break;
                        }

                        case EntityType.VisitOccurrence:
                        {
                            if (queryDefinition.VisitCost != null && queryDefinition.VisitCost[0].Match(reader))
                            {
                                AddChildData((VisitOccurrence)entity,
                                             queryDefinition.VisitCost[0].CreateEnity((VisitOccurrence)entity, reader,
                                                                                      _offsetManager));
                            }
                            break;
                        }

                        case EntityType.DeviceExposure:
                        {
                            if (queryDefinition.DeviceCost != null && queryDefinition.DeviceCost[0].Match(reader))
                            {
                                AddChildData((DeviceExposure)entity,
                                             queryDefinition.DeviceCost[0].CreateEnity((DeviceExposure)entity, reader,
                                                                                       _offsetManager));
                            }
                            break;
                        }

                        case EntityType.Observation:
                        {
                            if (queryDefinition.ObservationCost != null &&
                                queryDefinition.ObservationCost[0].Match(reader))
                            {
                                AddChildData((Observation)entity,
                                             queryDefinition.ObservationCost[0].CreateEnity((Observation)entity, reader));
                            }
                            break;
                        }

                        case EntityType.Measurement:
                        {
                            if (queryDefinition.MeasurementCost != null &&
                                queryDefinition.MeasurementCost[0].Match(reader))
                            {
                                AddChildData((Measurement)entity,
                                             queryDefinition.MeasurementCost[0].CreateEnity((Measurement)entity, reader));
                            }
                            break;
                        }
                        }
                    }

                    queryDefinition.RowProcessed();
                }
                catch (Exception e)
                {
                    Console.WriteLine("WARN_EXC - AddEntity - throw");
                    Console.WriteLine(e.Message);
                    Console.WriteLine(e.StackTrace);
                    Settings.Current.Error = true;
                    throw;
                }
            }
        }