예제 #1
0
        async Task <Dataset> ExecuteDatasetAsync(DatasetExecutionContext context, CancellationToken token)
        {
            var sql        = context.CompiledQuery;
            var parameters = context.SqlParameters();
            var pepper     = context.QueryContext.Pepper;

            using (var cn = new SqlConnection(opts.ConnectionString))
            {
                await cn.OpenAsync();

                using (var cmd = new SqlCommand(sql, cn))
                {
                    cmd.Parameters.AddRange(parameters);
                    using (var reader = await cmd.ExecuteReaderAsync(token))
                    {
                        var dbSchema     = GetShapedSchema(context, reader);
                        var marshaller   = DatasetMarshaller.For(context.Shape, dbSchema, pepper);
                        var data         = marshaller.Marshal(reader, user.Anonymize());
                        var resultSchema = ShapedDatasetSchema.From(dbSchema);

                        return(new Dataset
                        {
                            Schema = resultSchema,
                            Results = data.GroupBy(d => d.PersonId).ToDictionary(g => g.Key, g => g.Select(r => r))
                        });
                    }
                }
            }
        }
예제 #2
0
        public async Task <Dataset> ExecuteDatasetAsync(DatasetExecutionContext context, CancellationToken token)
        {
            var sql        = context.CompiledQuery;
            var parameters = context.SqlParameters();
            var pepper     = context.QueryContext.Pepper;
            var deidentify = deidentOpts.Patient.Enabled && user.Anonymize();

            using (var cn = new SqlConnection(dbOpts.ConnectionString))
            {
                await cn.OpenAsync();

                using (var cmd = new SqlCommand(sql, cn))
                {
                    cmd.Parameters.AddRange(parameters);
                    using (var reader = await cmd.ExecuteReaderAsync(token))
                    {
                        var dbSchema     = GetShapedSchema(context, reader);
                        var marshaller   = DatasetMarshaller.For(context, dbSchema, pepper);
                        var data         = marshaller.Marshal(reader, deidentify, deidentOpts);
                        var resultSchema = ShapedDatasetSchema.From(dbSchema, context);

                        return(new Dataset(resultSchema, data));
                    }
                }
            }
        }
예제 #3
0
        public DynamicDatasetResultSchemaDTO(ShapedDatasetSchema schema)
        {
            var contract = schema.Contract as DynamicContract;

            Shape  = schema.Shape;
            Fields = schema.Fields
                     .Where(f => contract.Fields.Any(sf => sf.Name == f.Name) && f.Name != DatasetColumns.PersonId)
                     .Select(f => new BaseSchemaFieldDTO(f));
            SqlFieldDate         = contract.SqlFieldDate;
            SqlFieldValueString  = contract.SqlFieldValueString;
            SqlFieldValueNumeric = contract.SqlFieldValueNumeric;
            IsEncounterBased     = contract.IsEncounterBased;
        }
예제 #4
0
파일: SchemaTests.cs 프로젝트: mh2727/leaf
        public void ShapedDatasetSchema_Should_Prune_Salt()
        {
            var actual = new ObservationDatasetResultSchema(new SchemaField[] {
                new SchemaField {
                    Name = "personId", Type = LeafType.String
                },
                new SchemaField {
                    Name = "category", Type = LeafType.String
                },
                new SchemaField {
                    Name = "code", Type = LeafType.String
                },
                new SchemaField {
                    Name = "effectiveDate", Type = LeafType.DateTime
                },
                new SchemaField {
                    Name = "encounterId", Type = LeafType.String
                },
                new SchemaField {
                    Name = "referenceRangeLow", Type = LeafType.Numeric
                },
                new SchemaField {
                    Name = "referenceRangeHigh", Type = LeafType.Numeric
                },
                new SchemaField {
                    Name = "specimenType", Type = LeafType.String
                },
                new SchemaField {
                    Name = "valueString", Type = LeafType.String
                },
                new SchemaField {
                    Name = "valueQuantity", Type = LeafType.Numeric
                },
                new SchemaField {
                    Name = "valueUnit", Type = LeafType.String
                },
                new SchemaField {
                    Name = "unrecognizedField", Type = LeafType.String
                },
                new SchemaField {
                    Name = "Salt", Type = LeafType.Guid
                }
            });

            var datasetSchema = ShapedDatasetSchema.From(actual);

            Assert.DoesNotContain(datasetSchema.Fields, f => f.Name == "Salt");
            Assert.DoesNotContain(datasetSchema.Fields, f => f.Name == "unrecognizedField");
        }
예제 #5
0
 public DatasetResultSchemaDTO(ShapedDatasetSchema schema)
 {
     Shape  = schema.Shape;
     Fields = schema.Fields.Select(f => f.Name);
 }
예제 #6
0
 public DatasetResultSchemaDTO(ShapedDatasetSchema schema)
 {
     Shape  = schema.Shape;
     Fields = schema.Fields.Select(f => new BaseSchemaFieldDTO(f));
 }