in src/DurableTask.ServiceBus/Tracking/AzureTableClient.cs [268:347]
string GetSecondaryFilterExpression(OrchestrationStateQueryFilter filter)
{
string query;
if (filter is OrchestrationStateInstanceFilter orchestrationStateInstanceFilter)
{
if (orchestrationStateInstanceFilter.StartsWith)
{
query = string.Format(CultureInfo.InvariantCulture,
AzureTableConstants.InstanceQuerySecondaryFilterRangeTemplate,
orchestrationStateInstanceFilter.InstanceId, ComputeNextKeyInRange(orchestrationStateInstanceFilter.InstanceId));
}
else
{
if (string.IsNullOrWhiteSpace(orchestrationStateInstanceFilter.ExecutionId))
{
query = string.Format(CultureInfo.InvariantCulture,
AzureTableConstants.InstanceQuerySecondaryFilterTemplate, orchestrationStateInstanceFilter.InstanceId);
}
else
{
query = string.Format(CultureInfo.InvariantCulture,
AzureTableConstants.InstanceQuerySecondaryFilterExactTemplate, orchestrationStateInstanceFilter.InstanceId,
orchestrationStateInstanceFilter.ExecutionId);
}
}
}
else if (filter is OrchestrationStateNameVersionFilter orchestrationStateNameVersionFilter)
{
if (orchestrationStateNameVersionFilter.Version == null)
{
query = string.Format(CultureInfo.InvariantCulture,
AzureTableConstants.NameVersionQuerySecondaryFilterTemplate, orchestrationStateNameVersionFilter.Name);
}
else
{
query = string.Format(CultureInfo.InvariantCulture,
AzureTableConstants.NameVersionQuerySecondaryFilterExactTemplate, orchestrationStateNameVersionFilter.Name,
orchestrationStateNameVersionFilter.Version);
}
}
else if (filter is OrchestrationStateStatusFilter orchestrationStateStatusFilter)
{
string template = AzureTableConstants.StatusQuerySecondaryFilterTemplate;
query = string.Format(CultureInfo.InvariantCulture,
template, ComparisonOperatorMap[orchestrationStateStatusFilter.ComparisonType], orchestrationStateStatusFilter.Status);
}
else if (filter is OrchestrationStateTimeRangeFilter orchestrationStateTimeRangeFilter)
{
orchestrationStateTimeRangeFilter.StartTime = ClipStartTime(orchestrationStateTimeRangeFilter.StartTime);
orchestrationStateTimeRangeFilter.EndTime = ClipEndTime(orchestrationStateTimeRangeFilter.EndTime);
string startTime = XmlConvert.ToString(orchestrationStateTimeRangeFilter.StartTime, XmlDateTimeSerializationMode.RoundtripKind);
string endTime = XmlConvert.ToString(orchestrationStateTimeRangeFilter.EndTime, XmlDateTimeSerializationMode.RoundtripKind);
switch (orchestrationStateTimeRangeFilter.FilterType)
{
case OrchestrationStateTimeRangeFilterType.OrchestrationCreatedTimeFilter:
query = string.Format(CultureInfo.InvariantCulture,
AzureTableConstants.CreatedTimeRangeQuerySecondaryFilterTemplate, startTime, endTime);
break;
case OrchestrationStateTimeRangeFilterType.OrchestrationCompletedTimeFilter:
query = string.Format(CultureInfo.InvariantCulture,
AzureTableConstants.CompletedTimeRangeQuerySecondaryFilterTemplate, startTime, endTime);
break;
case OrchestrationStateTimeRangeFilterType.OrchestrationLastUpdatedTimeFilter:
query = string.Format(CultureInfo.InvariantCulture,
AzureTableConstants.LastUpdatedTimeRangeQuerySecondaryFilterTemplate, startTime, endTime);
break;
default:
throw new InvalidOperationException("Unsupported filter type: " + orchestrationStateTimeRangeFilter.FilterType.GetType());
}
}
else
{
throw new InvalidOperationException("Unsupported filter type: " + filter.GetType());
}
return query;
}