@@ -230,10 +230,31 @@ [EnumeratorCancellation] CancellationToken cancellationToken
230230 {
231231 await using var connection = _dbConnectionFactory . CreateReadOnlyConnection ( ) ;
232232 var reader = await connection . Query < ( int QueuedItemId , DateTime QueuedAt , string RedditPostId ) > (
233- @"SELECT queued_item_id, queued_at, reddit_post_id
234- FROM link_queue
235- WHERE processed_at IS NULL
236- ORDER BY queued_at ASC" ) ;
233+ @"WITH Oldest AS (
234+ SELECT queued_item_id, queued_at, reddit_post_id,
235+ ROW_NUMBER() OVER (ORDER BY queued_at ASC) AS rn
236+ FROM link_queue
237+ WHERE processed_at IS NULL
238+ ORDER BY queued_at ASC
239+ ),
240+ Newest AS (
241+ SELECT queued_item_id, queued_at, reddit_post_id,
242+ ROW_NUMBER() OVER (ORDER BY queued_at DESC) AS rn
243+ FROM link_queue
244+ WHERE processed_at IS NULL
245+ ORDER BY queued_at DESC
246+ )
247+ SELECT queued_item_id, queued_at, reddit_post_id
248+ FROM (
249+ SELECT queued_item_id, queued_at, reddit_post_id, rn
250+ FROM Oldest
251+ UNION ALL
252+ SELECT queued_item_id, queued_at, reddit_post_id, rn
253+ FROM Newest
254+ )
255+ ORDER BY rn, CASE WHEN rn % 2 = 1 THEN 1 ELSE 2 END;
256+
257+ " , cancellationToken : cancellationToken ) ;
237258
238259 foreach ( var ( queuedItemId , queuedAt , redditPostId ) in reader )
239260 yield return ( QueuedItemId : queuedItemId , QueuedAt : queuedAt , RedditPostId : redditPostId ) ;
0 commit comments