in src/Microsoft.Health.Dicom.Core/Features/Query/QueryParser.cs [155:196]
private bool ParseFilterCondition(
KeyValuePair<string, string> queryParameter,
IEnumerable<QueryTag> queryTags,
bool fuzzyMatching,
out QueryFilterCondition condition)
{
condition = null;
// parse tag
if (!TryParseDicomAttributeId(queryParameter.Key, out DicomTag dicomTag))
{
return false;
}
// QueryTag could be either core or extended query tag.
QueryTag queryTag = GetMatchingQueryTag(dicomTag, queryParameter.Key, queryTags);
// check if tag is disabled
if (queryTag.IsExtendedQueryTag && queryTag.ExtendedQueryTagStoreEntry.QueryStatus == QueryStatus.Disabled)
{
throw new QueryParseException(string.Format(DicomCoreResource.QueryIsDisabledOnAttribute, queryParameter.Key));
}
if (string.IsNullOrWhiteSpace(queryParameter.Value))
{
throw new QueryParseException(string.Format(DicomCoreResource.QueryEmptyAttributeValue, queryParameter.Key));
}
if (!ValueParsers.TryGetValue(queryTag.VR, out Func<QueryTag, string, QueryFilterCondition> valueParser))
{
return false;
}
condition = valueParser(queryTag, queryParameter.Value);
if (fuzzyMatching && QueryLimit.IsValidFuzzyMatchingQueryTag(queryTag))
{
var s = condition as StringSingleValueMatchCondition;
condition = new PersonNameFuzzyMatchCondition(s.QueryTag, s.Value);
}
return true;
}