Exemple #1
0
        public void GivenPatientNameFilterForExtendedQueryTag_WithFuzzyMatchMultiWord_ValidateContainsFilterGenerated()
        {
            var stringBuilder = new IndentedStringBuilder(new StringBuilder());
            var includeField  = new QueryIncludeField(new List <DicomTag>());
            var queryTag      = new QueryTag(DicomTag.ConsultingPhysicianName.BuildExtendedQueryTagStoreEntry(level: QueryTagLevel.Series));
            var filter        = new PersonNameFuzzyMatchCondition(queryTag, "Fall 6");

            filter.QueryTag = queryTag;
            var filters = new List <QueryFilterCondition>()
            {
                filter,
            };
            var query = new QueryExpression(QueryResource.AllInstances, includeField, true, 10, 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 expectedParam = $"\"Fall 6*\"";

            string expectedFilters = @"AND ctpn1.TagKey=@p0
AND CONTAINS(ctpn1.TagValueWords, @p1)";

            Assert.Equal(queryTag.ExtendedQueryTagStoreEntry.Key.ToString(), sqlParameterCollection[0].Value.ToString());
            Assert.Equal(expectedParam, sqlParameterCollection[1].Value.ToString());
            Assert.Contains(expectedFilters, stringBuilder.ToString());
        }
        public override void Visit(PersonNameFuzzyMatchCondition fuzzyMatchCondition)
        {
            var dicomTagSqlEntry = DicomTagSqlEntry.GetDicomTagSqlEntry(fuzzyMatchCondition.DicomTag);

            char[]   delimiterChars = { ' ' };
            string[] words          = fuzzyMatchCondition.Value.Split(delimiterChars, System.StringSplitOptions.RemoveEmptyEntries);

            var fuzzyMatchString = string.Join(" AND ", words.Select(w => $"\"{w}*\""));
            var tableAlias       = GetTableAlias(dicomTagSqlEntry);

            _stringBuilder
            .Append("AND CONTAINS(")
            .Append(dicomTagSqlEntry.FullTextIndexColumnName)
            .Append(", ")
            .Append(_parameters.AddParameter(dicomTagSqlEntry.SqlColumn, fuzzyMatchString))
            .Append(")")
            .AppendLine();
        }
        public override void Visit(PersonNameFuzzyMatchCondition fuzzyMatchCondition)
        {
            var queryTag         = fuzzyMatchCondition.QueryTag;
            var dicomTagSqlEntry = DicomTagSqlEntry.GetDicomTagSqlEntry(queryTag);
            var tableAlias       = GetTableAlias(dicomTagSqlEntry, queryTag.IsExtendedQueryTag ? queryTag.ExtendedQueryTagStoreEntry.Key : null);

            var fuzzyMatchString = $"\"{fuzzyMatchCondition.Value}*\"";

            _stringBuilder
            .Append("AND ");

            AppendExtendedQueryTagKeyFilter(dicomTagSqlEntry, tableAlias, fuzzyMatchCondition);
            _stringBuilder
            .Append("CONTAINS(")
            .Append(tableAlias)
            .Append(".")
            .Append(dicomTagSqlEntry.FullTextIndexColumnName)
            .Append(", ")
            .Append(_parameters.AddParameter(dicomTagSqlEntry.SqlColumn, fuzzyMatchString))
            .Append(")")
            .AppendLine();
        }
Exemple #4
0
 public abstract void Visit(PersonNameFuzzyMatchCondition fuzzyMatchCondition);