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 override async Task <long> CreateInstanceIndexAsync(DicomDataset instance, IEnumerable <QueryTag> queryTags, CancellationToken cancellationToken) { EnsureArg.IsNotNull(instance, nameof(instance)); EnsureArg.IsNotNull(queryTags, nameof(queryTags)); using (SqlConnectionWrapper sqlConnectionWrapper = await _sqlConnectionFactoryWrapper.ObtainSqlConnectionWrapperAsync(cancellationToken)) using (SqlCommandWrapper sqlCommandWrapper = sqlConnectionWrapper.CreateSqlCommand()) { // Build parameter for extended query tag. VLatest.AddInstanceTableValuedParameters parameters = AddInstanceTableValuedParametersBuilder.Build( instance, queryTags.Where(tag => tag.IsExtendedQueryTag)); VLatest.AddInstance.PopulateCommand( sqlCommandWrapper, instance.GetString(DicomTag.StudyInstanceUID), instance.GetString(DicomTag.SeriesInstanceUID), instance.GetString(DicomTag.SOPInstanceUID), instance.GetSingleValueOrDefault <string>(DicomTag.PatientID), instance.GetSingleValueOrDefault <string>(DicomTag.PatientName), instance.GetSingleValueOrDefault <string>(DicomTag.ReferringPhysicianName), instance.GetStringDateAsDate(DicomTag.StudyDate), instance.GetSingleValueOrDefault <string>(DicomTag.StudyDescription), instance.GetSingleValueOrDefault <string>(DicomTag.AccessionNumber), instance.GetSingleValueOrDefault <string>(DicomTag.Modality), instance.GetStringDateAsDate(DicomTag.PerformedProcedureStepStartDate), (byte)IndexStatus.Creating, parameters); try { return((long)(await sqlCommandWrapper.ExecuteScalarAsync(cancellationToken))); } catch (SqlException ex) { switch (ex.Number) { case SqlErrorCodes.Conflict: { if (ex.State == (byte)IndexStatus.Creating) { throw new PendingInstanceException(); } throw new InstanceAlreadyExistsException(); } } throw new DataStoreException(ex); } } }