public void GivenDateTimeExtendedQueryTagFilter_WhenIELevelStudy_ValidateExtendedQueryTagFilter() { var stringBuilder = new IndentedStringBuilder(new StringBuilder()); var includeField = new QueryIncludeField(new List <DicomTag>()); var queryTag = new QueryTag(DicomTag.DateTime.BuildExtendedQueryTagStoreEntry(level: QueryTagLevel.Study)); var filter = new DateRangeValueMatchCondition(queryTag, DateTime.ParseExact("19510910111213.123", QueryParser.DateTimeTagValueFormats, null), DateTime.ParseExact("19571110111213.123", QueryParser.DateTimeTagValueFormats, null)); 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.ExtendedQueryTagDateTime ctdt1 ON ctdt1.PartitionKey = st.PartitionKey AND ctdt1.StudyKey = st.StudyKey WHERE"; string expectedFilters = @"AND ctdt1.TagKey=@p0 AND ctdt1.TagValue BETWEEN @p1 AND @p2"; string builtString = stringBuilder.ToString(); Assert.Equal(queryTag.ExtendedQueryTagStoreEntry.Key.ToString(), sqlParameterCollection[0].Value.ToString()); Assert.Equal(filter.Minimum.ToString(SqlDateFormat), sqlParameterCollection[1].Value.ToString()); Assert.Equal(filter.Maximum.ToString(SqlDateFormat), sqlParameterCollection[2].Value.ToString()); Assert.Contains(expectedExtendedQueryTagTableFilter, builtString); Assert.Contains(expectedFilters, builtString); }
public override void Visit(DateRangeValueMatchCondition rangeValueMatchCondition) { var dicomTagSqlEntry = DicomTagSqlEntry.GetDicomTagSqlEntry(rangeValueMatchCondition.DicomTag); var tableAlias = GetTableAlias(dicomTagSqlEntry); _stringBuilder .Append("AND ") .Append(dicomTagSqlEntry.SqlColumn, tableAlias).Append(" BETWEEN ") .Append(_parameters.AddParameter(dicomTagSqlEntry.SqlColumn, rangeValueMatchCondition.Minimum.ToString(SqlDateFormat))) .Append(" AND ") .Append(_parameters.AddParameter(dicomTagSqlEntry.SqlColumn, rangeValueMatchCondition.Maximum.ToString(SqlDateFormat))) .AppendLine(); }
public override void Visit(DateRangeValueMatchCondition rangeValueMatchCondition) { var queryTag = rangeValueMatchCondition.QueryTag; var dicomTagSqlEntry = DicomTagSqlEntry.GetDicomTagSqlEntry(queryTag); var tableAlias = GetTableAlias(dicomTagSqlEntry, queryTag.IsExtendedQueryTag ? queryTag.ExtendedQueryTagStoreEntry.Key : null); _stringBuilder .Append("AND "); AppendExtendedQueryTagKeyFilter(dicomTagSqlEntry, tableAlias, rangeValueMatchCondition); _stringBuilder .Append(dicomTagSqlEntry.SqlColumn, tableAlias).Append(" BETWEEN ") .Append(_parameters.AddParameter(dicomTagSqlEntry.SqlColumn, rangeValueMatchCondition.Minimum.ToString(SqlDateFormat))) .Append(" AND ") .Append(_parameters.AddParameter(dicomTagSqlEntry.SqlColumn, rangeValueMatchCondition.Maximum.ToString(SqlDateFormat))) .AppendLine(); }
public abstract void Visit(DateRangeValueMatchCondition rangeValueMatchCondition);