delayed 1.2.1 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,969 @@
1
+ snapshots["runs the expected postgresql query for count 1"] = <<-SNAP
2
+ SELECT COUNT(*) AS count_all, CASE WHEN priority >= 0
3
+ AND priority < 10 THEN 0 WHEN priority >= 10
4
+ AND priority < 20 THEN 10 WHEN priority >= 20
5
+ AND priority < 30 THEN 20 WHEN priority >= 30 THEN 30 END AS case_when_priority_0_and_priority_10_then_0_when_priority_10_an, \"delayed_jobs\".\"queue\" AS delayed_jobs_queue
6
+ FROM \"delayed_jobs\"
7
+ WHERE \"delayed_jobs\".\"failed_at\" IS NOT NULL
8
+ GROUP BY CASE WHEN priority >= 0
9
+ AND priority < 10 THEN 0 WHEN priority >= 10
10
+ AND priority < 20 THEN 10 WHEN priority >= 20
11
+ AND priority < 30 THEN 20 WHEN priority >= 30 THEN 30 END, \"delayed_jobs\".\"queue\"
12
+ SELECT COUNT(*) AS count_all, CASE WHEN priority >= 0
13
+ AND priority < 10 THEN 0 WHEN priority >= 10
14
+ AND priority < 20 THEN 10 WHEN priority >= 20
15
+ AND priority < 30 THEN 20 WHEN priority >= 30 THEN 30 END AS case_when_priority_0_and_priority_10_then_0_when_priority_10_an, \"delayed_jobs\".\"queue\" AS delayed_jobs_queue
16
+ FROM \"delayed_jobs\"
17
+ WHERE \"delayed_jobs\".\"failed_at\" IS NULL
18
+ GROUP BY CASE WHEN priority >= 0
19
+ AND priority < 10 THEN 0 WHEN priority >= 10
20
+ AND priority < 20 THEN 10 WHEN priority >= 20
21
+ AND priority < 30 THEN 20 WHEN priority >= 30 THEN 30 END, \"delayed_jobs\".\"queue\"
22
+ SNAP
23
+
24
+ snapshots["produces the expected postgresql query plan for count 1"] = <<-SNAP
25
+ GroupAggregate (cost=...)
26
+ Output: count(*), (CASE WHEN ((priority >= 0) AND (priority < 10)) THEN 0 WHEN ((priority >= 10) AND (priority < 20)) THEN 10 WHEN ((priority >= 20) AND (priority < 30)) THEN 20 WHEN (priority >= 30) THEN 30 ELSE NULL::integer END), queue
27
+ Group Key: (CASE WHEN ((delayed_jobs.priority >= 0) AND (delayed_jobs.priority < 10)) THEN 0 WHEN ((delayed_jobs.priority >= 10) AND (delayed_jobs.priority < 20)) THEN 10 WHEN ((delayed_jobs.priority >= 20) AND (delayed_jobs.priority < 30)) THEN 20 WHEN (delayed_jobs.priority >= 30) THEN 30 ELSE NULL::integer END), delayed_jobs.queue
28
+ -> Sort (cost=...)
29
+ Output: (CASE WHEN ((priority >= 0) AND (priority < 10)) THEN 0 WHEN ((priority >= 10) AND (priority < 20)) THEN 10 WHEN ((priority >= 20) AND (priority < 30)) THEN 20 WHEN (priority >= 30) THEN 30 ELSE NULL::integer END), queue
30
+ Sort Key: (CASE WHEN ((delayed_jobs.priority >= 0) AND (delayed_jobs.priority < 10)) THEN 0 WHEN ((delayed_jobs.priority >= 10) AND (delayed_jobs.priority < 20)) THEN 10 WHEN ((delayed_jobs.priority >= 20) AND (delayed_jobs.priority < 30)) THEN 20 WHEN (delayed_jobs.priority >= 30) THEN 30 ELSE NULL::integer END), delayed_jobs.queue
31
+ -> Index Only Scan using idx_delayed_jobs_failed on public.delayed_jobs (cost=...)
32
+ Output: CASE WHEN ((priority >= 0) AND (priority < 10)) THEN 0 WHEN ((priority >= 10) AND (priority < 20)) THEN 10 WHEN ((priority >= 20) AND (priority < 30)) THEN 20 WHEN (priority >= 30) THEN 30 ELSE NULL::integer END, queue
33
+ GroupAggregate (cost=...)
34
+ Output: count(*), (CASE WHEN ((priority >= 0) AND (priority < 10)) THEN 0 WHEN ((priority >= 10) AND (priority < 20)) THEN 10 WHEN ((priority >= 20) AND (priority < 30)) THEN 20 WHEN (priority >= 30) THEN 30 ELSE NULL::integer END), queue
35
+ Group Key: (CASE WHEN ((delayed_jobs.priority >= 0) AND (delayed_jobs.priority < 10)) THEN 0 WHEN ((delayed_jobs.priority >= 10) AND (delayed_jobs.priority < 20)) THEN 10 WHEN ((delayed_jobs.priority >= 20) AND (delayed_jobs.priority < 30)) THEN 20 WHEN (delayed_jobs.priority >= 30) THEN 30 ELSE NULL::integer END), delayed_jobs.queue
36
+ -> Sort (cost=...)
37
+ Output: (CASE WHEN ((priority >= 0) AND (priority < 10)) THEN 0 WHEN ((priority >= 10) AND (priority < 20)) THEN 10 WHEN ((priority >= 20) AND (priority < 30)) THEN 20 WHEN (priority >= 30) THEN 30 ELSE NULL::integer END), queue
38
+ Sort Key: (CASE WHEN ((delayed_jobs.priority >= 0) AND (delayed_jobs.priority < 10)) THEN 0 WHEN ((delayed_jobs.priority >= 10) AND (delayed_jobs.priority < 20)) THEN 10 WHEN ((delayed_jobs.priority >= 20) AND (delayed_jobs.priority < 30)) THEN 20 WHEN (delayed_jobs.priority >= 30) THEN 30 ELSE NULL::integer END), delayed_jobs.queue
39
+ -> Index Only Scan using idx_delayed_jobs_live on public.delayed_jobs (cost=...)
40
+ Output: CASE WHEN ((priority >= 0) AND (priority < 10)) THEN 0 WHEN ((priority >= 10) AND (priority < 20)) THEN 10 WHEN ((priority >= 20) AND (priority < 30)) THEN 20 WHEN (priority >= 30) THEN 30 ELSE NULL::integer END, queue
41
+ SNAP
42
+
43
+ snapshots["[legacy index] produces the expected postgresql query plan for count 1"] = <<-SNAP
44
+ GroupAggregate (cost=...)
45
+ Output: count(*), (CASE WHEN ((priority >= 0) AND (priority < 10)) THEN 0 WHEN ((priority >= 10) AND (priority < 20)) THEN 10 WHEN ((priority >= 20) AND (priority < 30)) THEN 20 WHEN (priority >= 30) THEN 30 ELSE NULL::integer END), queue
46
+ Group Key: (CASE WHEN ((delayed_jobs.priority >= 0) AND (delayed_jobs.priority < 10)) THEN 0 WHEN ((delayed_jobs.priority >= 10) AND (delayed_jobs.priority < 20)) THEN 10 WHEN ((delayed_jobs.priority >= 20) AND (delayed_jobs.priority < 30)) THEN 20 WHEN (delayed_jobs.priority >= 30) THEN 30 ELSE NULL::integer END), delayed_jobs.queue
47
+ -> Sort (cost=...)
48
+ Output: (CASE WHEN ((priority >= 0) AND (priority < 10)) THEN 0 WHEN ((priority >= 10) AND (priority < 20)) THEN 10 WHEN ((priority >= 20) AND (priority < 30)) THEN 20 WHEN (priority >= 30) THEN 30 ELSE NULL::integer END), queue
49
+ Sort Key: (CASE WHEN ((delayed_jobs.priority >= 0) AND (delayed_jobs.priority < 10)) THEN 0 WHEN ((delayed_jobs.priority >= 10) AND (delayed_jobs.priority < 20)) THEN 10 WHEN ((delayed_jobs.priority >= 20) AND (delayed_jobs.priority < 30)) THEN 20 WHEN (delayed_jobs.priority >= 30) THEN 30 ELSE NULL::integer END), delayed_jobs.queue
50
+ -> Seq Scan on public.delayed_jobs (cost=...)
51
+ Output: CASE WHEN ((priority >= 0) AND (priority < 10)) THEN 0 WHEN ((priority >= 10) AND (priority < 20)) THEN 10 WHEN ((priority >= 20) AND (priority < 30)) THEN 20 WHEN (priority >= 30) THEN 30 ELSE NULL::integer END, queue
52
+ Filter: (delayed_jobs.failed_at IS NOT NULL)
53
+ GroupAggregate (cost=...)
54
+ Output: count(*), (CASE WHEN ((priority >= 0) AND (priority < 10)) THEN 0 WHEN ((priority >= 10) AND (priority < 20)) THEN 10 WHEN ((priority >= 20) AND (priority < 30)) THEN 20 WHEN (priority >= 30) THEN 30 ELSE NULL::integer END), queue
55
+ Group Key: (CASE WHEN ((delayed_jobs.priority >= 0) AND (delayed_jobs.priority < 10)) THEN 0 WHEN ((delayed_jobs.priority >= 10) AND (delayed_jobs.priority < 20)) THEN 10 WHEN ((delayed_jobs.priority >= 20) AND (delayed_jobs.priority < 30)) THEN 20 WHEN (delayed_jobs.priority >= 30) THEN 30 ELSE NULL::integer END), delayed_jobs.queue
56
+ -> Sort (cost=...)
57
+ Output: (CASE WHEN ((priority >= 0) AND (priority < 10)) THEN 0 WHEN ((priority >= 10) AND (priority < 20)) THEN 10 WHEN ((priority >= 20) AND (priority < 30)) THEN 20 WHEN (priority >= 30) THEN 30 ELSE NULL::integer END), queue
58
+ Sort Key: (CASE WHEN ((delayed_jobs.priority >= 0) AND (delayed_jobs.priority < 10)) THEN 0 WHEN ((delayed_jobs.priority >= 10) AND (delayed_jobs.priority < 20)) THEN 10 WHEN ((delayed_jobs.priority >= 20) AND (delayed_jobs.priority < 30)) THEN 20 WHEN (delayed_jobs.priority >= 30) THEN 30 ELSE NULL::integer END), delayed_jobs.queue
59
+ -> Seq Scan on public.delayed_jobs (cost=...)
60
+ Output: CASE WHEN ((priority >= 0) AND (priority < 10)) THEN 0 WHEN ((priority >= 10) AND (priority < 20)) THEN 10 WHEN ((priority >= 20) AND (priority < 30)) THEN 20 WHEN (priority >= 30) THEN 30 ELSE NULL::integer END, queue
61
+ Filter: (delayed_jobs.failed_at IS NULL)
62
+ SNAP
63
+
64
+ snapshots["runs the expected postgresql query for future_count 1"] = <<-SNAP
65
+ SELECT COUNT(*) AS count_all, CASE WHEN priority >= 0
66
+ AND priority < 10 THEN 0 WHEN priority >= 10
67
+ AND priority < 20 THEN 10 WHEN priority >= 20
68
+ AND priority < 30 THEN 20 WHEN priority >= 30 THEN 30 END AS case_when_priority_0_and_priority_10_then_0_when_priority_10_an, \"delayed_jobs\".\"queue\" AS delayed_jobs_queue
69
+ FROM \"delayed_jobs\"
70
+ WHERE \"delayed_jobs\".\"failed_at\" IS NULL
71
+ AND \"delayed_jobs\".\"run_at\" > '2025-11-10 17:20:13'
72
+ GROUP BY CASE WHEN priority >= 0
73
+ AND priority < 10 THEN 0 WHEN priority >= 10
74
+ AND priority < 20 THEN 10 WHEN priority >= 20
75
+ AND priority < 30 THEN 20 WHEN priority >= 30 THEN 30 END, \"delayed_jobs\".\"queue\"
76
+ SNAP
77
+
78
+ snapshots["produces the expected postgresql query plan for future_count 1"] = <<-SNAP
79
+ GroupAggregate (cost=...)
80
+ Output: count(*), (CASE WHEN ((priority >= 0) AND (priority < 10)) THEN 0 WHEN ((priority >= 10) AND (priority < 20)) THEN 10 WHEN ((priority >= 20) AND (priority < 30)) THEN 20 WHEN (priority >= 30) THEN 30 ELSE NULL::integer END), queue
81
+ Group Key: (CASE WHEN ((delayed_jobs.priority >= 0) AND (delayed_jobs.priority < 10)) THEN 0 WHEN ((delayed_jobs.priority >= 10) AND (delayed_jobs.priority < 20)) THEN 10 WHEN ((delayed_jobs.priority >= 20) AND (delayed_jobs.priority < 30)) THEN 20 WHEN (delayed_jobs.priority >= 30) THEN 30 ELSE NULL::integer END), delayed_jobs.queue
82
+ -> Sort (cost=...)
83
+ Output: (CASE WHEN ((priority >= 0) AND (priority < 10)) THEN 0 WHEN ((priority >= 10) AND (priority < 20)) THEN 10 WHEN ((priority >= 20) AND (priority < 30)) THEN 20 WHEN (priority >= 30) THEN 30 ELSE NULL::integer END), queue
84
+ Sort Key: (CASE WHEN ((delayed_jobs.priority >= 0) AND (delayed_jobs.priority < 10)) THEN 0 WHEN ((delayed_jobs.priority >= 10) AND (delayed_jobs.priority < 20)) THEN 10 WHEN ((delayed_jobs.priority >= 20) AND (delayed_jobs.priority < 30)) THEN 20 WHEN (delayed_jobs.priority >= 30) THEN 30 ELSE NULL::integer END), delayed_jobs.queue
85
+ -> Index Only Scan using idx_delayed_jobs_live on public.delayed_jobs (cost=...)
86
+ Output: CASE WHEN ((priority >= 0) AND (priority < 10)) THEN 0 WHEN ((priority >= 10) AND (priority < 20)) THEN 10 WHEN ((priority >= 20) AND (priority < 30)) THEN 20 WHEN (priority >= 30) THEN 30 ELSE NULL::integer END, queue
87
+ Index Cond: (delayed_jobs.run_at > '2025-11-10 17:20:13'::timestamp without time zone)
88
+ SNAP
89
+
90
+ snapshots["[legacy index] produces the expected postgresql query plan for future_count 1"] = <<-SNAP
91
+ GroupAggregate (cost=...)
92
+ Output: count(*), (CASE WHEN ((priority >= 0) AND (priority < 10)) THEN 0 WHEN ((priority >= 10) AND (priority < 20)) THEN 10 WHEN ((priority >= 20) AND (priority < 30)) THEN 20 WHEN (priority >= 30) THEN 30 ELSE NULL::integer END), queue
93
+ Group Key: (CASE WHEN ((delayed_jobs.priority >= 0) AND (delayed_jobs.priority < 10)) THEN 0 WHEN ((delayed_jobs.priority >= 10) AND (delayed_jobs.priority < 20)) THEN 10 WHEN ((delayed_jobs.priority >= 20) AND (delayed_jobs.priority < 30)) THEN 20 WHEN (delayed_jobs.priority >= 30) THEN 30 ELSE NULL::integer END), delayed_jobs.queue
94
+ -> Sort (cost=...)
95
+ Output: (CASE WHEN ((priority >= 0) AND (priority < 10)) THEN 0 WHEN ((priority >= 10) AND (priority < 20)) THEN 10 WHEN ((priority >= 20) AND (priority < 30)) THEN 20 WHEN (priority >= 30) THEN 30 ELSE NULL::integer END), queue
96
+ Sort Key: (CASE WHEN ((delayed_jobs.priority >= 0) AND (delayed_jobs.priority < 10)) THEN 0 WHEN ((delayed_jobs.priority >= 10) AND (delayed_jobs.priority < 20)) THEN 10 WHEN ((delayed_jobs.priority >= 20) AND (delayed_jobs.priority < 30)) THEN 20 WHEN (delayed_jobs.priority >= 30) THEN 30 ELSE NULL::integer END), delayed_jobs.queue
97
+ -> Index Scan using delayed_jobs_priority on public.delayed_jobs (cost=...)
98
+ Output: CASE WHEN ((priority >= 0) AND (priority < 10)) THEN 0 WHEN ((priority >= 10) AND (priority < 20)) THEN 10 WHEN ((priority >= 20) AND (priority < 30)) THEN 20 WHEN (priority >= 30) THEN 30 ELSE NULL::integer END, queue
99
+ Index Cond: (delayed_jobs.run_at > '2025-11-10 17:20:13'::timestamp without time zone)
100
+ Filter: (delayed_jobs.failed_at IS NULL)
101
+ SNAP
102
+
103
+ snapshots["runs the expected postgresql query for locked_count 1"] = <<-SNAP
104
+ SELECT COUNT(*) AS count_all, CASE WHEN priority >= 0
105
+ AND priority < 10 THEN 0 WHEN priority >= 10
106
+ AND priority < 20 THEN 10 WHEN priority >= 20
107
+ AND priority < 30 THEN 20 WHEN priority >= 30 THEN 30 END AS case_when_priority_0_and_priority_10_then_0_when_priority_10_an, \"delayed_jobs\".\"queue\" AS delayed_jobs_queue
108
+ FROM \"delayed_jobs\"
109
+ WHERE \"delayed_jobs\".\"locked_at\" >= '2025-11-10 16:59:43'
110
+ AND \"delayed_jobs\".\"failed_at\" IS NULL
111
+ AND \"delayed_jobs\".\"run_at\" <= '2025-11-10 17:20:13'
112
+ GROUP BY CASE WHEN priority >= 0
113
+ AND priority < 10 THEN 0 WHEN priority >= 10
114
+ AND priority < 20 THEN 10 WHEN priority >= 20
115
+ AND priority < 30 THEN 20 WHEN priority >= 30 THEN 30 END, \"delayed_jobs\".\"queue\"
116
+ SNAP
117
+
118
+ snapshots["produces the expected postgresql query plan for locked_count 1"] = <<-SNAP
119
+ GroupAggregate (cost=...)
120
+ Output: count(*), (CASE WHEN ((priority >= 0) AND (priority < 10)) THEN 0 WHEN ((priority >= 10) AND (priority < 20)) THEN 10 WHEN ((priority >= 20) AND (priority < 30)) THEN 20 WHEN (priority >= 30) THEN 30 ELSE NULL::integer END), queue
121
+ Group Key: (CASE WHEN ((delayed_jobs.priority >= 0) AND (delayed_jobs.priority < 10)) THEN 0 WHEN ((delayed_jobs.priority >= 10) AND (delayed_jobs.priority < 20)) THEN 10 WHEN ((delayed_jobs.priority >= 20) AND (delayed_jobs.priority < 30)) THEN 20 WHEN (delayed_jobs.priority >= 30) THEN 30 ELSE NULL::integer END), delayed_jobs.queue
122
+ -> Sort (cost=...)
123
+ Output: (CASE WHEN ((priority >= 0) AND (priority < 10)) THEN 0 WHEN ((priority >= 10) AND (priority < 20)) THEN 10 WHEN ((priority >= 20) AND (priority < 30)) THEN 20 WHEN (priority >= 30) THEN 30 ELSE NULL::integer END), queue
124
+ Sort Key: (CASE WHEN ((delayed_jobs.priority >= 0) AND (delayed_jobs.priority < 10)) THEN 0 WHEN ((delayed_jobs.priority >= 10) AND (delayed_jobs.priority < 20)) THEN 10 WHEN ((delayed_jobs.priority >= 20) AND (delayed_jobs.priority < 30)) THEN 20 WHEN (delayed_jobs.priority >= 30) THEN 30 ELSE NULL::integer END), delayed_jobs.queue
125
+ -> Index Scan using idx_delayed_jobs_live on public.delayed_jobs (cost=...)
126
+ Output: CASE WHEN ((priority >= 0) AND (priority < 10)) THEN 0 WHEN ((priority >= 10) AND (priority < 20)) THEN 10 WHEN ((priority >= 20) AND (priority < 30)) THEN 20 WHEN (priority >= 30) THEN 30 ELSE NULL::integer END, queue
127
+ Index Cond: (delayed_jobs.run_at <= '2025-11-10 17:20:13'::timestamp without time zone)
128
+ Filter: (delayed_jobs.locked_at >= '2025-11-10 16:59:43'::timestamp without time zone)
129
+ SNAP
130
+
131
+ snapshots["[legacy index] produces the expected postgresql query plan for locked_count 1"] = <<-SNAP
132
+ GroupAggregate (cost=...)
133
+ Output: count(*), (CASE WHEN ((priority >= 0) AND (priority < 10)) THEN 0 WHEN ((priority >= 10) AND (priority < 20)) THEN 10 WHEN ((priority >= 20) AND (priority < 30)) THEN 20 WHEN (priority >= 30) THEN 30 ELSE NULL::integer END), queue
134
+ Group Key: (CASE WHEN ((delayed_jobs.priority >= 0) AND (delayed_jobs.priority < 10)) THEN 0 WHEN ((delayed_jobs.priority >= 10) AND (delayed_jobs.priority < 20)) THEN 10 WHEN ((delayed_jobs.priority >= 20) AND (delayed_jobs.priority < 30)) THEN 20 WHEN (delayed_jobs.priority >= 30) THEN 30 ELSE NULL::integer END), delayed_jobs.queue
135
+ -> Sort (cost=...)
136
+ Output: (CASE WHEN ((priority >= 0) AND (priority < 10)) THEN 0 WHEN ((priority >= 10) AND (priority < 20)) THEN 10 WHEN ((priority >= 20) AND (priority < 30)) THEN 20 WHEN (priority >= 30) THEN 30 ELSE NULL::integer END), queue
137
+ Sort Key: (CASE WHEN ((delayed_jobs.priority >= 0) AND (delayed_jobs.priority < 10)) THEN 0 WHEN ((delayed_jobs.priority >= 10) AND (delayed_jobs.priority < 20)) THEN 10 WHEN ((delayed_jobs.priority >= 20) AND (delayed_jobs.priority < 30)) THEN 20 WHEN (delayed_jobs.priority >= 30) THEN 30 ELSE NULL::integer END), delayed_jobs.queue
138
+ -> Index Scan using delayed_jobs_priority on public.delayed_jobs (cost=...)
139
+ Output: CASE WHEN ((priority >= 0) AND (priority < 10)) THEN 0 WHEN ((priority >= 10) AND (priority < 20)) THEN 10 WHEN ((priority >= 20) AND (priority < 30)) THEN 20 WHEN (priority >= 30) THEN 30 ELSE NULL::integer END, queue
140
+ Index Cond: (delayed_jobs.run_at <= '2025-11-10 17:20:13'::timestamp without time zone)
141
+ Filter: ((delayed_jobs.failed_at IS NULL) AND (delayed_jobs.locked_at >= '2025-11-10 16:59:43'::timestamp without time zone))
142
+ SNAP
143
+
144
+ snapshots["runs the expected postgresql query for erroring_count 1"] = <<-SNAP
145
+ SELECT COUNT(*) AS count_all, CASE WHEN priority >= 0
146
+ AND priority < 10 THEN 0 WHEN priority >= 10
147
+ AND priority < 20 THEN 10 WHEN priority >= 20
148
+ AND priority < 30 THEN 20 WHEN priority >= 30 THEN 30 END AS case_when_priority_0_and_priority_10_then_0_when_priority_10_an, \"delayed_jobs\".\"queue\" AS delayed_jobs_queue
149
+ FROM \"delayed_jobs\"
150
+ WHERE \"delayed_jobs\".\"attempts\" > 0
151
+ AND \"delayed_jobs\".\"failed_at\" IS NULL
152
+ GROUP BY CASE WHEN priority >= 0
153
+ AND priority < 10 THEN 0 WHEN priority >= 10
154
+ AND priority < 20 THEN 10 WHEN priority >= 20
155
+ AND priority < 30 THEN 20 WHEN priority >= 30 THEN 30 END, \"delayed_jobs\".\"queue\"
156
+ SNAP
157
+
158
+ snapshots["produces the expected postgresql query plan for erroring_count 1"] = <<-SNAP
159
+ GroupAggregate (cost=...)
160
+ Output: count(*), (CASE WHEN ((priority >= 0) AND (priority < 10)) THEN 0 WHEN ((priority >= 10) AND (priority < 20)) THEN 10 WHEN ((priority >= 20) AND (priority < 30)) THEN 20 WHEN (priority >= 30) THEN 30 ELSE NULL::integer END), queue
161
+ Group Key: (CASE WHEN ((delayed_jobs.priority >= 0) AND (delayed_jobs.priority < 10)) THEN 0 WHEN ((delayed_jobs.priority >= 10) AND (delayed_jobs.priority < 20)) THEN 10 WHEN ((delayed_jobs.priority >= 20) AND (delayed_jobs.priority < 30)) THEN 20 WHEN (delayed_jobs.priority >= 30) THEN 30 ELSE NULL::integer END), delayed_jobs.queue
162
+ -> Sort (cost=...)
163
+ Output: (CASE WHEN ((priority >= 0) AND (priority < 10)) THEN 0 WHEN ((priority >= 10) AND (priority < 20)) THEN 10 WHEN ((priority >= 20) AND (priority < 30)) THEN 20 WHEN (priority >= 30) THEN 30 ELSE NULL::integer END), queue
164
+ Sort Key: (CASE WHEN ((delayed_jobs.priority >= 0) AND (delayed_jobs.priority < 10)) THEN 0 WHEN ((delayed_jobs.priority >= 10) AND (delayed_jobs.priority < 20)) THEN 10 WHEN ((delayed_jobs.priority >= 20) AND (delayed_jobs.priority < 30)) THEN 20 WHEN (delayed_jobs.priority >= 30) THEN 30 ELSE NULL::integer END), delayed_jobs.queue
165
+ -> Index Only Scan using idx_delayed_jobs_live on public.delayed_jobs (cost=...)
166
+ Output: CASE WHEN ((priority >= 0) AND (priority < 10)) THEN 0 WHEN ((priority >= 10) AND (priority < 20)) THEN 10 WHEN ((priority >= 20) AND (priority < 30)) THEN 20 WHEN (priority >= 30) THEN 30 ELSE NULL::integer END, queue
167
+ Index Cond: (delayed_jobs.attempts > 0)
168
+ SNAP
169
+
170
+ snapshots["[legacy index] produces the expected postgresql query plan for erroring_count 1"] = <<-SNAP
171
+ GroupAggregate (cost=...)
172
+ Output: count(*), (CASE WHEN ((priority >= 0) AND (priority < 10)) THEN 0 WHEN ((priority >= 10) AND (priority < 20)) THEN 10 WHEN ((priority >= 20) AND (priority < 30)) THEN 20 WHEN (priority >= 30) THEN 30 ELSE NULL::integer END), queue
173
+ Group Key: (CASE WHEN ((delayed_jobs.priority >= 0) AND (delayed_jobs.priority < 10)) THEN 0 WHEN ((delayed_jobs.priority >= 10) AND (delayed_jobs.priority < 20)) THEN 10 WHEN ((delayed_jobs.priority >= 20) AND (delayed_jobs.priority < 30)) THEN 20 WHEN (delayed_jobs.priority >= 30) THEN 30 ELSE NULL::integer END), delayed_jobs.queue
174
+ -> Sort (cost=...)
175
+ Output: (CASE WHEN ((priority >= 0) AND (priority < 10)) THEN 0 WHEN ((priority >= 10) AND (priority < 20)) THEN 10 WHEN ((priority >= 20) AND (priority < 30)) THEN 20 WHEN (priority >= 30) THEN 30 ELSE NULL::integer END), queue
176
+ Sort Key: (CASE WHEN ((delayed_jobs.priority >= 0) AND (delayed_jobs.priority < 10)) THEN 0 WHEN ((delayed_jobs.priority >= 10) AND (delayed_jobs.priority < 20)) THEN 10 WHEN ((delayed_jobs.priority >= 20) AND (delayed_jobs.priority < 30)) THEN 20 WHEN (delayed_jobs.priority >= 30) THEN 30 ELSE NULL::integer END), delayed_jobs.queue
177
+ -> Seq Scan on public.delayed_jobs (cost=...)
178
+ Output: CASE WHEN ((priority >= 0) AND (priority < 10)) THEN 0 WHEN ((priority >= 10) AND (priority < 20)) THEN 10 WHEN ((priority >= 20) AND (priority < 30)) THEN 20 WHEN (priority >= 30) THEN 30 ELSE NULL::integer END, queue
179
+ Filter: ((delayed_jobs.failed_at IS NULL) AND (delayed_jobs.attempts > 0))
180
+ SNAP
181
+
182
+ snapshots["runs the expected postgresql query for failed_count 1"] = <<-SNAP
183
+ SELECT COUNT(*) AS count_all, CASE WHEN priority >= 0
184
+ AND priority < 10 THEN 0 WHEN priority >= 10
185
+ AND priority < 20 THEN 10 WHEN priority >= 20
186
+ AND priority < 30 THEN 20 WHEN priority >= 30 THEN 30 END AS case_when_priority_0_and_priority_10_then_0_when_priority_10_an, \"delayed_jobs\".\"queue\" AS delayed_jobs_queue
187
+ FROM \"delayed_jobs\"
188
+ WHERE \"delayed_jobs\".\"failed_at\" IS NOT NULL
189
+ GROUP BY CASE WHEN priority >= 0
190
+ AND priority < 10 THEN 0 WHEN priority >= 10
191
+ AND priority < 20 THEN 10 WHEN priority >= 20
192
+ AND priority < 30 THEN 20 WHEN priority >= 30 THEN 30 END, \"delayed_jobs\".\"queue\"
193
+ SNAP
194
+
195
+ snapshots["produces the expected postgresql query plan for failed_count 1"] = <<-SNAP
196
+ GroupAggregate (cost=...)
197
+ Output: count(*), (CASE WHEN ((priority >= 0) AND (priority < 10)) THEN 0 WHEN ((priority >= 10) AND (priority < 20)) THEN 10 WHEN ((priority >= 20) AND (priority < 30)) THEN 20 WHEN (priority >= 30) THEN 30 ELSE NULL::integer END), queue
198
+ Group Key: (CASE WHEN ((delayed_jobs.priority >= 0) AND (delayed_jobs.priority < 10)) THEN 0 WHEN ((delayed_jobs.priority >= 10) AND (delayed_jobs.priority < 20)) THEN 10 WHEN ((delayed_jobs.priority >= 20) AND (delayed_jobs.priority < 30)) THEN 20 WHEN (delayed_jobs.priority >= 30) THEN 30 ELSE NULL::integer END), delayed_jobs.queue
199
+ -> Sort (cost=...)
200
+ Output: (CASE WHEN ((priority >= 0) AND (priority < 10)) THEN 0 WHEN ((priority >= 10) AND (priority < 20)) THEN 10 WHEN ((priority >= 20) AND (priority < 30)) THEN 20 WHEN (priority >= 30) THEN 30 ELSE NULL::integer END), queue
201
+ Sort Key: (CASE WHEN ((delayed_jobs.priority >= 0) AND (delayed_jobs.priority < 10)) THEN 0 WHEN ((delayed_jobs.priority >= 10) AND (delayed_jobs.priority < 20)) THEN 10 WHEN ((delayed_jobs.priority >= 20) AND (delayed_jobs.priority < 30)) THEN 20 WHEN (delayed_jobs.priority >= 30) THEN 30 ELSE NULL::integer END), delayed_jobs.queue
202
+ -> Index Only Scan using idx_delayed_jobs_failed on public.delayed_jobs (cost=...)
203
+ Output: CASE WHEN ((priority >= 0) AND (priority < 10)) THEN 0 WHEN ((priority >= 10) AND (priority < 20)) THEN 10 WHEN ((priority >= 20) AND (priority < 30)) THEN 20 WHEN (priority >= 30) THEN 30 ELSE NULL::integer END, queue
204
+ SNAP
205
+
206
+ snapshots["[legacy index] produces the expected postgresql query plan for failed_count 1"] = <<-SNAP
207
+ GroupAggregate (cost=...)
208
+ Output: count(*), (CASE WHEN ((priority >= 0) AND (priority < 10)) THEN 0 WHEN ((priority >= 10) AND (priority < 20)) THEN 10 WHEN ((priority >= 20) AND (priority < 30)) THEN 20 WHEN (priority >= 30) THEN 30 ELSE NULL::integer END), queue
209
+ Group Key: (CASE WHEN ((delayed_jobs.priority >= 0) AND (delayed_jobs.priority < 10)) THEN 0 WHEN ((delayed_jobs.priority >= 10) AND (delayed_jobs.priority < 20)) THEN 10 WHEN ((delayed_jobs.priority >= 20) AND (delayed_jobs.priority < 30)) THEN 20 WHEN (delayed_jobs.priority >= 30) THEN 30 ELSE NULL::integer END), delayed_jobs.queue
210
+ -> Sort (cost=...)
211
+ Output: (CASE WHEN ((priority >= 0) AND (priority < 10)) THEN 0 WHEN ((priority >= 10) AND (priority < 20)) THEN 10 WHEN ((priority >= 20) AND (priority < 30)) THEN 20 WHEN (priority >= 30) THEN 30 ELSE NULL::integer END), queue
212
+ Sort Key: (CASE WHEN ((delayed_jobs.priority >= 0) AND (delayed_jobs.priority < 10)) THEN 0 WHEN ((delayed_jobs.priority >= 10) AND (delayed_jobs.priority < 20)) THEN 10 WHEN ((delayed_jobs.priority >= 20) AND (delayed_jobs.priority < 30)) THEN 20 WHEN (delayed_jobs.priority >= 30) THEN 30 ELSE NULL::integer END), delayed_jobs.queue
213
+ -> Seq Scan on public.delayed_jobs (cost=...)
214
+ Output: CASE WHEN ((priority >= 0) AND (priority < 10)) THEN 0 WHEN ((priority >= 10) AND (priority < 20)) THEN 10 WHEN ((priority >= 20) AND (priority < 30)) THEN 20 WHEN (priority >= 30) THEN 30 ELSE NULL::integer END, queue
215
+ Filter: (delayed_jobs.failed_at IS NOT NULL)
216
+ SNAP
217
+
218
+ snapshots["runs the expected postgresql query for max_lock_age 1"] = <<-SNAP
219
+ SELECT CASE WHEN priority >= 0
220
+ AND priority < 10 THEN 0 WHEN priority >= 10
221
+ AND priority < 20 THEN 10 WHEN priority >= 20
222
+ AND priority < 30 THEN 20 WHEN priority >= 30 THEN 30 END AS priority, queue, MIN(locked_at) AS locked_at
223
+ FROM \"delayed_jobs\"
224
+ WHERE \"delayed_jobs\".\"locked_at\" >= '2025-11-10 16:59:43'
225
+ AND \"delayed_jobs\".\"failed_at\" IS NULL
226
+ AND \"delayed_jobs\".\"run_at\" <= '2025-11-10 17:20:13'
227
+ GROUP BY CASE WHEN priority >= 0
228
+ AND priority < 10 THEN 0 WHEN priority >= 10
229
+ AND priority < 20 THEN 10 WHEN priority >= 20
230
+ AND priority < 30 THEN 20 WHEN priority >= 30 THEN 30 END, \"delayed_jobs\".\"queue\"
231
+ SNAP
232
+
233
+ snapshots["produces the expected postgresql query plan for max_lock_age 1"] = <<-SNAP
234
+ GroupAggregate (cost=...)
235
+ Output: (CASE WHEN ((priority >= 0) AND (priority < 10)) THEN 0 WHEN ((priority >= 10) AND (priority < 20)) THEN 10 WHEN ((priority >= 20) AND (priority < 30)) THEN 20 WHEN (priority >= 30) THEN 30 ELSE NULL::integer END), queue, min(locked_at)
236
+ Group Key: (CASE WHEN ((delayed_jobs.priority >= 0) AND (delayed_jobs.priority < 10)) THEN 0 WHEN ((delayed_jobs.priority >= 10) AND (delayed_jobs.priority < 20)) THEN 10 WHEN ((delayed_jobs.priority >= 20) AND (delayed_jobs.priority < 30)) THEN 20 WHEN (delayed_jobs.priority >= 30) THEN 30 ELSE NULL::integer END), delayed_jobs.queue
237
+ -> Sort (cost=...)
238
+ Output: (CASE WHEN ((priority >= 0) AND (priority < 10)) THEN 0 WHEN ((priority >= 10) AND (priority < 20)) THEN 10 WHEN ((priority >= 20) AND (priority < 30)) THEN 20 WHEN (priority >= 30) THEN 30 ELSE NULL::integer END), queue, locked_at
239
+ Sort Key: (CASE WHEN ((delayed_jobs.priority >= 0) AND (delayed_jobs.priority < 10)) THEN 0 WHEN ((delayed_jobs.priority >= 10) AND (delayed_jobs.priority < 20)) THEN 10 WHEN ((delayed_jobs.priority >= 20) AND (delayed_jobs.priority < 30)) THEN 20 WHEN (delayed_jobs.priority >= 30) THEN 30 ELSE NULL::integer END), delayed_jobs.queue
240
+ -> Index Scan using idx_delayed_jobs_live on public.delayed_jobs (cost=...)
241
+ Output: CASE WHEN ((priority >= 0) AND (priority < 10)) THEN 0 WHEN ((priority >= 10) AND (priority < 20)) THEN 10 WHEN ((priority >= 20) AND (priority < 30)) THEN 20 WHEN (priority >= 30) THEN 30 ELSE NULL::integer END, queue, locked_at
242
+ Index Cond: (delayed_jobs.run_at <= '2025-11-10 17:20:13'::timestamp without time zone)
243
+ Filter: (delayed_jobs.locked_at >= '2025-11-10 16:59:43'::timestamp without time zone)
244
+ SNAP
245
+
246
+ snapshots["[legacy index] produces the expected postgresql query plan for max_lock_age 1"] = <<-SNAP
247
+ GroupAggregate (cost=...)
248
+ Output: (CASE WHEN ((priority >= 0) AND (priority < 10)) THEN 0 WHEN ((priority >= 10) AND (priority < 20)) THEN 10 WHEN ((priority >= 20) AND (priority < 30)) THEN 20 WHEN (priority >= 30) THEN 30 ELSE NULL::integer END), queue, min(locked_at)
249
+ Group Key: (CASE WHEN ((delayed_jobs.priority >= 0) AND (delayed_jobs.priority < 10)) THEN 0 WHEN ((delayed_jobs.priority >= 10) AND (delayed_jobs.priority < 20)) THEN 10 WHEN ((delayed_jobs.priority >= 20) AND (delayed_jobs.priority < 30)) THEN 20 WHEN (delayed_jobs.priority >= 30) THEN 30 ELSE NULL::integer END), delayed_jobs.queue
250
+ -> Sort (cost=...)
251
+ Output: (CASE WHEN ((priority >= 0) AND (priority < 10)) THEN 0 WHEN ((priority >= 10) AND (priority < 20)) THEN 10 WHEN ((priority >= 20) AND (priority < 30)) THEN 20 WHEN (priority >= 30) THEN 30 ELSE NULL::integer END), queue, locked_at
252
+ Sort Key: (CASE WHEN ((delayed_jobs.priority >= 0) AND (delayed_jobs.priority < 10)) THEN 0 WHEN ((delayed_jobs.priority >= 10) AND (delayed_jobs.priority < 20)) THEN 10 WHEN ((delayed_jobs.priority >= 20) AND (delayed_jobs.priority < 30)) THEN 20 WHEN (delayed_jobs.priority >= 30) THEN 30 ELSE NULL::integer END), delayed_jobs.queue
253
+ -> Index Scan using delayed_jobs_priority on public.delayed_jobs (cost=...)
254
+ Output: CASE WHEN ((priority >= 0) AND (priority < 10)) THEN 0 WHEN ((priority >= 10) AND (priority < 20)) THEN 10 WHEN ((priority >= 20) AND (priority < 30)) THEN 20 WHEN (priority >= 30) THEN 30 ELSE NULL::integer END, queue, locked_at
255
+ Index Cond: (delayed_jobs.run_at <= '2025-11-10 17:20:13'::timestamp without time zone)
256
+ Filter: ((delayed_jobs.failed_at IS NULL) AND (delayed_jobs.locked_at >= '2025-11-10 16:59:43'::timestamp without time zone))
257
+ SNAP
258
+
259
+ snapshots["runs the expected postgresql query for max_age 1"] = <<-SNAP
260
+ SELECT (CASE WHEN priority >= 0
261
+ AND priority < 10 THEN 0 WHEN priority >= 10
262
+ AND priority < 20 THEN 10 WHEN priority >= 20
263
+ AND priority < 30 THEN 20 WHEN priority >= 30 THEN 30 END) AS priority, queue, MIN(run_at) AS run_at
264
+ FROM \"delayed_jobs\"
265
+ WHERE (\"delayed_jobs\".\"locked_at\" IS NULL
266
+ OR \"delayed_jobs\".\"locked_at\" < '2025-11-10 16:59:43')
267
+ AND \"delayed_jobs\".\"failed_at\" IS NULL
268
+ AND \"delayed_jobs\".\"run_at\" <= '2025-11-10 17:20:13'
269
+ GROUP BY CASE WHEN priority >= 0
270
+ AND priority < 10 THEN 0 WHEN priority >= 10
271
+ AND priority < 20 THEN 10 WHEN priority >= 20
272
+ AND priority < 30 THEN 20 WHEN priority >= 30 THEN 30 END, \"delayed_jobs\".\"queue\"
273
+ SNAP
274
+
275
+ snapshots["produces the expected postgresql query plan for max_age 1"] = <<-SNAP
276
+ GroupAggregate (cost=...)
277
+ Output: (CASE WHEN ((priority >= 0) AND (priority < 10)) THEN 0 WHEN ((priority >= 10) AND (priority < 20)) THEN 10 WHEN ((priority >= 20) AND (priority < 30)) THEN 20 WHEN (priority >= 30) THEN 30 ELSE NULL::integer END), queue, min(run_at)
278
+ Group Key: (CASE WHEN ((delayed_jobs.priority >= 0) AND (delayed_jobs.priority < 10)) THEN 0 WHEN ((delayed_jobs.priority >= 10) AND (delayed_jobs.priority < 20)) THEN 10 WHEN ((delayed_jobs.priority >= 20) AND (delayed_jobs.priority < 30)) THEN 20 WHEN (delayed_jobs.priority >= 30) THEN 30 ELSE NULL::integer END), delayed_jobs.queue
279
+ -> Sort (cost=...)
280
+ Output: (CASE WHEN ((priority >= 0) AND (priority < 10)) THEN 0 WHEN ((priority >= 10) AND (priority < 20)) THEN 10 WHEN ((priority >= 20) AND (priority < 30)) THEN 20 WHEN (priority >= 30) THEN 30 ELSE NULL::integer END), queue, run_at
281
+ Sort Key: (CASE WHEN ((delayed_jobs.priority >= 0) AND (delayed_jobs.priority < 10)) THEN 0 WHEN ((delayed_jobs.priority >= 10) AND (delayed_jobs.priority < 20)) THEN 10 WHEN ((delayed_jobs.priority >= 20) AND (delayed_jobs.priority < 30)) THEN 20 WHEN (delayed_jobs.priority >= 30) THEN 30 ELSE NULL::integer END), delayed_jobs.queue
282
+ -> Index Scan using idx_delayed_jobs_live on public.delayed_jobs (cost=...)
283
+ Output: CASE WHEN ((priority >= 0) AND (priority < 10)) THEN 0 WHEN ((priority >= 10) AND (priority < 20)) THEN 10 WHEN ((priority >= 20) AND (priority < 30)) THEN 20 WHEN (priority >= 30) THEN 30 ELSE NULL::integer END, queue, run_at
284
+ Index Cond: (delayed_jobs.run_at <= '2025-11-10 17:20:13'::timestamp without time zone)
285
+ Filter: ((delayed_jobs.locked_at IS NULL) OR (delayed_jobs.locked_at < '2025-11-10 16:59:43'::timestamp without time zone))
286
+ SNAP
287
+
288
+ snapshots["[legacy index] produces the expected postgresql query plan for max_age 1"] = <<-SNAP
289
+ GroupAggregate (cost=...)
290
+ Output: (CASE WHEN ((priority >= 0) AND (priority < 10)) THEN 0 WHEN ((priority >= 10) AND (priority < 20)) THEN 10 WHEN ((priority >= 20) AND (priority < 30)) THEN 20 WHEN (priority >= 30) THEN 30 ELSE NULL::integer END), queue, min(run_at)
291
+ Group Key: (CASE WHEN ((delayed_jobs.priority >= 0) AND (delayed_jobs.priority < 10)) THEN 0 WHEN ((delayed_jobs.priority >= 10) AND (delayed_jobs.priority < 20)) THEN 10 WHEN ((delayed_jobs.priority >= 20) AND (delayed_jobs.priority < 30)) THEN 20 WHEN (delayed_jobs.priority >= 30) THEN 30 ELSE NULL::integer END), delayed_jobs.queue
292
+ -> Sort (cost=...)
293
+ Output: (CASE WHEN ((priority >= 0) AND (priority < 10)) THEN 0 WHEN ((priority >= 10) AND (priority < 20)) THEN 10 WHEN ((priority >= 20) AND (priority < 30)) THEN 20 WHEN (priority >= 30) THEN 30 ELSE NULL::integer END), queue, run_at
294
+ Sort Key: (CASE WHEN ((delayed_jobs.priority >= 0) AND (delayed_jobs.priority < 10)) THEN 0 WHEN ((delayed_jobs.priority >= 10) AND (delayed_jobs.priority < 20)) THEN 10 WHEN ((delayed_jobs.priority >= 20) AND (delayed_jobs.priority < 30)) THEN 20 WHEN (delayed_jobs.priority >= 30) THEN 30 ELSE NULL::integer END), delayed_jobs.queue
295
+ -> Index Scan using delayed_jobs_priority on public.delayed_jobs (cost=...)
296
+ Output: CASE WHEN ((priority >= 0) AND (priority < 10)) THEN 0 WHEN ((priority >= 10) AND (priority < 20)) THEN 10 WHEN ((priority >= 20) AND (priority < 30)) THEN 20 WHEN (priority >= 30) THEN 30 ELSE NULL::integer END, queue, run_at
297
+ Index Cond: (delayed_jobs.run_at <= '2025-11-10 17:20:13'::timestamp without time zone)
298
+ Filter: ((delayed_jobs.failed_at IS NULL) AND ((delayed_jobs.locked_at IS NULL) OR (delayed_jobs.locked_at < '2025-11-10 16:59:43'::timestamp without time zone)))
299
+ SNAP
300
+
301
+ snapshots["runs the expected postgresql query for working_count 1"] = <<-SNAP
302
+ SELECT COUNT(*) AS count_all, CASE WHEN priority >= 0
303
+ AND priority < 10 THEN 0 WHEN priority >= 10
304
+ AND priority < 20 THEN 10 WHEN priority >= 20
305
+ AND priority < 30 THEN 20 WHEN priority >= 30 THEN 30 END AS case_when_priority_0_and_priority_10_then_0_when_priority_10_an, \"delayed_jobs\".\"queue\" AS delayed_jobs_queue
306
+ FROM \"delayed_jobs\"
307
+ WHERE \"delayed_jobs\".\"locked_at\" >= '2025-11-10 16:59:43'
308
+ AND \"delayed_jobs\".\"failed_at\" IS NULL
309
+ AND \"delayed_jobs\".\"run_at\" <= '2025-11-10 17:20:13'
310
+ GROUP BY CASE WHEN priority >= 0
311
+ AND priority < 10 THEN 0 WHEN priority >= 10
312
+ AND priority < 20 THEN 10 WHEN priority >= 20
313
+ AND priority < 30 THEN 20 WHEN priority >= 30 THEN 30 END, \"delayed_jobs\".\"queue\"
314
+ SNAP
315
+
316
+ snapshots["produces the expected postgresql query plan for working_count 1"] = <<-SNAP
317
+ GroupAggregate (cost=...)
318
+ Output: count(*), (CASE WHEN ((priority >= 0) AND (priority < 10)) THEN 0 WHEN ((priority >= 10) AND (priority < 20)) THEN 10 WHEN ((priority >= 20) AND (priority < 30)) THEN 20 WHEN (priority >= 30) THEN 30 ELSE NULL::integer END), queue
319
+ Group Key: (CASE WHEN ((delayed_jobs.priority >= 0) AND (delayed_jobs.priority < 10)) THEN 0 WHEN ((delayed_jobs.priority >= 10) AND (delayed_jobs.priority < 20)) THEN 10 WHEN ((delayed_jobs.priority >= 20) AND (delayed_jobs.priority < 30)) THEN 20 WHEN (delayed_jobs.priority >= 30) THEN 30 ELSE NULL::integer END), delayed_jobs.queue
320
+ -> Sort (cost=...)
321
+ Output: (CASE WHEN ((priority >= 0) AND (priority < 10)) THEN 0 WHEN ((priority >= 10) AND (priority < 20)) THEN 10 WHEN ((priority >= 20) AND (priority < 30)) THEN 20 WHEN (priority >= 30) THEN 30 ELSE NULL::integer END), queue
322
+ Sort Key: (CASE WHEN ((delayed_jobs.priority >= 0) AND (delayed_jobs.priority < 10)) THEN 0 WHEN ((delayed_jobs.priority >= 10) AND (delayed_jobs.priority < 20)) THEN 10 WHEN ((delayed_jobs.priority >= 20) AND (delayed_jobs.priority < 30)) THEN 20 WHEN (delayed_jobs.priority >= 30) THEN 30 ELSE NULL::integer END), delayed_jobs.queue
323
+ -> Index Scan using idx_delayed_jobs_live on public.delayed_jobs (cost=...)
324
+ Output: CASE WHEN ((priority >= 0) AND (priority < 10)) THEN 0 WHEN ((priority >= 10) AND (priority < 20)) THEN 10 WHEN ((priority >= 20) AND (priority < 30)) THEN 20 WHEN (priority >= 30) THEN 30 ELSE NULL::integer END, queue
325
+ Index Cond: (delayed_jobs.run_at <= '2025-11-10 17:20:13'::timestamp without time zone)
326
+ Filter: (delayed_jobs.locked_at >= '2025-11-10 16:59:43'::timestamp without time zone)
327
+ SNAP
328
+
329
+ snapshots["[legacy index] produces the expected postgresql query plan for working_count 1"] = <<-SNAP
330
+ GroupAggregate (cost=...)
331
+ Output: count(*), (CASE WHEN ((priority >= 0) AND (priority < 10)) THEN 0 WHEN ((priority >= 10) AND (priority < 20)) THEN 10 WHEN ((priority >= 20) AND (priority < 30)) THEN 20 WHEN (priority >= 30) THEN 30 ELSE NULL::integer END), queue
332
+ Group Key: (CASE WHEN ((delayed_jobs.priority >= 0) AND (delayed_jobs.priority < 10)) THEN 0 WHEN ((delayed_jobs.priority >= 10) AND (delayed_jobs.priority < 20)) THEN 10 WHEN ((delayed_jobs.priority >= 20) AND (delayed_jobs.priority < 30)) THEN 20 WHEN (delayed_jobs.priority >= 30) THEN 30 ELSE NULL::integer END), delayed_jobs.queue
333
+ -> Sort (cost=...)
334
+ Output: (CASE WHEN ((priority >= 0) AND (priority < 10)) THEN 0 WHEN ((priority >= 10) AND (priority < 20)) THEN 10 WHEN ((priority >= 20) AND (priority < 30)) THEN 20 WHEN (priority >= 30) THEN 30 ELSE NULL::integer END), queue
335
+ Sort Key: (CASE WHEN ((delayed_jobs.priority >= 0) AND (delayed_jobs.priority < 10)) THEN 0 WHEN ((delayed_jobs.priority >= 10) AND (delayed_jobs.priority < 20)) THEN 10 WHEN ((delayed_jobs.priority >= 20) AND (delayed_jobs.priority < 30)) THEN 20 WHEN (delayed_jobs.priority >= 30) THEN 30 ELSE NULL::integer END), delayed_jobs.queue
336
+ -> Index Scan using delayed_jobs_priority on public.delayed_jobs (cost=...)
337
+ Output: CASE WHEN ((priority >= 0) AND (priority < 10)) THEN 0 WHEN ((priority >= 10) AND (priority < 20)) THEN 10 WHEN ((priority >= 20) AND (priority < 30)) THEN 20 WHEN (priority >= 30) THEN 30 ELSE NULL::integer END, queue
338
+ Index Cond: (delayed_jobs.run_at <= '2025-11-10 17:20:13'::timestamp without time zone)
339
+ Filter: ((delayed_jobs.failed_at IS NULL) AND (delayed_jobs.locked_at >= '2025-11-10 16:59:43'::timestamp without time zone))
340
+ SNAP
341
+
342
+ snapshots["runs the expected postgresql query for workable_count 1"] = <<-SNAP
343
+ SELECT COUNT(*) AS count_all, CASE WHEN priority >= 0
344
+ AND priority < 10 THEN 0 WHEN priority >= 10
345
+ AND priority < 20 THEN 10 WHEN priority >= 20
346
+ AND priority < 30 THEN 20 WHEN priority >= 30 THEN 30 END AS case_when_priority_0_and_priority_10_then_0_when_priority_10_an, \"delayed_jobs\".\"queue\" AS delayed_jobs_queue
347
+ FROM \"delayed_jobs\"
348
+ WHERE (\"delayed_jobs\".\"locked_at\" IS NULL
349
+ OR \"delayed_jobs\".\"locked_at\" < '2025-11-10 16:59:43')
350
+ AND \"delayed_jobs\".\"failed_at\" IS NULL
351
+ AND \"delayed_jobs\".\"run_at\" <= '2025-11-10 17:20:13'
352
+ GROUP BY CASE WHEN priority >= 0
353
+ AND priority < 10 THEN 0 WHEN priority >= 10
354
+ AND priority < 20 THEN 10 WHEN priority >= 20
355
+ AND priority < 30 THEN 20 WHEN priority >= 30 THEN 30 END, \"delayed_jobs\".\"queue\"
356
+ SNAP
357
+
358
+ snapshots["produces the expected postgresql query plan for workable_count 1"] = <<-SNAP
359
+ GroupAggregate (cost=...)
360
+ Output: count(*), (CASE WHEN ((priority >= 0) AND (priority < 10)) THEN 0 WHEN ((priority >= 10) AND (priority < 20)) THEN 10 WHEN ((priority >= 20) AND (priority < 30)) THEN 20 WHEN (priority >= 30) THEN 30 ELSE NULL::integer END), queue
361
+ Group Key: (CASE WHEN ((delayed_jobs.priority >= 0) AND (delayed_jobs.priority < 10)) THEN 0 WHEN ((delayed_jobs.priority >= 10) AND (delayed_jobs.priority < 20)) THEN 10 WHEN ((delayed_jobs.priority >= 20) AND (delayed_jobs.priority < 30)) THEN 20 WHEN (delayed_jobs.priority >= 30) THEN 30 ELSE NULL::integer END), delayed_jobs.queue
362
+ -> Sort (cost=...)
363
+ Output: (CASE WHEN ((priority >= 0) AND (priority < 10)) THEN 0 WHEN ((priority >= 10) AND (priority < 20)) THEN 10 WHEN ((priority >= 20) AND (priority < 30)) THEN 20 WHEN (priority >= 30) THEN 30 ELSE NULL::integer END), queue
364
+ Sort Key: (CASE WHEN ((delayed_jobs.priority >= 0) AND (delayed_jobs.priority < 10)) THEN 0 WHEN ((delayed_jobs.priority >= 10) AND (delayed_jobs.priority < 20)) THEN 10 WHEN ((delayed_jobs.priority >= 20) AND (delayed_jobs.priority < 30)) THEN 20 WHEN (delayed_jobs.priority >= 30) THEN 30 ELSE NULL::integer END), delayed_jobs.queue
365
+ -> Index Scan using idx_delayed_jobs_live on public.delayed_jobs (cost=...)
366
+ Output: CASE WHEN ((priority >= 0) AND (priority < 10)) THEN 0 WHEN ((priority >= 10) AND (priority < 20)) THEN 10 WHEN ((priority >= 20) AND (priority < 30)) THEN 20 WHEN (priority >= 30) THEN 30 ELSE NULL::integer END, queue
367
+ Index Cond: (delayed_jobs.run_at <= '2025-11-10 17:20:13'::timestamp without time zone)
368
+ Filter: ((delayed_jobs.locked_at IS NULL) OR (delayed_jobs.locked_at < '2025-11-10 16:59:43'::timestamp without time zone))
369
+ SNAP
370
+
371
+ snapshots["[legacy index] produces the expected postgresql query plan for workable_count 1"] = <<-SNAP
372
+ GroupAggregate (cost=...)
373
+ Output: count(*), (CASE WHEN ((priority >= 0) AND (priority < 10)) THEN 0 WHEN ((priority >= 10) AND (priority < 20)) THEN 10 WHEN ((priority >= 20) AND (priority < 30)) THEN 20 WHEN (priority >= 30) THEN 30 ELSE NULL::integer END), queue
374
+ Group Key: (CASE WHEN ((delayed_jobs.priority >= 0) AND (delayed_jobs.priority < 10)) THEN 0 WHEN ((delayed_jobs.priority >= 10) AND (delayed_jobs.priority < 20)) THEN 10 WHEN ((delayed_jobs.priority >= 20) AND (delayed_jobs.priority < 30)) THEN 20 WHEN (delayed_jobs.priority >= 30) THEN 30 ELSE NULL::integer END), delayed_jobs.queue
375
+ -> Sort (cost=...)
376
+ Output: (CASE WHEN ((priority >= 0) AND (priority < 10)) THEN 0 WHEN ((priority >= 10) AND (priority < 20)) THEN 10 WHEN ((priority >= 20) AND (priority < 30)) THEN 20 WHEN (priority >= 30) THEN 30 ELSE NULL::integer END), queue
377
+ Sort Key: (CASE WHEN ((delayed_jobs.priority >= 0) AND (delayed_jobs.priority < 10)) THEN 0 WHEN ((delayed_jobs.priority >= 10) AND (delayed_jobs.priority < 20)) THEN 10 WHEN ((delayed_jobs.priority >= 20) AND (delayed_jobs.priority < 30)) THEN 20 WHEN (delayed_jobs.priority >= 30) THEN 30 ELSE NULL::integer END), delayed_jobs.queue
378
+ -> Index Scan using delayed_jobs_priority on public.delayed_jobs (cost=...)
379
+ Output: CASE WHEN ((priority >= 0) AND (priority < 10)) THEN 0 WHEN ((priority >= 10) AND (priority < 20)) THEN 10 WHEN ((priority >= 20) AND (priority < 30)) THEN 20 WHEN (priority >= 30) THEN 30 ELSE NULL::integer END, queue
380
+ Index Cond: (delayed_jobs.run_at <= '2025-11-10 17:20:13'::timestamp without time zone)
381
+ Filter: ((delayed_jobs.failed_at IS NULL) AND ((delayed_jobs.locked_at IS NULL) OR (delayed_jobs.locked_at < '2025-11-10 16:59:43'::timestamp without time zone)))
382
+ SNAP
383
+
384
+ snapshots["runs the expected postgresql query for alert_age_percent 1"] = <<-SNAP
385
+ SELECT (CASE WHEN priority >= 0
386
+ AND priority < 10 THEN 0 WHEN priority >= 10
387
+ AND priority < 20 THEN 10 WHEN priority >= 20
388
+ AND priority < 30 THEN 20 WHEN priority >= 30 THEN 30 END) AS priority, queue, MIN(run_at) AS run_at
389
+ FROM \"delayed_jobs\"
390
+ WHERE (\"delayed_jobs\".\"locked_at\" IS NULL
391
+ OR \"delayed_jobs\".\"locked_at\" < '2025-11-10 16:59:43')
392
+ AND \"delayed_jobs\".\"failed_at\" IS NULL
393
+ AND \"delayed_jobs\".\"run_at\" <= '2025-11-10 17:20:13'
394
+ GROUP BY CASE WHEN priority >= 0
395
+ AND priority < 10 THEN 0 WHEN priority >= 10
396
+ AND priority < 20 THEN 10 WHEN priority >= 20
397
+ AND priority < 30 THEN 20 WHEN priority >= 30 THEN 30 END, \"delayed_jobs\".\"queue\"
398
+ SNAP
399
+
400
+ snapshots["produces the expected postgresql query plan for alert_age_percent 1"] = <<-SNAP
401
+ GroupAggregate (cost=...)
402
+ Output: (CASE WHEN ((priority >= 0) AND (priority < 10)) THEN 0 WHEN ((priority >= 10) AND (priority < 20)) THEN 10 WHEN ((priority >= 20) AND (priority < 30)) THEN 20 WHEN (priority >= 30) THEN 30 ELSE NULL::integer END), queue, min(run_at)
403
+ Group Key: (CASE WHEN ((delayed_jobs.priority >= 0) AND (delayed_jobs.priority < 10)) THEN 0 WHEN ((delayed_jobs.priority >= 10) AND (delayed_jobs.priority < 20)) THEN 10 WHEN ((delayed_jobs.priority >= 20) AND (delayed_jobs.priority < 30)) THEN 20 WHEN (delayed_jobs.priority >= 30) THEN 30 ELSE NULL::integer END), delayed_jobs.queue
404
+ -> Sort (cost=...)
405
+ Output: (CASE WHEN ((priority >= 0) AND (priority < 10)) THEN 0 WHEN ((priority >= 10) AND (priority < 20)) THEN 10 WHEN ((priority >= 20) AND (priority < 30)) THEN 20 WHEN (priority >= 30) THEN 30 ELSE NULL::integer END), queue, run_at
406
+ Sort Key: (CASE WHEN ((delayed_jobs.priority >= 0) AND (delayed_jobs.priority < 10)) THEN 0 WHEN ((delayed_jobs.priority >= 10) AND (delayed_jobs.priority < 20)) THEN 10 WHEN ((delayed_jobs.priority >= 20) AND (delayed_jobs.priority < 30)) THEN 20 WHEN (delayed_jobs.priority >= 30) THEN 30 ELSE NULL::integer END), delayed_jobs.queue
407
+ -> Index Scan using idx_delayed_jobs_live on public.delayed_jobs (cost=...)
408
+ Output: CASE WHEN ((priority >= 0) AND (priority < 10)) THEN 0 WHEN ((priority >= 10) AND (priority < 20)) THEN 10 WHEN ((priority >= 20) AND (priority < 30)) THEN 20 WHEN (priority >= 30) THEN 30 ELSE NULL::integer END, queue, run_at
409
+ Index Cond: (delayed_jobs.run_at <= '2025-11-10 17:20:13'::timestamp without time zone)
410
+ Filter: ((delayed_jobs.locked_at IS NULL) OR (delayed_jobs.locked_at < '2025-11-10 16:59:43'::timestamp without time zone))
411
+ SNAP
412
+
413
+ snapshots["[legacy index] produces the expected postgresql query plan for alert_age_percent 1"] = <<-SNAP
414
+ GroupAggregate (cost=...)
415
+ Output: (CASE WHEN ((priority >= 0) AND (priority < 10)) THEN 0 WHEN ((priority >= 10) AND (priority < 20)) THEN 10 WHEN ((priority >= 20) AND (priority < 30)) THEN 20 WHEN (priority >= 30) THEN 30 ELSE NULL::integer END), queue, min(run_at)
416
+ Group Key: (CASE WHEN ((delayed_jobs.priority >= 0) AND (delayed_jobs.priority < 10)) THEN 0 WHEN ((delayed_jobs.priority >= 10) AND (delayed_jobs.priority < 20)) THEN 10 WHEN ((delayed_jobs.priority >= 20) AND (delayed_jobs.priority < 30)) THEN 20 WHEN (delayed_jobs.priority >= 30) THEN 30 ELSE NULL::integer END), delayed_jobs.queue
417
+ -> Sort (cost=...)
418
+ Output: (CASE WHEN ((priority >= 0) AND (priority < 10)) THEN 0 WHEN ((priority >= 10) AND (priority < 20)) THEN 10 WHEN ((priority >= 20) AND (priority < 30)) THEN 20 WHEN (priority >= 30) THEN 30 ELSE NULL::integer END), queue, run_at
419
+ Sort Key: (CASE WHEN ((delayed_jobs.priority >= 0) AND (delayed_jobs.priority < 10)) THEN 0 WHEN ((delayed_jobs.priority >= 10) AND (delayed_jobs.priority < 20)) THEN 10 WHEN ((delayed_jobs.priority >= 20) AND (delayed_jobs.priority < 30)) THEN 20 WHEN (delayed_jobs.priority >= 30) THEN 30 ELSE NULL::integer END), delayed_jobs.queue
420
+ -> Index Scan using delayed_jobs_priority on public.delayed_jobs (cost=...)
421
+ Output: CASE WHEN ((priority >= 0) AND (priority < 10)) THEN 0 WHEN ((priority >= 10) AND (priority < 20)) THEN 10 WHEN ((priority >= 20) AND (priority < 30)) THEN 20 WHEN (priority >= 30) THEN 30 ELSE NULL::integer END, queue, run_at
422
+ Index Cond: (delayed_jobs.run_at <= '2025-11-10 17:20:13'::timestamp without time zone)
423
+ Filter: ((delayed_jobs.failed_at IS NULL) AND ((delayed_jobs.locked_at IS NULL) OR (delayed_jobs.locked_at < '2025-11-10 16:59:43'::timestamp without time zone)))
424
+ SNAP
425
+
426
+ snapshots["runs the expected sqlite3 query for count 1"] = <<-SNAP
427
+ SELECT COUNT(*) AS count_all, CASE WHEN priority >= 0
428
+ AND priority < 10 THEN 0 WHEN priority >= 10
429
+ AND priority < 20 THEN 10 WHEN priority >= 20
430
+ AND priority < 30 THEN 20 WHEN priority >= 30 THEN 30 END AS case_when_priority_0_and_priority_10_then_0_when_priority_10_an, \"delayed_jobs\".\"queue\" AS delayed_jobs_queue
431
+ FROM \"delayed_jobs\"
432
+ WHERE \"delayed_jobs\".\"failed_at\" IS NOT NULL
433
+ GROUP BY CASE WHEN priority >= 0
434
+ AND priority < 10 THEN 0 WHEN priority >= 10
435
+ AND priority < 20 THEN 10 WHEN priority >= 20
436
+ AND priority < 30 THEN 20 WHEN priority >= 30 THEN 30 END, \"delayed_jobs\".\"queue\"
437
+ SELECT COUNT(*) AS count_all, CASE WHEN priority >= 0
438
+ AND priority < 10 THEN 0 WHEN priority >= 10
439
+ AND priority < 20 THEN 10 WHEN priority >= 20
440
+ AND priority < 30 THEN 20 WHEN priority >= 30 THEN 30 END AS case_when_priority_0_and_priority_10_then_0_when_priority_10_an, \"delayed_jobs\".\"queue\" AS delayed_jobs_queue
441
+ FROM \"delayed_jobs\"
442
+ WHERE \"delayed_jobs\".\"failed_at\" IS NULL
443
+ GROUP BY CASE WHEN priority >= 0
444
+ AND priority < 10 THEN 0 WHEN priority >= 10
445
+ AND priority < 20 THEN 10 WHEN priority >= 20
446
+ AND priority < 30 THEN 20 WHEN priority >= 30 THEN 30 END, \"delayed_jobs\".\"queue\"
447
+ SNAP
448
+
449
+ snapshots["produces the expected sqlite3 query plan for count 1"] = <<-SNAP
450
+ SCAN delayed_jobs USING INDEX idx_delayed_jobs_failed
451
+ USE TEMP B-TREE FOR GROUP BY
452
+ SCAN delayed_jobs USING INDEX idx_delayed_jobs_live
453
+ USE TEMP B-TREE FOR GROUP BY
454
+ SNAP
455
+
456
+ snapshots["[legacy index] produces the expected sqlite3 query plan for count 1"] = <<-SNAP
457
+ SCAN delayed_jobs
458
+ USE TEMP B-TREE FOR GROUP BY
459
+ SCAN delayed_jobs
460
+ USE TEMP B-TREE FOR GROUP BY
461
+ SNAP
462
+
463
+ snapshots["runs the expected sqlite3 query for future_count 1"] = <<-SNAP
464
+ SELECT COUNT(*) AS count_all, CASE WHEN priority >= 0
465
+ AND priority < 10 THEN 0 WHEN priority >= 10
466
+ AND priority < 20 THEN 10 WHEN priority >= 20
467
+ AND priority < 30 THEN 20 WHEN priority >= 30 THEN 30 END AS case_when_priority_0_and_priority_10_then_0_when_priority_10_an, \"delayed_jobs\".\"queue\" AS delayed_jobs_queue
468
+ FROM \"delayed_jobs\"
469
+ WHERE \"delayed_jobs\".\"failed_at\" IS NULL
470
+ AND \"delayed_jobs\".\"run_at\" > '2025-11-10 17:20:13'
471
+ GROUP BY CASE WHEN priority >= 0
472
+ AND priority < 10 THEN 0 WHEN priority >= 10
473
+ AND priority < 20 THEN 10 WHEN priority >= 20
474
+ AND priority < 30 THEN 20 WHEN priority >= 30 THEN 30 END, \"delayed_jobs\".\"queue\"
475
+ SNAP
476
+
477
+ snapshots["produces the expected sqlite3 query plan for future_count 1"] = <<-SNAP
478
+ SCAN delayed_jobs USING INDEX idx_delayed_jobs_live
479
+ USE TEMP B-TREE FOR GROUP BY
480
+ SNAP
481
+
482
+ snapshots["[legacy index] produces the expected sqlite3 query plan for future_count 1"] = <<-SNAP
483
+ SCAN delayed_jobs
484
+ USE TEMP B-TREE FOR GROUP BY
485
+ SNAP
486
+
487
+ snapshots["runs the expected sqlite3 query for locked_count 1"] = <<-SNAP
488
+ SELECT COUNT(*) AS count_all, CASE WHEN priority >= 0
489
+ AND priority < 10 THEN 0 WHEN priority >= 10
490
+ AND priority < 20 THEN 10 WHEN priority >= 20
491
+ AND priority < 30 THEN 20 WHEN priority >= 30 THEN 30 END AS case_when_priority_0_and_priority_10_then_0_when_priority_10_an, \"delayed_jobs\".\"queue\" AS delayed_jobs_queue
492
+ FROM \"delayed_jobs\"
493
+ WHERE \"delayed_jobs\".\"locked_at\" >= '2025-11-10 16:59:43'
494
+ AND \"delayed_jobs\".\"failed_at\" IS NULL
495
+ AND \"delayed_jobs\".\"run_at\" <= '2025-11-10 17:20:13'
496
+ GROUP BY CASE WHEN priority >= 0
497
+ AND priority < 10 THEN 0 WHEN priority >= 10
498
+ AND priority < 20 THEN 10 WHEN priority >= 20
499
+ AND priority < 30 THEN 20 WHEN priority >= 30 THEN 30 END, \"delayed_jobs\".\"queue\"
500
+ SNAP
501
+
502
+ snapshots["produces the expected sqlite3 query plan for locked_count 1"] = <<-SNAP
503
+ SCAN delayed_jobs USING INDEX idx_delayed_jobs_live
504
+ USE TEMP B-TREE FOR GROUP BY
505
+ SNAP
506
+
507
+ snapshots["[legacy index] produces the expected sqlite3 query plan for locked_count 1"] = <<-SNAP
508
+ SCAN delayed_jobs
509
+ USE TEMP B-TREE FOR GROUP BY
510
+ SNAP
511
+
512
+ snapshots["runs the expected sqlite3 query for erroring_count 1"] = <<-SNAP
513
+ SELECT COUNT(*) AS count_all, CASE WHEN priority >= 0
514
+ AND priority < 10 THEN 0 WHEN priority >= 10
515
+ AND priority < 20 THEN 10 WHEN priority >= 20
516
+ AND priority < 30 THEN 20 WHEN priority >= 30 THEN 30 END AS case_when_priority_0_and_priority_10_then_0_when_priority_10_an, \"delayed_jobs\".\"queue\" AS delayed_jobs_queue
517
+ FROM \"delayed_jobs\"
518
+ WHERE \"delayed_jobs\".\"attempts\" > 0
519
+ AND \"delayed_jobs\".\"failed_at\" IS NULL
520
+ GROUP BY CASE WHEN priority >= 0
521
+ AND priority < 10 THEN 0 WHEN priority >= 10
522
+ AND priority < 20 THEN 10 WHEN priority >= 20
523
+ AND priority < 30 THEN 20 WHEN priority >= 30 THEN 30 END, \"delayed_jobs\".\"queue\"
524
+ SNAP
525
+
526
+ snapshots["produces the expected sqlite3 query plan for erroring_count 1"] = <<-SNAP
527
+ SCAN delayed_jobs USING INDEX idx_delayed_jobs_live
528
+ USE TEMP B-TREE FOR GROUP BY
529
+ SNAP
530
+
531
+ snapshots["[legacy index] produces the expected sqlite3 query plan for erroring_count 1"] = <<-SNAP
532
+ SCAN delayed_jobs
533
+ USE TEMP B-TREE FOR GROUP BY
534
+ SNAP
535
+
536
+ snapshots["runs the expected sqlite3 query for failed_count 1"] = <<-SNAP
537
+ SELECT COUNT(*) AS count_all, CASE WHEN priority >= 0
538
+ AND priority < 10 THEN 0 WHEN priority >= 10
539
+ AND priority < 20 THEN 10 WHEN priority >= 20
540
+ AND priority < 30 THEN 20 WHEN priority >= 30 THEN 30 END AS case_when_priority_0_and_priority_10_then_0_when_priority_10_an, \"delayed_jobs\".\"queue\" AS delayed_jobs_queue
541
+ FROM \"delayed_jobs\"
542
+ WHERE \"delayed_jobs\".\"failed_at\" IS NOT NULL
543
+ GROUP BY CASE WHEN priority >= 0
544
+ AND priority < 10 THEN 0 WHEN priority >= 10
545
+ AND priority < 20 THEN 10 WHEN priority >= 20
546
+ AND priority < 30 THEN 20 WHEN priority >= 30 THEN 30 END, \"delayed_jobs\".\"queue\"
547
+ SNAP
548
+
549
+ snapshots["produces the expected sqlite3 query plan for failed_count 1"] = <<-SNAP
550
+ SCAN delayed_jobs USING INDEX idx_delayed_jobs_failed
551
+ USE TEMP B-TREE FOR GROUP BY
552
+ SNAP
553
+
554
+ snapshots["[legacy index] produces the expected sqlite3 query plan for failed_count 1"] = <<-SNAP
555
+ SCAN delayed_jobs
556
+ USE TEMP B-TREE FOR GROUP BY
557
+ SNAP
558
+
559
+ snapshots["runs the expected sqlite3 query for max_lock_age 1"] = <<-SNAP
560
+ SELECT CASE WHEN priority >= 0
561
+ AND priority < 10 THEN 0 WHEN priority >= 10
562
+ AND priority < 20 THEN 10 WHEN priority >= 20
563
+ AND priority < 30 THEN 20 WHEN priority >= 30 THEN 30 END AS priority, queue, MIN(locked_at) AS locked_at
564
+ FROM \"delayed_jobs\"
565
+ WHERE \"delayed_jobs\".\"locked_at\" >= '2025-11-10 16:59:43'
566
+ AND \"delayed_jobs\".\"failed_at\" IS NULL
567
+ AND \"delayed_jobs\".\"run_at\" <= '2025-11-10 17:20:13'
568
+ GROUP BY CASE WHEN priority >= 0
569
+ AND priority < 10 THEN 0 WHEN priority >= 10
570
+ AND priority < 20 THEN 10 WHEN priority >= 20
571
+ AND priority < 30 THEN 20 WHEN priority >= 30 THEN 30 END, \"delayed_jobs\".\"queue\"
572
+ SNAP
573
+
574
+ snapshots["produces the expected sqlite3 query plan for max_lock_age 1"] = <<-SNAP
575
+ SCAN delayed_jobs USING INDEX idx_delayed_jobs_live
576
+ USE TEMP B-TREE FOR GROUP BY
577
+ SNAP
578
+
579
+ snapshots["[legacy index] produces the expected sqlite3 query plan for max_lock_age 1"] = <<-SNAP
580
+ SCAN delayed_jobs
581
+ USE TEMP B-TREE FOR GROUP BY
582
+ SNAP
583
+
584
+ snapshots["runs the expected sqlite3 query for max_age 1"] = <<-SNAP
585
+ SELECT (CASE WHEN priority >= 0
586
+ AND priority < 10 THEN 0 WHEN priority >= 10
587
+ AND priority < 20 THEN 10 WHEN priority >= 20
588
+ AND priority < 30 THEN 20 WHEN priority >= 30 THEN 30 END) AS priority, queue, MIN(run_at) AS run_at
589
+ FROM \"delayed_jobs\"
590
+ WHERE (\"delayed_jobs\".\"locked_at\" IS NULL
591
+ OR \"delayed_jobs\".\"locked_at\" < '2025-11-10 16:59:43')
592
+ AND \"delayed_jobs\".\"failed_at\" IS NULL
593
+ AND \"delayed_jobs\".\"run_at\" <= '2025-11-10 17:20:13'
594
+ GROUP BY CASE WHEN priority >= 0
595
+ AND priority < 10 THEN 0 WHEN priority >= 10
596
+ AND priority < 20 THEN 10 WHEN priority >= 20
597
+ AND priority < 30 THEN 20 WHEN priority >= 30 THEN 30 END, \"delayed_jobs\".\"queue\"
598
+ SNAP
599
+
600
+ snapshots["produces the expected sqlite3 query plan for max_age 1"] = <<-SNAP
601
+ SCAN delayed_jobs USING INDEX idx_delayed_jobs_live
602
+ USE TEMP B-TREE FOR GROUP BY
603
+ SNAP
604
+
605
+ snapshots["[legacy index] produces the expected sqlite3 query plan for max_age 1"] = <<-SNAP
606
+ SCAN delayed_jobs
607
+ USE TEMP B-TREE FOR GROUP BY
608
+ SNAP
609
+
610
+ snapshots["runs the expected sqlite3 query for working_count 1"] = <<-SNAP
611
+ SELECT COUNT(*) AS count_all, CASE WHEN priority >= 0
612
+ AND priority < 10 THEN 0 WHEN priority >= 10
613
+ AND priority < 20 THEN 10 WHEN priority >= 20
614
+ AND priority < 30 THEN 20 WHEN priority >= 30 THEN 30 END AS case_when_priority_0_and_priority_10_then_0_when_priority_10_an, \"delayed_jobs\".\"queue\" AS delayed_jobs_queue
615
+ FROM \"delayed_jobs\"
616
+ WHERE \"delayed_jobs\".\"locked_at\" >= '2025-11-10 16:59:43'
617
+ AND \"delayed_jobs\".\"failed_at\" IS NULL
618
+ AND \"delayed_jobs\".\"run_at\" <= '2025-11-10 17:20:13'
619
+ GROUP BY CASE WHEN priority >= 0
620
+ AND priority < 10 THEN 0 WHEN priority >= 10
621
+ AND priority < 20 THEN 10 WHEN priority >= 20
622
+ AND priority < 30 THEN 20 WHEN priority >= 30 THEN 30 END, \"delayed_jobs\".\"queue\"
623
+ SNAP
624
+
625
+ snapshots["produces the expected sqlite3 query plan for working_count 1"] = <<-SNAP
626
+ SCAN delayed_jobs USING INDEX idx_delayed_jobs_live
627
+ USE TEMP B-TREE FOR GROUP BY
628
+ SNAP
629
+
630
+ snapshots["[legacy index] produces the expected sqlite3 query plan for working_count 1"] = <<-SNAP
631
+ SCAN delayed_jobs
632
+ USE TEMP B-TREE FOR GROUP BY
633
+ SNAP
634
+
635
+ snapshots["runs the expected sqlite3 query for workable_count 1"] = <<-SNAP
636
+ SELECT COUNT(*) AS count_all, CASE WHEN priority >= 0
637
+ AND priority < 10 THEN 0 WHEN priority >= 10
638
+ AND priority < 20 THEN 10 WHEN priority >= 20
639
+ AND priority < 30 THEN 20 WHEN priority >= 30 THEN 30 END AS case_when_priority_0_and_priority_10_then_0_when_priority_10_an, \"delayed_jobs\".\"queue\" AS delayed_jobs_queue
640
+ FROM \"delayed_jobs\"
641
+ WHERE (\"delayed_jobs\".\"locked_at\" IS NULL
642
+ OR \"delayed_jobs\".\"locked_at\" < '2025-11-10 16:59:43')
643
+ AND \"delayed_jobs\".\"failed_at\" IS NULL
644
+ AND \"delayed_jobs\".\"run_at\" <= '2025-11-10 17:20:13'
645
+ GROUP BY CASE WHEN priority >= 0
646
+ AND priority < 10 THEN 0 WHEN priority >= 10
647
+ AND priority < 20 THEN 10 WHEN priority >= 20
648
+ AND priority < 30 THEN 20 WHEN priority >= 30 THEN 30 END, \"delayed_jobs\".\"queue\"
649
+ SNAP
650
+
651
+ snapshots["produces the expected sqlite3 query plan for workable_count 1"] = <<-SNAP
652
+ SCAN delayed_jobs USING INDEX idx_delayed_jobs_live
653
+ USE TEMP B-TREE FOR GROUP BY
654
+ SNAP
655
+
656
+ snapshots["[legacy index] produces the expected sqlite3 query plan for workable_count 1"] = <<-SNAP
657
+ SCAN delayed_jobs
658
+ USE TEMP B-TREE FOR GROUP BY
659
+ SNAP
660
+
661
+ snapshots["runs the expected sqlite3 query for alert_age_percent 1"] = <<-SNAP
662
+ SELECT (CASE WHEN priority >= 0
663
+ AND priority < 10 THEN 0 WHEN priority >= 10
664
+ AND priority < 20 THEN 10 WHEN priority >= 20
665
+ AND priority < 30 THEN 20 WHEN priority >= 30 THEN 30 END) AS priority, queue, MIN(run_at) AS run_at
666
+ FROM \"delayed_jobs\"
667
+ WHERE (\"delayed_jobs\".\"locked_at\" IS NULL
668
+ OR \"delayed_jobs\".\"locked_at\" < '2025-11-10 16:59:43')
669
+ AND \"delayed_jobs\".\"failed_at\" IS NULL
670
+ AND \"delayed_jobs\".\"run_at\" <= '2025-11-10 17:20:13'
671
+ GROUP BY CASE WHEN priority >= 0
672
+ AND priority < 10 THEN 0 WHEN priority >= 10
673
+ AND priority < 20 THEN 10 WHEN priority >= 20
674
+ AND priority < 30 THEN 20 WHEN priority >= 30 THEN 30 END, \"delayed_jobs\".\"queue\"
675
+ SNAP
676
+
677
+ snapshots["produces the expected sqlite3 query plan for alert_age_percent 1"] = <<-SNAP
678
+ SCAN delayed_jobs USING INDEX idx_delayed_jobs_live
679
+ USE TEMP B-TREE FOR GROUP BY
680
+ SNAP
681
+
682
+ snapshots["[legacy index] produces the expected sqlite3 query plan for alert_age_percent 1"] = <<-SNAP
683
+ SCAN delayed_jobs
684
+ USE TEMP B-TREE FOR GROUP BY
685
+ SNAP
686
+
687
+ snapshots["runs the expected mysql2 query for count 1"] = <<-SNAP
688
+ SELECT COUNT(*) AS count_all, CASE WHEN priority >= 0
689
+ AND priority < 10 THEN 0 WHEN priority >= 10
690
+ AND priority < 20 THEN 10 WHEN priority >= 20
691
+ AND priority < 30 THEN 20 WHEN priority >= 30 THEN 30 END AS case_when_priority_0_and_priority_10_then_0_when_priority_10_an, `delayed_jobs`.`queue` AS delayed_jobs_queue
692
+ FROM `delayed_jobs`
693
+ GROUP BY CASE WHEN priority >= 0
694
+ AND priority < 10 THEN 0 WHEN priority >= 10
695
+ AND priority < 20 THEN 10 WHEN priority >= 20
696
+ AND priority < 30 THEN 20 WHEN priority >= 30 THEN 30 END, `delayed_jobs`.`queue`
697
+ SNAP
698
+
699
+ snapshots["produces the expected mysql2 query plan for count 1"] = <<-SNAP
700
+ -> Table scan on <temporary>
701
+ -> Aggregate using temporary table
702
+ -> Covering index scan on delayed_jobs using idx_delayed_jobs_live (cost=...)
703
+ SNAP
704
+
705
+ snapshots["[legacy index] produces the expected mysql2 query plan for count 1"] = <<-SNAP
706
+ -> Table scan on <temporary>
707
+ -> Aggregate using temporary table
708
+ -> Table scan on delayed_jobs (cost=...)
709
+ SNAP
710
+
711
+ snapshots["runs the expected mysql2 query for future_count 1"] = <<-SNAP
712
+ SELECT COUNT(*) AS count_all, CASE WHEN priority >= 0
713
+ AND priority < 10 THEN 0 WHEN priority >= 10
714
+ AND priority < 20 THEN 10 WHEN priority >= 20
715
+ AND priority < 30 THEN 20 WHEN priority >= 30 THEN 30 END AS case_when_priority_0_and_priority_10_then_0_when_priority_10_an, `delayed_jobs`.`queue` AS delayed_jobs_queue
716
+ FROM `delayed_jobs`
717
+ WHERE `delayed_jobs`.`failed_at` IS NULL
718
+ AND `delayed_jobs`.`run_at` > '2025-11-10 17:20:13'
719
+ GROUP BY CASE WHEN priority >= 0
720
+ AND priority < 10 THEN 0 WHEN priority >= 10
721
+ AND priority < 20 THEN 10 WHEN priority >= 20
722
+ AND priority < 30 THEN 20 WHEN priority >= 30 THEN 30 END, `delayed_jobs`.`queue`
723
+ SNAP
724
+
725
+ snapshots["produces the expected mysql2 query plan for future_count 1"] = <<-SNAP
726
+ -> Table scan on <temporary>
727
+ -> Aggregate using temporary table
728
+ -> Filter: ((delayed_jobs.failed_at is null) and (delayed_jobs.run_at > TIMESTAMP'2025-11-10 17:20:13')) (cost=...)
729
+ -> Covering index lookup on delayed_jobs using idx_delayed_jobs_live (failed_at = NULL) (cost=...)
730
+ SNAP
731
+
732
+ snapshots["[legacy index] produces the expected mysql2 query plan for future_count 1"] = <<-SNAP
733
+ -> Table scan on <temporary>
734
+ -> Aggregate using temporary table
735
+ -> Filter: ((delayed_jobs.failed_at is null) and (delayed_jobs.run_at > TIMESTAMP'2025-11-10 17:20:13')) (cost=...)
736
+ -> Table scan on delayed_jobs (cost=...)
737
+ SNAP
738
+
739
+ snapshots["runs the expected mysql2 query for locked_count 1"] = <<-SNAP
740
+ SELECT COUNT(*) AS count_all, CASE WHEN priority >= 0
741
+ AND priority < 10 THEN 0 WHEN priority >= 10
742
+ AND priority < 20 THEN 10 WHEN priority >= 20
743
+ AND priority < 30 THEN 20 WHEN priority >= 30 THEN 30 END AS case_when_priority_0_and_priority_10_then_0_when_priority_10_an, `delayed_jobs`.`queue` AS delayed_jobs_queue
744
+ FROM `delayed_jobs`
745
+ WHERE `delayed_jobs`.`locked_at` >= '2025-11-10 16:59:43'
746
+ AND `delayed_jobs`.`failed_at` IS NULL
747
+ AND `delayed_jobs`.`run_at` <= '2025-11-10 17:20:13'
748
+ GROUP BY CASE WHEN priority >= 0
749
+ AND priority < 10 THEN 0 WHEN priority >= 10
750
+ AND priority < 20 THEN 10 WHEN priority >= 20
751
+ AND priority < 30 THEN 20 WHEN priority >= 30 THEN 30 END, `delayed_jobs`.`queue`
752
+ SNAP
753
+
754
+ snapshots["produces the expected mysql2 query plan for locked_count 1"] = <<-SNAP
755
+ -> Table scan on <temporary>
756
+ -> Aggregate using temporary table
757
+ -> Filter: ((delayed_jobs.locked_at >= TIMESTAMP'2025-11-10 16:59:43') and (delayed_jobs.failed_at is null) and (delayed_jobs.run_at <= TIMESTAMP'2025-11-10 17:20:13')) (cost=...)
758
+ -> Covering index lookup on delayed_jobs using idx_delayed_jobs_live (failed_at = NULL) (cost=...)
759
+ SNAP
760
+
761
+ snapshots["[legacy index] produces the expected mysql2 query plan for locked_count 1"] = <<-SNAP
762
+ -> Table scan on <temporary>
763
+ -> Aggregate using temporary table
764
+ -> Filter: ((delayed_jobs.locked_at >= TIMESTAMP'2025-11-10 16:59:43') and (delayed_jobs.failed_at is null) and (delayed_jobs.run_at <= TIMESTAMP'2025-11-10 17:20:13')) (cost=...)
765
+ -> Table scan on delayed_jobs (cost=...)
766
+ SNAP
767
+
768
+ snapshots["runs the expected mysql2 query for erroring_count 1"] = <<-SNAP
769
+ SELECT COUNT(*) AS count_all, CASE WHEN priority >= 0
770
+ AND priority < 10 THEN 0 WHEN priority >= 10
771
+ AND priority < 20 THEN 10 WHEN priority >= 20
772
+ AND priority < 30 THEN 20 WHEN priority >= 30 THEN 30 END AS case_when_priority_0_and_priority_10_then_0_when_priority_10_an, `delayed_jobs`.`queue` AS delayed_jobs_queue
773
+ FROM `delayed_jobs`
774
+ WHERE `delayed_jobs`.`attempts` > 0
775
+ AND `delayed_jobs`.`failed_at` IS NULL
776
+ GROUP BY CASE WHEN priority >= 0
777
+ AND priority < 10 THEN 0 WHEN priority >= 10
778
+ AND priority < 20 THEN 10 WHEN priority >= 20
779
+ AND priority < 30 THEN 20 WHEN priority >= 30 THEN 30 END, `delayed_jobs`.`queue`
780
+ SNAP
781
+
782
+ snapshots["produces the expected mysql2 query plan for erroring_count 1"] = <<-SNAP
783
+ -> Table scan on <temporary>
784
+ -> Aggregate using temporary table
785
+ -> Filter: ((delayed_jobs.attempts > 0) and (delayed_jobs.failed_at is null)) (cost=...)
786
+ -> Covering index lookup on delayed_jobs using idx_delayed_jobs_live (failed_at = NULL) (cost=...)
787
+ SNAP
788
+
789
+ snapshots["[legacy index] produces the expected mysql2 query plan for erroring_count 1"] = <<-SNAP
790
+ -> Table scan on <temporary>
791
+ -> Aggregate using temporary table
792
+ -> Filter: ((delayed_jobs.attempts > 0) and (delayed_jobs.failed_at is null)) (cost=...)
793
+ -> Table scan on delayed_jobs (cost=...)
794
+ SNAP
795
+
796
+ snapshots["runs the expected mysql2 query for failed_count 1"] = <<-SNAP
797
+ SELECT COUNT(*) AS count_all, CASE WHEN priority >= 0
798
+ AND priority < 10 THEN 0 WHEN priority >= 10
799
+ AND priority < 20 THEN 10 WHEN priority >= 20
800
+ AND priority < 30 THEN 20 WHEN priority >= 30 THEN 30 END AS case_when_priority_0_and_priority_10_then_0_when_priority_10_an, `delayed_jobs`.`queue` AS delayed_jobs_queue
801
+ FROM `delayed_jobs`
802
+ WHERE `delayed_jobs`.`failed_at` IS NOT NULL
803
+ GROUP BY CASE WHEN priority >= 0
804
+ AND priority < 10 THEN 0 WHEN priority >= 10
805
+ AND priority < 20 THEN 10 WHEN priority >= 20
806
+ AND priority < 30 THEN 20 WHEN priority >= 30 THEN 30 END, `delayed_jobs`.`queue`
807
+ SNAP
808
+
809
+ snapshots["produces the expected mysql2 query plan for failed_count 1"] = <<-SNAP
810
+ -> Table scan on <temporary>
811
+ -> Aggregate using temporary table
812
+ -> Filter: (delayed_jobs.failed_at is not null) (cost=...)
813
+ -> Covering index range scan on delayed_jobs using idx_delayed_jobs_live over (NULL < failed_at) (cost=...)
814
+ SNAP
815
+
816
+ snapshots["[legacy index] produces the expected mysql2 query plan for failed_count 1"] = <<-SNAP
817
+ -> Table scan on <temporary>
818
+ -> Aggregate using temporary table
819
+ -> Filter: (delayed_jobs.failed_at is not null) (cost=...)
820
+ -> Table scan on delayed_jobs (cost=...)
821
+ SNAP
822
+
823
+ snapshots["runs the expected mysql2 query for max_lock_age 1"] = <<-SNAP
824
+ SELECT CASE WHEN priority >= 0
825
+ AND priority < 10 THEN 0 WHEN priority >= 10
826
+ AND priority < 20 THEN 10 WHEN priority >= 20
827
+ AND priority < 30 THEN 20 WHEN priority >= 30 THEN 30 END AS priority, queue, MIN(locked_at) AS locked_at
828
+ FROM `delayed_jobs`
829
+ WHERE `delayed_jobs`.`locked_at` >= '2025-11-10 16:59:43'
830
+ AND `delayed_jobs`.`failed_at` IS NULL
831
+ AND `delayed_jobs`.`run_at` <= '2025-11-10 17:20:13'
832
+ GROUP BY CASE WHEN priority >= 0
833
+ AND priority < 10 THEN 0 WHEN priority >= 10
834
+ AND priority < 20 THEN 10 WHEN priority >= 20
835
+ AND priority < 30 THEN 20 WHEN priority >= 30 THEN 30 END, `delayed_jobs`.`queue`
836
+ SNAP
837
+
838
+ snapshots["produces the expected mysql2 query plan for max_lock_age 1"] = <<-SNAP
839
+ -> Table scan on <temporary>
840
+ -> Aggregate using temporary table
841
+ -> Filter: ((delayed_jobs.locked_at >= TIMESTAMP'2025-11-10 16:59:43') and (delayed_jobs.failed_at is null) and (delayed_jobs.run_at <= TIMESTAMP'2025-11-10 17:20:13')) (cost=...)
842
+ -> Covering index lookup on delayed_jobs using idx_delayed_jobs_live (failed_at = NULL) (cost=...)
843
+ SNAP
844
+
845
+ snapshots["[legacy index] produces the expected mysql2 query plan for max_lock_age 1"] = <<-SNAP
846
+ -> Table scan on <temporary>
847
+ -> Aggregate using temporary table
848
+ -> Filter: ((delayed_jobs.locked_at >= TIMESTAMP'2025-11-10 16:59:43') and (delayed_jobs.failed_at is null) and (delayed_jobs.run_at <= TIMESTAMP'2025-11-10 17:20:13')) (cost=...)
849
+ -> Table scan on delayed_jobs (cost=...)
850
+ SNAP
851
+
852
+ snapshots["runs the expected mysql2 query for max_age 1"] = <<-SNAP
853
+ SELECT (CASE WHEN priority >= 0
854
+ AND priority < 10 THEN 0 WHEN priority >= 10
855
+ AND priority < 20 THEN 10 WHEN priority >= 20
856
+ AND priority < 30 THEN 20 WHEN priority >= 30 THEN 30 END) AS priority, queue, MIN(run_at) AS run_at
857
+ FROM `delayed_jobs`
858
+ WHERE (`delayed_jobs`.`locked_at` IS NULL
859
+ OR `delayed_jobs`.`locked_at` < '2025-11-10 16:59:43')
860
+ AND `delayed_jobs`.`failed_at` IS NULL
861
+ AND `delayed_jobs`.`run_at` <= '2025-11-10 17:20:13'
862
+ GROUP BY CASE WHEN priority >= 0
863
+ AND priority < 10 THEN 0 WHEN priority >= 10
864
+ AND priority < 20 THEN 10 WHEN priority >= 20
865
+ AND priority < 30 THEN 20 WHEN priority >= 30 THEN 30 END, `delayed_jobs`.`queue`
866
+ SNAP
867
+
868
+ snapshots["produces the expected mysql2 query plan for max_age 1"] = <<-SNAP
869
+ -> Table scan on <temporary>
870
+ -> Aggregate using temporary table
871
+ -> Filter: (((delayed_jobs.locked_at is null) or (delayed_jobs.locked_at < TIMESTAMP'2025-11-10 16:59:43')) and (delayed_jobs.failed_at is null) and (delayed_jobs.run_at <= TIMESTAMP'2025-11-10 17:20:13')) (cost=...)
872
+ -> Covering index lookup on delayed_jobs using idx_delayed_jobs_live (failed_at = NULL) (cost=...)
873
+ SNAP
874
+
875
+ snapshots["[legacy index] produces the expected mysql2 query plan for max_age 1"] = <<-SNAP
876
+ -> Table scan on <temporary>
877
+ -> Aggregate using temporary table
878
+ -> Filter: (((delayed_jobs.locked_at is null) or (delayed_jobs.locked_at < TIMESTAMP'2025-11-10 16:59:43')) and (delayed_jobs.failed_at is null) and (delayed_jobs.run_at <= TIMESTAMP'2025-11-10 17:20:13')) (cost=...)
879
+ -> Table scan on delayed_jobs (cost=...)
880
+ SNAP
881
+
882
+ snapshots["runs the expected mysql2 query for working_count 1"] = <<-SNAP
883
+ SELECT COUNT(*) AS count_all, CASE WHEN priority >= 0
884
+ AND priority < 10 THEN 0 WHEN priority >= 10
885
+ AND priority < 20 THEN 10 WHEN priority >= 20
886
+ AND priority < 30 THEN 20 WHEN priority >= 30 THEN 30 END AS case_when_priority_0_and_priority_10_then_0_when_priority_10_an, `delayed_jobs`.`queue` AS delayed_jobs_queue
887
+ FROM `delayed_jobs`
888
+ WHERE `delayed_jobs`.`locked_at` >= '2025-11-10 16:59:43'
889
+ AND `delayed_jobs`.`failed_at` IS NULL
890
+ AND `delayed_jobs`.`run_at` <= '2025-11-10 17:20:13'
891
+ GROUP BY CASE WHEN priority >= 0
892
+ AND priority < 10 THEN 0 WHEN priority >= 10
893
+ AND priority < 20 THEN 10 WHEN priority >= 20
894
+ AND priority < 30 THEN 20 WHEN priority >= 30 THEN 30 END, `delayed_jobs`.`queue`
895
+ SNAP
896
+
897
+ snapshots["produces the expected mysql2 query plan for working_count 1"] = <<-SNAP
898
+ -> Table scan on <temporary>
899
+ -> Aggregate using temporary table
900
+ -> Filter: ((delayed_jobs.locked_at >= TIMESTAMP'2025-11-10 16:59:43') and (delayed_jobs.failed_at is null) and (delayed_jobs.run_at <= TIMESTAMP'2025-11-10 17:20:13')) (cost=...)
901
+ -> Covering index lookup on delayed_jobs using idx_delayed_jobs_live (failed_at = NULL) (cost=...)
902
+ SNAP
903
+
904
+ snapshots["[legacy index] produces the expected mysql2 query plan for working_count 1"] = <<-SNAP
905
+ -> Table scan on <temporary>
906
+ -> Aggregate using temporary table
907
+ -> Filter: ((delayed_jobs.locked_at >= TIMESTAMP'2025-11-10 16:59:43') and (delayed_jobs.failed_at is null) and (delayed_jobs.run_at <= TIMESTAMP'2025-11-10 17:20:13')) (cost=...)
908
+ -> Table scan on delayed_jobs (cost=...)
909
+ SNAP
910
+
911
+ snapshots["runs the expected mysql2 query for workable_count 1"] = <<-SNAP
912
+ SELECT COUNT(*) AS count_all, CASE WHEN priority >= 0
913
+ AND priority < 10 THEN 0 WHEN priority >= 10
914
+ AND priority < 20 THEN 10 WHEN priority >= 20
915
+ AND priority < 30 THEN 20 WHEN priority >= 30 THEN 30 END AS case_when_priority_0_and_priority_10_then_0_when_priority_10_an, `delayed_jobs`.`queue` AS delayed_jobs_queue
916
+ FROM `delayed_jobs`
917
+ WHERE (`delayed_jobs`.`locked_at` IS NULL
918
+ OR `delayed_jobs`.`locked_at` < '2025-11-10 16:59:43')
919
+ AND `delayed_jobs`.`failed_at` IS NULL
920
+ AND `delayed_jobs`.`run_at` <= '2025-11-10 17:20:13'
921
+ GROUP BY CASE WHEN priority >= 0
922
+ AND priority < 10 THEN 0 WHEN priority >= 10
923
+ AND priority < 20 THEN 10 WHEN priority >= 20
924
+ AND priority < 30 THEN 20 WHEN priority >= 30 THEN 30 END, `delayed_jobs`.`queue`
925
+ SNAP
926
+
927
+ snapshots["produces the expected mysql2 query plan for workable_count 1"] = <<-SNAP
928
+ -> Table scan on <temporary>
929
+ -> Aggregate using temporary table
930
+ -> Filter: (((delayed_jobs.locked_at is null) or (delayed_jobs.locked_at < TIMESTAMP'2025-11-10 16:59:43')) and (delayed_jobs.failed_at is null) and (delayed_jobs.run_at <= TIMESTAMP'2025-11-10 17:20:13')) (cost=...)
931
+ -> Covering index lookup on delayed_jobs using idx_delayed_jobs_live (failed_at = NULL) (cost=...)
932
+ SNAP
933
+
934
+ snapshots["[legacy index] produces the expected mysql2 query plan for workable_count 1"] = <<-SNAP
935
+ -> Table scan on <temporary>
936
+ -> Aggregate using temporary table
937
+ -> Filter: (((delayed_jobs.locked_at is null) or (delayed_jobs.locked_at < TIMESTAMP'2025-11-10 16:59:43')) and (delayed_jobs.failed_at is null) and (delayed_jobs.run_at <= TIMESTAMP'2025-11-10 17:20:13')) (cost=...)
938
+ -> Table scan on delayed_jobs (cost=...)
939
+ SNAP
940
+
941
+ snapshots["runs the expected mysql2 query for alert_age_percent 1"] = <<-SNAP
942
+ SELECT (CASE WHEN priority >= 0
943
+ AND priority < 10 THEN 0 WHEN priority >= 10
944
+ AND priority < 20 THEN 10 WHEN priority >= 20
945
+ AND priority < 30 THEN 20 WHEN priority >= 30 THEN 30 END) AS priority, queue, MIN(run_at) AS run_at
946
+ FROM `delayed_jobs`
947
+ WHERE (`delayed_jobs`.`locked_at` IS NULL
948
+ OR `delayed_jobs`.`locked_at` < '2025-11-10 16:59:43')
949
+ AND `delayed_jobs`.`failed_at` IS NULL
950
+ AND `delayed_jobs`.`run_at` <= '2025-11-10 17:20:13'
951
+ GROUP BY CASE WHEN priority >= 0
952
+ AND priority < 10 THEN 0 WHEN priority >= 10
953
+ AND priority < 20 THEN 10 WHEN priority >= 20
954
+ AND priority < 30 THEN 20 WHEN priority >= 30 THEN 30 END, `delayed_jobs`.`queue`
955
+ SNAP
956
+
957
+ snapshots["produces the expected mysql2 query plan for alert_age_percent 1"] = <<-SNAP
958
+ -> Table scan on <temporary>
959
+ -> Aggregate using temporary table
960
+ -> Filter: (((delayed_jobs.locked_at is null) or (delayed_jobs.locked_at < TIMESTAMP'2025-11-10 16:59:43')) and (delayed_jobs.failed_at is null) and (delayed_jobs.run_at <= TIMESTAMP'2025-11-10 17:20:13')) (cost=...)
961
+ -> Covering index lookup on delayed_jobs using idx_delayed_jobs_live (failed_at = NULL) (cost=...)
962
+ SNAP
963
+
964
+ snapshots["[legacy index] produces the expected mysql2 query plan for alert_age_percent 1"] = <<-SNAP
965
+ -> Table scan on <temporary>
966
+ -> Aggregate using temporary table
967
+ -> Filter: (((delayed_jobs.locked_at is null) or (delayed_jobs.locked_at < TIMESTAMP'2025-11-10 16:59:43')) and (delayed_jobs.failed_at is null) and (delayed_jobs.run_at <= TIMESTAMP'2025-11-10 17:20:13')) (cost=...)
968
+ -> Table scan on delayed_jobs (cost=...)
969
+ SNAP