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)) }); } } } }
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)); } } } }
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"); }