in src/Microsoft.Health.Dicom.SqlServer/Features/Query/SqlQueryGenerator.cs [159:230]
private void AppendExtendedQueryTagTables()
{
foreach (QueryFilterCondition condition in _queryExpression.FilterConditions.Where(x => x.QueryTag.IsExtendedQueryTag))
{
QueryTag queryTag = condition.QueryTag;
int tagKey = queryTag.ExtendedQueryTagStoreEntry.Key;
ExtendedQueryTagDataType dataType = ExtendedQueryTagLimit.ExtendedQueryTagVRAndDataTypeMapping[queryTag.VR.Code];
string extendedQueryTagTableAlias = null;
_stringBuilder.Append("INNER JOIN ");
switch (dataType)
{
case ExtendedQueryTagDataType.StringData:
extendedQueryTagTableAlias = ExtendedQueryTagStringTableAlias + tagKey;
_stringBuilder.AppendLine($"{VLatest.ExtendedQueryTagString.TableName} {extendedQueryTagTableAlias}");
break;
case ExtendedQueryTagDataType.LongData:
extendedQueryTagTableAlias = ExtendedQueryTagLongTableAlias + tagKey;
_stringBuilder.AppendLine($"{VLatest.ExtendedQueryTagLong.TableName} {extendedQueryTagTableAlias}");
break;
case ExtendedQueryTagDataType.DoubleData:
extendedQueryTagTableAlias = ExtendedQueryTagDoubleTableAlias + tagKey;
_stringBuilder.AppendLine($"{VLatest.ExtendedQueryTagDouble.TableName} {extendedQueryTagTableAlias}");
break;
case ExtendedQueryTagDataType.DateTimeData:
extendedQueryTagTableAlias = ExtendedQueryTagDateTimeTableAlias + tagKey;
_stringBuilder.AppendLine($"{VLatest.ExtendedQueryTagDateTime.TableName} {extendedQueryTagTableAlias}");
break;
case ExtendedQueryTagDataType.PersonNameData:
extendedQueryTagTableAlias = ExtendedQueryTagPersonNameTableAlias + tagKey;
_stringBuilder.AppendLine($"{VLatest.ExtendedQueryTagPersonName.TableName} {extendedQueryTagTableAlias}");
break;
}
_stringBuilder
.Append("ON ")
.Append($"{extendedQueryTagTableAlias}.PartitionKey")
.Append(" = ")
.AppendLine(VLatest.Study.PartitionKey, StudyTableAlias);
_stringBuilder
.Append("AND ")
.Append($"{extendedQueryTagTableAlias}.StudyKey")
.Append(" = ")
.AppendLine(VLatest.Study.StudyKey, StudyTableAlias);
using (IndentedStringBuilder.DelimitedScope delimited = _stringBuilder.BeginDelimitedOnClause())
{
if ((_queryExpression.IsSeriesIELevel() || _queryExpression.IsInstanceIELevel()) && queryTag.Level < QueryTagLevel.Study)
{
_stringBuilder
.Append("AND ")
.Append($"{extendedQueryTagTableAlias}.SeriesKey")
.Append(" = ")
.AppendLine(VLatest.Series.SeriesKey, SeriesTableAlias);
}
if (_queryExpression.IsInstanceIELevel() && queryTag.Level < QueryTagLevel.Series)
{
_stringBuilder
.Append("AND ")
.Append($"{extendedQueryTagTableAlias}.InstanceKey")
.Append(" = ")
.AppendLine(VLatest.Instance.InstanceKey, InstanceTableAlias);
}
}
}
}