@@ -40,21 +40,48 @@ SELECT '2025-09-23-11:02:14-04:00'::timestamp
40
40
statement ok
41
41
INSERT INTO system.jobs (id, owner, status, job_type)
42
42
VALUES (555, 'testuser', 'failed', 'INSPECT');
43
- INSERT INTO system.job_info (job_id, info_key)
44
- VALUES (555, 'legacy_payload');
43
+ INSERT INTO system.job_info (job_id, info_key, value)
44
+ VALUES (
45
+ 555,
46
+ 'legacy_payload',
47
+ crdb_internal.json_to_pb(
48
+ 'cockroach.sql.jobs.jobspb.Payload',
49
+ json_build_object(
50
+ 'inspectDetails', json_build_object(
51
+ 'checks', json_build_array(
52
+ json_build_object('tableId', $foo_table_id),
53
+ json_build_object('tableId', $bar_table_id)
54
+ )
55
+ )
56
+ )
57
+ )
58
+ );
45
59
46
60
skipif config local-mixed-25.2 local-mixed-25.3
47
61
statement ok
48
62
INSERT INTO system.inspect_errors (job_id, error_type, aost, database_id, schema_id, id, details)
49
- VALUES
63
+ VALUES
50
64
(555, '555_foo', '$aost', $database_id, $schema_id, $foo_table_id, '{"detail":"555\"foo"}'),
51
65
(555, '555_bar', '$aost', $database_id, $schema_id, $bar_table_id, '{"detail":"555\"bar"}');
52
66
53
67
statement ok
54
68
INSERT INTO system.jobs (id, owner, status, job_type)
55
69
VALUES (666, 'testuser', 'failed', 'INSPECT');
56
- INSERT INTO system.job_info (job_id, info_key)
57
- VALUES (666, 'legacy_payload');
70
+ INSERT INTO system.job_info (job_id, info_key, value)
71
+ VALUES (
72
+ 666,
73
+ 'legacy_payload',
74
+ crdb_internal.json_to_pb(
75
+ 'cockroach.sql.jobs.jobspb.Payload',
76
+ json_build_object(
77
+ 'inspectDetails', json_build_object(
78
+ 'checks', json_build_array(
79
+ json_build_object('tableId', $foo_table_id)
80
+ )
81
+ )
82
+ )
83
+ )
84
+ );
58
85
59
86
skipif config local-mixed-25.2 local-mixed-25.3
60
87
statement ok
@@ -64,8 +91,21 @@ VALUES (666, '666_foo', '$aost', $database_id, $schema_id, $foo_table_id, '{"det
64
91
statement ok
65
92
INSERT INTO system.jobs (id, owner, status, job_type)
66
93
VALUES (777, 'testuser', 'running', 'INSPECT');
67
- INSERT INTO system.job_info (job_id, info_key)
68
- VALUES (777, 'legacy_payload');
94
+ INSERT INTO system.job_info (job_id, info_key, value)
95
+ VALUES (
96
+ 777,
97
+ 'legacy_payload',
98
+ crdb_internal.json_to_pb(
99
+ 'cockroach.sql.jobs.jobspb.Payload',
100
+ json_build_object(
101
+ 'inspectDetails', json_build_object(
102
+ 'checks', json_build_array(
103
+ json_build_object('tableId', $foo_table_id)
104
+ )
105
+ )
106
+ )
107
+ )
108
+ );
69
109
70
110
skipif config local-mixed-25.2 local-mixed-25.3
71
111
statement ok
@@ -140,3 +180,93 @@ error_type database_name schema_name table_name primary_key job_id aost
140
180
555_foo test public foo NULL 555 2025-09-23 04:00:00.000000 {
141
181
"detail": "555\"foo"
142
182
}
183
+
184
+ # Test SHOW selects the most recent job for a table even if it has no errors.
185
+ subtest show_after_clean_inspect
186
+
187
+ user root
188
+
189
+ # Job 888 inspects foo (payload check) but finds no errors (no inspect_errors
190
+ # records).
191
+ statement ok
192
+ INSERT INTO system.jobs (id, owner, status, job_type)
193
+ VALUES (888, 'testuser', 'succeeded', 'INSPECT');
194
+ INSERT INTO system.job_info (job_id, info_key, value)
195
+ VALUES (
196
+ 888,
197
+ 'legacy_payload',
198
+ crdb_internal.json_to_pb(
199
+ 'cockroach.sql.jobs.jobspb.Payload',
200
+ json_build_object(
201
+ 'inspectDetails', json_build_object(
202
+ 'checks', json_build_array(
203
+ json_build_object('tableId', $foo_table_id)
204
+ )
205
+ )
206
+ )
207
+ )
208
+ );
209
+
210
+ # No errors inserted for job 888 - it inspected foo but found no problems.
211
+
212
+ user testuser
213
+
214
+ # Now query for foo errors without specifying a job.
215
+ # Even though job 666 has errors for foo, job 888 is the most recent completed job
216
+ # that inspected foo, so we should get no results.
217
+ skipif config local-mixed-25.2 local-mixed-25.3
218
+ query TTTTTIT
219
+ SHOW INSPECT ERRORS FOR TABLE foo
220
+ ----
221
+
222
+ # Verify we can still get job 666's errors by specifying the job explicitly.
223
+ skipif config local-mixed-25.2 local-mixed-25.3
224
+ query TTTTTIT
225
+ SHOW INSPECT ERRORS FOR TABLE foo FOR JOB 666
226
+ ----
227
+ 666_foo test public foo NULL 666 2025-09-23 04:00:00.000000
228
+
229
+ subtest end
230
+
231
+ # Verify the SHOW query works if an INSPECT job is created with empty checks.
232
+ subtest empty_checks_array
233
+
234
+ user root
235
+
236
+ # Job 999 has an empty checks array in its payload.
237
+ statement ok
238
+ INSERT INTO system.jobs (id, owner, status, job_type)
239
+ VALUES (999, 'testuser', 'succeeded', 'INSPECT');
240
+ INSERT INTO system.job_info (job_id, info_key, value)
241
+ VALUES (
242
+ 999,
243
+ 'legacy_payload',
244
+ crdb_internal.json_to_pb(
245
+ 'cockroach.sql.jobs.jobspb.Payload',
246
+ json_build_object(
247
+ 'inspectDetails', json_build_object(
248
+ 'checks', json_build_array()
249
+ )
250
+ )
251
+ )
252
+ );
253
+
254
+ user testuser
255
+
256
+ skipif config local-mixed-25.2 local-mixed-25.3
257
+ query TTTTTIT
258
+ SHOW INSPECT ERRORS FOR TABLE foo
259
+ ----
260
+
261
+ skipif config local-mixed-25.2 local-mixed-25.3
262
+ query TTTTTIT
263
+ SHOW INSPECT ERRORS FOR TABLE bar
264
+ ----
265
+ 555_bar test public bar NULL 555 2025-09-23 04:00:00.000000
266
+
267
+ skipif config local-mixed-25.2 local-mixed-25.3
268
+ query TTTTTIT
269
+ SHOW INSPECT ERRORS FOR JOB 999
270
+ ----
271
+
272
+ subtest end
0 commit comments