internal void Read(SqlDataReader sqlDataReader, ExtendedQueryTagDataType dataType) { switch (dataType) { case ExtendedQueryTagDataType.StringData: TagValue = sqlDataReader.GetString(1); break; case ExtendedQueryTagDataType.LongData: TagValue = sqlDataReader.GetInt64(1); break; case ExtendedQueryTagDataType.DoubleData: TagValue = sqlDataReader.GetDouble(1); break; case ExtendedQueryTagDataType.DateTimeData: TagValue = sqlDataReader.GetDateTime(1); break; case ExtendedQueryTagDataType.PersonNameData: TagValue = sqlDataReader.GetString(1); break; default: break; } ReadOthers(sqlDataReader); }
async Task <IReadOnlyList <ExtendedQueryTagDataRow> > IExtendedQueryTagStoreTestHelper.GetExtendedQueryTagDataAsync( ExtendedQueryTagDataType dataType, int tagKey, long studyKey, long?seriesKey, long?instanceKey, CancellationToken cancellationToken) { var results = new List <ExtendedQueryTagDataRow>(); string tagKeyParam = "@tagKey"; string studyKeyParam = "@studyKey"; string seriesKeyParam = "@seriesKey"; string instanceKeyParam = "@instanceKey"; // Columns on all extended query tag index data tables are of same names string studyKeyColName = VLatest.ExtendedQueryTagString.StudyKey.Metadata.Name; string seriesKeyColName = VLatest.ExtendedQueryTagString.SeriesKey.Metadata.Name; string instanceKeyColName = VLatest.ExtendedQueryTagString.InstanceKey.Metadata.Name; string tagKeyName = VLatest.ExtendedQueryTagString.TagKey.Metadata.Name; string seriesFilter = seriesKey.HasValue ? $"{seriesKeyColName} = {seriesKeyParam}" : $"{seriesKeyColName} IS NULL"; string instanceFilter = instanceKey.HasValue ? $"{instanceKeyColName} = {instanceKeyParam}" : $"{instanceKeyColName} IS NULL"; return(await GetExtendedQueryTagRowsAsync( dataType, sqlCommand => { sqlCommand.CommandText = @$ " SELECT * FROM {DateTypeAndTableNameMapping[dataType]} WHERE {tagKeyName} = {tagKeyParam} AND {studyKeyColName} = {studyKeyParam}
public void GivenSupportedDicomElement_WhenRead_ThenShouldReturnExpectedValue(DicomElement element, object expectedValue) { DicomDataset dataset = new DicomDataset(); dataset.Add(element); QueryTag tag = new QueryTag(element.Tag.BuildExtendedQueryTagStoreEntry(vr: element.ValueRepresentation.Code)); var parameters = AddInstanceTableValuedParametersBuilder.Build(dataset, new QueryTag[] { tag }); ExtendedQueryTagDataType dataType = ExtendedQueryTagLimit.ExtendedQueryTagVRAndDataTypeMapping[element.ValueRepresentation.Code]; switch (dataType) { case ExtendedQueryTagDataType.StringData: Assert.Equal(expectedValue, parameters.StringExtendedQueryTags.First().TagValue); break; case ExtendedQueryTagDataType.LongData: Assert.Equal(expectedValue, parameters.LongExtendedQueryTags.First().TagValue); break; case ExtendedQueryTagDataType.DoubleData: Assert.Equal(expectedValue, parameters.DoubleExtendedQueryTags.First().TagValue); break; case ExtendedQueryTagDataType.DateTimeData: Assert.Equal(expectedValue, parameters.DateTimeExtendedQueryTags.First().TagValue); break; case ExtendedQueryTagDataType.PersonNameData: Assert.Equal(expectedValue, parameters.PersonNameExtendedQueryTags.First().TagValue); break; } }
public static ExtendedQueryTagDataRows Build( DicomDataset instance, IEnumerable <QueryTag> queryTags, SchemaVersion schemaVersion) { EnsureArg.IsNotNull(instance, nameof(instance)); EnsureArg.IsNotNull(queryTags, nameof(queryTags)); var stringRows = new List <InsertStringExtendedQueryTagTableTypeV1Row>(); var longRows = new List <InsertLongExtendedQueryTagTableTypeV1Row>(); var doubleRows = new List <InsertDoubleExtendedQueryTagTableTypeV1Row>(); var dateTimeRows = new List <InsertDateTimeExtendedQueryTagTableTypeV1Row>(); var dateTimeWithUtcRows = new List <InsertDateTimeExtendedQueryTagTableTypeV2Row>(); var personNameRows = new List <InsertPersonNameExtendedQueryTagTableTypeV1Row>(); foreach (QueryTag queryTag in queryTags.Where(x => x.IsExtendedQueryTag)) { // Create row ExtendedQueryTagDataType dataType = ExtendedQueryTagLimit.ExtendedQueryTagVRAndDataTypeMapping[queryTag.VR.Code]; switch (dataType) { case ExtendedQueryTagDataType.StringData: AddStringRow(instance, stringRows, queryTag); break; case ExtendedQueryTagDataType.LongData: AddLongRow(instance, longRows, queryTag); break; case ExtendedQueryTagDataType.DoubleData: AddDoubleRow(instance, doubleRows, queryTag); break; case ExtendedQueryTagDataType.DateTimeData: if ((int)schemaVersion < SchemaVersionConstants.SupportDTAndTMInExtendedQueryTagSchemaVersion) { AddDateTimeRow(instance, dateTimeRows, queryTag); } else { AddDateTimeWithUtcRow(instance, dateTimeWithUtcRows, queryTag); } break; case ExtendedQueryTagDataType.PersonNameData: AddPersonNameRow(instance, personNameRows, queryTag); break; default: Debug.Fail($"Not able to handle {dataType}"); break; } } return(new ExtendedQueryTagDataRows { StringRows = stringRows, LongRows = longRows, DoubleRows = doubleRows, DateTimeRows = dateTimeRows, DateTimeWithUtcRows = dateTimeWithUtcRows, PersonNameRows = personNameRows, }); }
/// <summary> /// Read Index Tag values from DicomDataset. /// </summary> /// <param name="instance">The dicom dataset.</param> /// <param name="queryTags">The index tags.</param> public static VLatest.AddInstanceTableValuedParameters Build( DicomDataset instance, IEnumerable <QueryTag> queryTags) { EnsureArg.IsNotNull(instance, nameof(instance)); EnsureArg.IsNotNull(queryTags, nameof(queryTags)); List <InsertStringExtendedQueryTagTableTypeV1Row> stringRows = new List <InsertStringExtendedQueryTagTableTypeV1Row>(); List <InsertLongExtendedQueryTagTableTypeV1Row> longRows = new List <InsertLongExtendedQueryTagTableTypeV1Row>(); List <InsertDoubleExtendedQueryTagTableTypeV1Row> doubleRows = new List <InsertDoubleExtendedQueryTagTableTypeV1Row>(); List <InsertDateTimeExtendedQueryTagTableTypeV1Row> dateTimeRows = new List <InsertDateTimeExtendedQueryTagTableTypeV1Row>(); List <InsertPersonNameExtendedQueryTagTableTypeV1Row> personNamRows = new List <InsertPersonNameExtendedQueryTagTableTypeV1Row>(); foreach (var queryTag in queryTags) { ExtendedQueryTagDataType dataType = ExtendedQueryTagLimit.ExtendedQueryTagVRAndDataTypeMapping[queryTag.VR.Code]; switch (dataType) { case ExtendedQueryTagDataType.StringData: AddStringRow(instance, stringRows, queryTag); break; case ExtendedQueryTagDataType.LongData: AddLongRow(instance, longRows, queryTag); break; case ExtendedQueryTagDataType.DoubleData: AddDoubleRow(instance, doubleRows, queryTag); break; case ExtendedQueryTagDataType.DateTimeData: AddDateTimeRow(instance, dateTimeRows, queryTag); break; case ExtendedQueryTagDataType.PersonNameData: AddPersonNameRow(instance, personNamRows, queryTag); break; default: Debug.Fail($"Not able to handle {dataType}"); break; } } return(new VLatest.AddInstanceTableValuedParameters(stringRows, longRows, doubleRows, dateTimeRows, personNamRows)); }
public void GivenSupportedDicomElement_WhenRead_ThenShouldReturnExpectedValue(DicomElement element, int schemaVersion, object expectedValue) { DicomDataset dataset = new DicomDataset(); dataset.Add(element); QueryTag tag = new QueryTag(element.Tag.BuildExtendedQueryTagStoreEntry(vr: element.ValueRepresentation.Code)); var parameters = ExtendedQueryTagDataRowsBuilder.Build(dataset, new QueryTag[] { tag }, (SchemaVersion)schemaVersion); ExtendedQueryTagDataType dataType = ExtendedQueryTagLimit.ExtendedQueryTagVRAndDataTypeMapping[element.ValueRepresentation.Code]; switch (dataType) { case ExtendedQueryTagDataType.StringData: Assert.Equal(expectedValue, parameters.StringRows.First().TagValue); break; case ExtendedQueryTagDataType.LongData: Assert.Equal(expectedValue, parameters.LongRows.First().TagValue); break; case ExtendedQueryTagDataType.DoubleData: Assert.Equal(expectedValue, parameters.DoubleRows.First().TagValue); break; case ExtendedQueryTagDataType.DateTimeData: if (schemaVersion < SchemaVersionConstants.SupportDTAndTMInExtendedQueryTagSchemaVersion) { Assert.Equal(expectedValue, parameters.DateTimeRows.First().TagValue); } else { Assert.Equal(expectedValue, parameters.DateTimeWithUtcRows.First().TagValue); } break; case ExtendedQueryTagDataType.PersonNameData: Assert.Equal(expectedValue, parameters.PersonNameRows.First().TagValue); break; } }
internal async Task GivenDicomInstanceWithDifferentTypeOfExtendedQueryTags_WhenStore_ThenTheyShouldBeStoredInProperTable(ExtendedQueryTagDataType dataType, DicomElement element, object expectedValue) { string studyInstanceUid = TestUidGenerator.Generate(); string seriesInstanceUid = TestUidGenerator.Generate(); string sopInstanceUid = TestUidGenerator.Generate(); DicomDataset dataset = Samples.CreateRandomInstanceDataset(studyInstanceUid, seriesInstanceUid, sopInstanceUid); dataset.Add(element); QueryTagLevel level = QueryTagLevel.Study; var extendedQueryTagEntry = element.Tag.BuildAddExtendedQueryTagEntry(level: level); QueryTag queryTag = await AddExtendedQueryTag(extendedQueryTagEntry); try { long watermark = await CreateInstanceIndexAsync(dataset, new QueryTag[] { queryTag }); Instance instance = await _testHelper.GetInstanceAsync(studyInstanceUid, seriesInstanceUid, sopInstanceUid, watermark); IReadOnlyList <ExtendedQueryTagDataRow> rows = await _extendedQueryTagStoreTestHelper.GetExtendedQueryTagDataAsync(dataType, queryTag.ExtendedQueryTagStoreEntry.Key, instance.StudyKey); Assert.Single(rows); Assert.Equal(watermark, rows[0].Watermark); Assert.Equal(expectedValue, rows[0].TagValue); } finally { await _extendedQueryTagStore.DeleteExtendedQueryTagAsync(extendedQueryTagEntry.Path, extendedQueryTagEntry.VR); } }
private void AppendExtendedQueryTagTables() { foreach (QueryFilterCondition condition in _queryExpression.FilterConditions.Where(x => x.QueryTag.IsExtendedQueryTag)) { QueryTag queryTag = condition.QueryTag; int tagKey = queryTag.ExtendedQueryTagStoreEntry.Key; ExtendedQueryTagDataType dataType = ExtendedQueryTagLimit.ExtendedQueryTagVRAndDataTypeMapping[queryTag.VR.Code]; string extendedQueryTagTableAlias = null; _stringBuilder.Append("INNER JOIN "); switch (dataType) { case ExtendedQueryTagDataType.StringData: extendedQueryTagTableAlias = ExtendedQueryTagStringTableAlias + tagKey; _stringBuilder.AppendLine($"{VLatest.ExtendedQueryTagString.TableName} {extendedQueryTagTableAlias}"); break; case ExtendedQueryTagDataType.LongData: extendedQueryTagTableAlias = ExtendedQueryTagLongTableAlias + tagKey; _stringBuilder.AppendLine($"{VLatest.ExtendedQueryTagLong.TableName} {extendedQueryTagTableAlias}"); break; case ExtendedQueryTagDataType.DoubleData: extendedQueryTagTableAlias = ExtendedQueryTagDoubleTableAlias + tagKey; _stringBuilder.AppendLine($"{VLatest.ExtendedQueryTagDouble.TableName} {extendedQueryTagTableAlias}"); break; case ExtendedQueryTagDataType.DateTimeData: extendedQueryTagTableAlias = ExtendedQueryTagDateTimeTableAlias + tagKey; _stringBuilder.AppendLine($"{VLatest.ExtendedQueryTagDateTime.TableName} {extendedQueryTagTableAlias}"); break; case ExtendedQueryTagDataType.PersonNameData: extendedQueryTagTableAlias = ExtendedQueryTagPersonNameTableAlias + tagKey; _stringBuilder.AppendLine($"{VLatest.ExtendedQueryTagPersonName.TableName} {extendedQueryTagTableAlias}"); break; } _stringBuilder .Append("ON ") .Append($"{extendedQueryTagTableAlias}.PartitionKey") .Append(" = ") .AppendLine(VLatest.Study.PartitionKey, StudyTableAlias); _stringBuilder .Append("AND ") .Append($"{extendedQueryTagTableAlias}.StudyKey") .Append(" = ") .AppendLine(VLatest.Study.StudyKey, StudyTableAlias); using (IndentedStringBuilder.DelimitedScope delimited = _stringBuilder.BeginDelimitedOnClause()) { if ((_queryExpression.IsSeriesIELevel() || _queryExpression.IsInstanceIELevel()) && queryTag.Level < QueryTagLevel.Study) { _stringBuilder .Append("AND ") .Append($"{extendedQueryTagTableAlias}.SeriesKey") .Append(" = ") .AppendLine(VLatest.Series.SeriesKey, SeriesTableAlias); } if (_queryExpression.IsInstanceIELevel() && queryTag.Level < QueryTagLevel.Series) { _stringBuilder .Append("AND ") .Append($"{extendedQueryTagTableAlias}.InstanceKey") .Append(" = ") .AppendLine(VLatest.Instance.InstanceKey, InstanceTableAlias); } } } }