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(); }
public abstract void Visit(PersonNameFuzzyMatchCondition fuzzyMatchCondition);