public void GivenStringExtendedQueryTagFilter_WhenIELevelStudy_ValidateExtendedQueryTagFilter() { var stringBuilder = new IndentedStringBuilder(new StringBuilder()); var includeField = new QueryIncludeField(new List <DicomTag>()); var queryTag = new QueryTag(DicomTag.ModelGroupUID.BuildExtendedQueryTagStoreEntry(level: QueryTagLevel.Study)); var filter = new StringSingleValueMatchCondition(queryTag, "123"); filter.QueryTag = queryTag; var filters = new List <QueryFilterCondition>() { filter, }; var query = new QueryExpression(QueryResource.AllStudies, includeField, false, 0, 0, filters, Array.Empty <string>()); SqlParameterCollection sqlParameterCollection = CreateSqlParameterCollection(); var parm = new SqlQueryParameterManager(sqlParameterCollection); new SqlQueryGenerator(stringBuilder, query, parm, SqlServer.Features.Schema.SchemaVersion.V4, DefaultPartition.Key); string expectedExtendedQueryTagTableFilter = @"INNER JOIN dbo.ExtendedQueryTagString cts1 ON cts1.PartitionKey = st.PartitionKey AND cts1.StudyKey = st.StudyKey WHERE"; string expectedFilters = @"AND cts1.TagKey=@p0 AND cts1.TagValue=@p1"; string builtString = stringBuilder.ToString(); Assert.Equal(queryTag.ExtendedQueryTagStoreEntry.Key.ToString(), sqlParameterCollection[0].Value.ToString()); Assert.Equal(filter.Value.ToString(), sqlParameterCollection[1].Value.ToString()); Assert.Contains(expectedExtendedQueryTagTableFilter, builtString); Assert.Contains(expectedFilters, builtString); }
public override void Visit(StringSingleValueMatchCondition stringSingleValueMatchCondition) { var dicomTagSqlEntry = DicomTagSqlEntry.GetDicomTagSqlEntry(stringSingleValueMatchCondition.DicomTag); var tableAlias = GetTableAlias(dicomTagSqlEntry); _stringBuilder .Append("AND ") .Append(dicomTagSqlEntry.SqlColumn, tableAlias) .Append("=") .Append(_parameters.AddParameter(dicomTagSqlEntry.SqlColumn, stringSingleValueMatchCondition.Value)) .AppendLine(); }
public void GivenMultipleExtendedQueryTagFiltersOnSameLevel_WhenIELevelInstance_ValidateExtendedQueryTagFilter() { var stringBuilder = new IndentedStringBuilder(new StringBuilder()); var includeField = new QueryIncludeField(new List <DicomTag>()); var queryTag1 = new QueryTag(DicomTag.ModelGroupUID.BuildExtendedQueryTagStoreEntry(level: QueryTagLevel.Series)); var filter1 = new StringSingleValueMatchCondition(queryTag1, "abc"); filter1.QueryTag = queryTag1; var queryTag2 = new QueryTag(DicomTag.ContainerDescription.BuildExtendedQueryTagStoreEntry(key: 2, level: QueryTagLevel.Series)); var filter2 = new StringSingleValueMatchCondition(queryTag2, "description"); filter2.QueryTag = queryTag2; var filters = new List <QueryFilterCondition>() { filter1, filter2, }; var query = new QueryExpression(QueryResource.AllInstances, includeField, false, 0, 0, filters, Array.Empty <string>()); SqlParameterCollection sqlParameterCollection = CreateSqlParameterCollection(); var parm = new SqlQueryParameterManager(sqlParameterCollection); new SqlQueryGenerator(stringBuilder, query, parm, SqlServer.Features.Schema.SchemaVersion.V4, DefaultPartition.Key); // cts1 is associated with filter1 which is at the instance level. This means the join should be on all three keys. // cts2 is associated with filter2 which is at the series level. This means the join should be on only study and series keys. // ctl4 is associated with filter3 which is at the study level. This means the join should be on only the study key. string expectedExtendedQueryTagTableFilter = @"INNER JOIN dbo.ExtendedQueryTagString cts1 ON cts1.PartitionKey = st.PartitionKey AND cts1.StudyKey = st.StudyKey AND cts1.SeriesKey = se.SeriesKey INNER JOIN dbo.ExtendedQueryTagString cts2 ON cts2.PartitionKey = st.PartitionKey AND cts2.StudyKey = st.StudyKey AND cts2.SeriesKey = se.SeriesKey WHERE"; string expectedFilters = @"AND cts1.TagKey=@p0 AND cts1.TagValue=@p1 AND cts2.TagKey=@p2 AND cts2.TagValue=@p3"; string builtString = stringBuilder.ToString(); Assert.Equal(queryTag1.ExtendedQueryTagStoreEntry.Key.ToString(), sqlParameterCollection[0].Value.ToString()); Assert.Equal(filter1.Value.ToString(), sqlParameterCollection[1].Value.ToString()); Assert.Equal(queryTag2.ExtendedQueryTagStoreEntry.Key.ToString(), sqlParameterCollection[2].Value.ToString()); Assert.Equal(filter2.Value.ToString(), sqlParameterCollection[3].Value.ToString()); Assert.Contains(expectedExtendedQueryTagTableFilter, builtString); Assert.Contains(expectedFilters, builtString); }
public override void Visit(StringSingleValueMatchCondition stringSingleValueMatchCondition) { var queryTag = stringSingleValueMatchCondition.QueryTag; var dicomTagSqlEntry = DicomTagSqlEntry.GetDicomTagSqlEntry(queryTag); var tableAlias = GetTableAlias(dicomTagSqlEntry, queryTag.IsExtendedQueryTag ? queryTag.ExtendedQueryTagStoreEntry.Key : null); _stringBuilder .Append("AND "); AppendExtendedQueryTagKeyFilter(dicomTagSqlEntry, tableAlias, stringSingleValueMatchCondition); _stringBuilder .Append(dicomTagSqlEntry.SqlColumn, tableAlias) .Append("=") .Append(_parameters.AddParameter(dicomTagSqlEntry.SqlColumn, stringSingleValueMatchCondition.Value)) .AppendLine(); }
public void GivenExtendedQueryTagFilterWithNonUidFilter_WhenIELevelSeries_ValidateExtendedQueryTagFilter() { var stringBuilder = new IndentedStringBuilder(new StringBuilder()); var includeField = new QueryIncludeField(false, new List <DicomTag>()); var queryTag = new QueryTag(DicomTag.ModelGroupUID.BuildExtendedQueryTagStoreEntry(level: QueryTagLevel.Series)); var extendedQueryTagFilter = new StringSingleValueMatchCondition(queryTag, "123"); extendedQueryTagFilter.QueryTag = queryTag; var filter = new StringSingleValueMatchCondition(new QueryTag(DicomTag.Modality), "abc"); var filters = new List <QueryFilterCondition>() { filter, extendedQueryTagFilter, }; var query = new QueryExpression(QueryResource.StudySeries, includeField, false, 0, 0, filters); SqlParameterCollection sqlParameterCollection = CreateSqlParameterCollection(); var parm = new SqlQueryParameterManager(sqlParameterCollection); new SqlQueryGenerator(stringBuilder, query, parm); string expectedExtendedQueryTagTableFilter = @"INNER JOIN dbo.ExtendedQueryTagString cts1 ON cts1.StudyKey = st.StudyKey AND cts1.SeriesKey = se.SeriesKey WHERE"; string expectedFilter = @"AND se.Modality=@p0"; string expectedExtendedQueryTagFilter = @"AND cts1.TagKey=@p1 AND cts1.TagValue=@p2"; string builtString = stringBuilder.ToString(); Assert.Equal(queryTag.ExtendedQueryTagStoreEntry.Key.ToString(), sqlParameterCollection[1].Value.ToString()); Assert.Equal(extendedQueryTagFilter.Value.ToString(), sqlParameterCollection[2].Value.ToString()); Assert.Contains(expectedExtendedQueryTagTableFilter, builtString); Assert.Contains(expectedFilter, builtString); Assert.Contains(expectedExtendedQueryTagFilter, builtString); }
public abstract void Visit(StringSingleValueMatchCondition stringSingleValueMatchCondition);
public void GivenMultipleExtendedQueryTagFiltersOnDifferentLevels_WhenIELevelInstance_ValidateExtendedQueryTagFilter() { var stringBuilder = new IndentedStringBuilder(new StringBuilder()); var includeField = new QueryIncludeField(false, new List <DicomTag>()); var queryTag1 = new QueryTag(DicomTag.ModelGroupUID.BuildExtendedQueryTagStoreEntry(key: 1, level: QueryTagLevel.Instance)); var filter1 = new StringSingleValueMatchCondition(queryTag1, "abc"); filter1.QueryTag = queryTag1; var queryTag2 = new QueryTag(DicomTag.ContainerDescription.BuildExtendedQueryTagStoreEntry(key: 2, level: QueryTagLevel.Series)); var filter2 = new StringSingleValueMatchCondition(queryTag2, "description"); filter2.QueryTag = queryTag2; var queryTag3 = new QueryTag(DicomTag.NumberOfAssessmentObservations.BuildExtendedQueryTagStoreEntry(key: 4, level: QueryTagLevel.Study)); var filter3 = new LongSingleValueMatchCondition(queryTag3, 123); filter3.QueryTag = queryTag3; var filters = new List <QueryFilterCondition>() { filter1, filter2, filter3, }; var query = new QueryExpression(QueryResource.AllInstances, includeField, false, 0, 0, filters); SqlParameterCollection sqlParameterCollection = CreateSqlParameterCollection(); var parm = new SqlQueryParameterManager(sqlParameterCollection); new SqlQueryGenerator(stringBuilder, query, parm); // cts1 is associated with filter1 which is at the instance level. This means the join should be on all three keys. // cts2 is associated with filter2 which is at the series level. This means the join should be on only study and series keys. // ctl4 is associated with filter3 which is at the study level. This means the join should be on only the study key. string expectedExtendedQueryTagTableFilter = @"INNER JOIN dbo.ExtendedQueryTagString cts1 ON cts1.StudyKey = st.StudyKey AND cts1.SeriesKey = se.SeriesKey AND cts1.InstanceKey = i.InstanceKey INNER JOIN dbo.ExtendedQueryTagString cts2 ON cts2.StudyKey = st.StudyKey AND cts2.SeriesKey = se.SeriesKey INNER JOIN dbo.ExtendedQueryTagLong ctl4 ON ctl4.StudyKey = st.StudyKey WHERE"; string expectedFilters = @"AND cts1.TagKey=@p0 AND cts1.TagValue=@p1 AND cts2.TagKey=@p2 AND cts2.TagValue=@p3 AND ctl4.TagKey=@p4 AND ctl4.TagValue=@p5"; string builtString = stringBuilder.ToString(); Assert.Equal(queryTag1.ExtendedQueryTagStoreEntry.Key.ToString(), sqlParameterCollection[0].Value.ToString()); Assert.Equal(filter1.Value.ToString(), sqlParameterCollection[1].Value.ToString()); Assert.Equal(queryTag2.ExtendedQueryTagStoreEntry.Key.ToString(), sqlParameterCollection[2].Value.ToString()); Assert.Equal(filter2.Value.ToString(), sqlParameterCollection[3].Value.ToString()); Assert.Equal(queryTag3.ExtendedQueryTagStoreEntry.Key.ToString(), sqlParameterCollection[4].Value.ToString()); Assert.Equal(filter3.Value.ToString(), sqlParameterCollection[5].Value.ToString()); Assert.Contains(expectedExtendedQueryTagTableFilter, builtString); Assert.Contains(expectedFilters, builtString); }