public QueueRecord GetQueued(string applicationName, QueueNameFilters queueFilters, DateTime queuedBefore, IDbTransaction transaction)
{
StringBuilder sb = new StringBuilder(
@"SELECT *
FROM [BlueCollarQueue]
WHERE
[ApplicationName] = @ApplicationName
AND [QueuedOn] <= @QueuedBefore");
if (!queueFilters.IncludesAllQueues)
{
if (queueFilters.Include.Count() > 0)
{
sb.Append("\n AND [QueueName] IN @IncludeQueueNames");
}
if (queueFilters.Exclude.Count() > 0)
{
sb.Append("\n AND");
sb.Append("\n (");
sb.Append("\n [QueueName] IS NULL");
sb.Append("\n OR [QueueName] NOT IN @ExcludeQueueNames");
sb.Append("\n )");
}
}
sb.Append("\n");
sb.Append(
@"ORDER BY [QueuedOn] ASC
LIMIT 1;");
return this.connection.Query<QueueRecord>(
sb.ToString(),
new
{
ApplicationName = applicationName,
ExcludeQueueNames = queueFilters.Exclude.ToArray(),
IncludeQueueNames = queueFilters.Include.ToArray(),
QueuedBefore = queuedBefore
},
transaction,
true,
null,
null).FirstOrDefault();
}