Vito
11422d4584
perf(images): read prompt links in one SQLite step ( #354 ) ( #418 )
...
* perf(images): read prompt links in one SQLite step (#354 )
get_image_link_matches streamed one sqlite3_step per linked row, and
Python's sqlite3 releases and retakes the GIL around every step. While
ComfyUI generates, each retake waits on the busy thread, so the
first-page link read of the workspace Images page stretched from tens of
milliseconds to seconds.
SQLite now returns the unchanged filter SELECT's rows as one JSON value
(json_group_array), decoded with json.loads: a constant two or three GIL
hand-backs instead of one per row. Nothing is cached. Any
OperationalError from the wrapped statement, or a BLOB file_path or
rating, makes that read stream as before with one warning per process; a
missing JSON function stops the attempt for the rest of the process.
tests/test_database_link_matches.py proves the result equals the
streamed read on every filter combination and on NULL ratings, quoted,
backslashed, non-ASCII and multi-line paths, ambiguous and pair links,
an empty database and both fallbacks; the structural budget test also
checks the wrapped query plan.
* fix(images): keep the maintenance link reader, refine the one-step fallback (#354 )
The one-step reader was named _link_rows, which shadowed
MaintenanceOperations._link_rows on PromptDatabase and broke the Missing
links preview and apply; it is now _one_step_link_rows, and a test pins
that the maintenance reader is not shadowed.
An interrupted read (Move library retiring the connection) is raised as
before instead of falling back and spending the one warning; a JSON text
over SQLite's length limit (DataError) streams like the other value
failures. The equivalence test compares value types per path rather than
by row order, and a test checks that the read leaves no WAL snapshot
pinned.
* docs(testing): name every one-step link read fallback (#354 )
2026-10-28 16:00:15 +00:00
..
2026-10-28 15:29:41 +00:00
2026-10-28 15:29:41 +00:00
2026-10-17 13:14:02 -07:00
2026-10-28 15:29:41 +00:00
2026-10-28 13:31:23 +00:00
2026-10-28 15:29:41 +00:00
2026-02-07 08:30:09 -08:00
2026-10-27 02:15:23 -07:00
2026-10-28 05:18:00 +00:00
2026-10-25 18:25:20 -07:00
2026-10-17 23:26:37 -07:00
2026-10-22 10:36:58 -07:00
2026-10-19 17:26:37 -07:00
2026-10-27 16:56:37 +00:00
2026-10-23 11:09:12 -07:00
2026-10-22 21:39:01 -07:00
2026-10-08 18:53:11 -07:00
2026-10-23 11:09:12 -07:00
2026-10-28 05:18:00 +00:00
2026-10-26 21:21:33 -07:00
2026-10-27 16:56:37 +00:00
2026-10-27 20:30:54 +00:00
2026-10-27 22:07:59 +00:00
2026-10-28 00:32:30 +00:00
2026-10-27 22:40:57 +00:00
2026-10-27 00:20:13 -07:00
2026-10-28 05:18:00 +00:00
2026-10-28 11:25:20 +00:00
2026-10-28 00:32:30 +00:00
2026-10-17 08:00:42 -07:00
2026-10-27 06:19:39 -07:00
2026-10-28 05:18:00 +00:00
2026-10-28 05:18:00 +00:00
2026-10-28 13:29:29 +00:00
2026-10-28 05:18:00 +00:00
2026-10-28 15:29:41 +00:00
2026-10-28 05:18:00 +00:00
2026-10-24 12:54:09 -07:00
2026-10-26 21:21:33 -07:00
2026-10-28 09:06:15 +00:00
2026-10-27 06:19:39 -07:00
2026-10-28 05:18:00 +00:00
2026-10-25 10:17:07 -07:00
2026-10-17 08:00:42 -07:00
2026-10-27 16:56:37 +00:00
2026-10-28 05:18:00 +00:00
2026-10-23 18:07:14 -07:00
2026-10-28 07:22:48 +00:00
2026-10-22 07:19:53 -07:00
2026-10-24 06:50:53 -07:00
2026-10-28 16:00:15 +00:00
2026-10-28 05:18:00 +00:00
2026-10-27 20:30:54 +00:00
2026-10-27 20:30:54 +00:00
2026-10-27 22:40:57 +00:00
2026-10-27 20:30:54 +00:00
2026-10-17 23:26:37 -07:00
2026-10-27 17:45:24 +00:00
2026-10-27 17:45:24 +00:00
2026-10-26 21:21:33 -07:00
2026-10-27 17:45:24 +00:00
2026-10-23 11:09:12 -07:00
2026-10-08 18:53:11 -07:00
2026-10-22 21:39:01 -07:00
2026-10-27 03:26:34 -07:00
2026-10-27 20:30:54 +00:00
2026-10-19 11:10:47 -07:00
2026-10-23 04:59:18 -07:00
2026-10-28 16:00:15 +00:00
2026-10-22 07:19:53 -07:00
2026-10-27 22:40:57 +00:00
2026-10-17 16:42:07 -07:00
2026-10-25 10:17:07 -07:00
2026-10-28 15:29:41 +00:00
2026-10-08 18:53:11 -07:00
2026-10-17 23:26:37 -07:00
2026-10-17 23:26:37 -07:00
2026-10-19 11:10:47 -07:00
2026-10-17 19:51:22 -07:00
2026-10-17 19:51:22 -07:00
2026-10-17 23:26:37 -07:00
2026-10-17 19:51:22 -07:00
2026-10-19 11:10:47 -07:00
2026-10-17 16:42:07 -07:00
2026-10-27 16:35:01 +00:00
2026-10-25 10:17:07 -07:00
2026-10-28 05:18:00 +00:00
2026-10-17 23:26:37 -07:00
2026-10-19 11:10:47 -07:00
2026-10-17 23:26:37 -07:00
2026-10-27 16:35:01 +00:00
2026-10-17 23:26:37 -07:00
2026-10-28 05:18:00 +00:00
2026-10-17 23:26:37 -07:00
2026-10-28 10:15:28 +00:00
2026-10-28 03:48:11 +00:00
2026-10-17 16:42:07 -07:00
2026-10-17 05:31:24 -07:00
2026-10-26 16:14:50 -07:00
2026-10-23 13:15:06 -07:00
2026-10-19 20:56:51 -07:00
2026-10-19 20:56:51 -07:00
2026-10-25 18:25:20 -07:00
2026-10-27 02:15:23 -07:00
2026-10-21 04:18:28 -07:00
2026-10-18 17:17:05 -07:00
2026-10-21 02:25:25 -07:00
2026-10-17 23:26:37 -07:00
2026-10-21 10:55:35 -07:00
2026-10-28 15:29:41 +00:00
2026-10-21 09:10:18 -07:00
2026-10-27 02:15:23 -07:00
2026-10-27 04:22:27 -07:00
2026-10-26 21:21:33 -07:00
2026-10-27 22:20:27 +00:00
2026-10-24 12:54:09 -07:00
2026-10-27 04:22:27 -07:00
2026-10-19 09:54:29 -07:00
2026-10-23 11:09:12 -07:00
2026-10-21 10:55:35 -07:00
2026-10-21 04:18:28 -07:00
2026-10-19 09:54:29 -07:00
2026-10-22 10:36:58 -07:00
2026-10-27 16:56:37 +00:00
2026-10-27 22:40:57 +00:00
2026-10-25 10:17:07 -07:00
2026-10-23 16:58:06 -07:00
2026-10-28 03:54:55 +00:00
2026-10-27 16:56:37 +00:00
2026-10-24 12:54:09 -07:00
2026-10-24 12:54:09 -07:00
2026-10-27 02:15:23 -07:00
2026-10-24 12:54:09 -07:00
2026-10-18 20:03:15 -07:00
2026-10-23 14:19:11 -07:00
2026-10-27 16:56:37 +00:00
2026-10-08 18:53:11 -07:00
2026-10-27 05:00:55 -07:00
2026-10-27 05:00:55 -07:00
2026-10-27 05:00:55 -07:00
2026-10-27 05:00:55 -07:00
2026-10-24 05:28:44 -07:00
2026-10-24 20:39:08 -07:00
2026-10-23 14:19:11 -07:00
2026-02-07 12:36:11 -08:00
2026-10-22 10:36:58 -07:00
2026-10-26 21:21:33 -07:00
2026-10-07 13:52:09 -07:00
2026-10-27 02:15:23 -07:00
2026-10-17 08:00:42 -07:00
2026-10-27 02:53:02 -07:00
2026-10-26 22:23:06 -07:00
2026-10-17 08:00:42 -07:00
2026-10-17 19:51:22 -07:00
2026-10-21 10:55:35 -07:00
2026-10-23 14:19:11 -07:00
2026-10-17 08:00:42 -07:00
2026-10-17 08:00:42 -07:00
2026-10-28 00:32:30 +00:00
2026-10-23 14:19:11 -07:00
2026-10-22 07:19:53 -07:00
2026-10-17 08:00:42 -07:00
2026-10-17 08:00:42 -07:00
2026-10-08 18:53:11 -07:00
2026-10-27 02:15:23 -07:00
2026-10-17 06:47:46 -07:00
2026-10-17 19:51:22 -07:00
2026-10-27 16:56:37 +00:00
2026-10-18 20:03:15 -07:00
2026-10-27 02:15:23 -07:00
2026-10-08 18:53:11 -07:00
2026-10-17 16:42:07 -07:00
2026-10-28 13:29:29 +00:00
2026-10-27 16:56:37 +00:00
2026-10-27 16:56:37 +00:00
2026-10-27 16:56:37 +00:00
2026-10-25 10:17:07 -07:00
2026-10-26 07:35:21 -07:00
2026-10-28 03:48:11 +00:00
2026-10-25 10:17:07 -07:00
2026-10-23 18:07:14 -07:00
2026-10-27 02:15:23 -07:00
2026-10-28 07:22:48 +00:00
2026-10-27 02:15:23 -07:00
2026-10-28 07:22:48 +00:00
2026-10-27 20:30:54 +00:00
2026-10-27 02:15:23 -07:00
2026-10-28 13:29:29 +00:00
2026-10-26 21:21:33 -07:00
2026-10-28 00:32:30 +00:00
2026-10-21 09:10:18 -07:00
2026-10-23 14:19:11 -07:00
2026-10-08 18:53:11 -07:00
2026-10-27 03:26:34 -07:00
2026-10-08 18:53:11 -07:00
2026-10-17 06:47:46 -07:00
2026-10-25 10:17:07 -07:00
2026-10-28 03:48:11 +00:00
2026-10-26 11:46:54 -07:00
2026-10-24 21:00:30 -07:00
2026-10-24 21:00:30 -07:00
2026-10-26 11:46:54 -07:00
2026-10-24 21:00:30 -07:00
2026-10-27 02:15:23 -07:00
2026-10-08 18:53:11 -07:00
2026-10-28 09:06:15 +00:00
2026-10-08 18:53:11 -07:00
2026-10-22 10:21:02 -07:00
2026-10-08 18:53:11 -07:00
2026-10-22 07:19:53 -07:00
2026-10-24 06:50:53 -07:00
2026-10-24 06:50:53 -07:00
2026-10-24 06:50:53 -07:00
2026-10-24 06:50:53 -07:00
2026-10-23 01:58:02 -07:00
2026-10-28 06:16:57 +00:00
2026-10-27 16:56:37 +00:00