bugfix: subquery-wrap pending chapters query so DISTINCT + ORDER BY agree (0.26.1)
PG rejects `SELECT DISTINCT c.id, c.manga_id, cs.source_url ... ORDER BY c.manga_id, c.created_at` because the ORDER BY references a column not in the DISTINCT projection. Wrap the DISTINCT in a subquery (which includes created_at) and apply the ORDER BY in the outer SELECT. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2
backend/Cargo.lock
generated
2
backend/Cargo.lock
generated
@@ -1448,7 +1448,7 @@ checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "mangalord"
|
name = "mangalord"
|
||||||
version = "0.26.0"
|
version = "0.26.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"argon2",
|
"argon2",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "mangalord"
|
name = "mangalord"
|
||||||
version = "0.26.0"
|
version = "0.26.1"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
default-run = "mangalord"
|
default-run = "mangalord"
|
||||||
|
|
||||||
|
|||||||
@@ -424,16 +424,25 @@ async fn sync_bookmarked_chapter_content(
|
|||||||
workers: usize,
|
workers: usize,
|
||||||
force_refetch: bool,
|
force_refetch: bool,
|
||||||
) -> anyhow::Result<()> {
|
) -> anyhow::Result<()> {
|
||||||
|
// Subquery first so DISTINCT collapses multi-user bookmark rows
|
||||||
|
// without forcing every ORDER BY column into the SELECT list (PG
|
||||||
|
// rejects `ORDER BY c.created_at` against `SELECT DISTINCT c.id,
|
||||||
|
// c.manga_id, cs.source_url` with "ORDER BY expressions must
|
||||||
|
// appear in select list"). Outer ORDER BY then groups chapters by
|
||||||
|
// their manga, oldest first, so backfills proceed in reading
|
||||||
|
// order per manga.
|
||||||
let pending: Vec<(Uuid, Uuid, String)> = sqlx::query_as(
|
let pending: Vec<(Uuid, Uuid, String)> = sqlx::query_as(
|
||||||
r#"
|
r#"
|
||||||
SELECT DISTINCT c.id, c.manga_id, cs.source_url
|
SELECT id, manga_id, source_url FROM (
|
||||||
|
SELECT DISTINCT c.id, c.manga_id, c.created_at, cs.source_url
|
||||||
FROM chapters c
|
FROM chapters c
|
||||||
JOIN bookmarks b ON b.manga_id = c.manga_id
|
JOIN bookmarks b ON b.manga_id = c.manga_id
|
||||||
JOIN chapter_sources cs ON cs.chapter_id = c.id
|
JOIN chapter_sources cs ON cs.chapter_id = c.id
|
||||||
WHERE cs.source_id = $1
|
WHERE cs.source_id = $1
|
||||||
AND cs.dropped_at IS NULL
|
AND cs.dropped_at IS NULL
|
||||||
AND (c.page_count = 0 OR $2)
|
AND (c.page_count = 0 OR $2)
|
||||||
ORDER BY c.manga_id, c.created_at ASC
|
) sub
|
||||||
|
ORDER BY manga_id, created_at ASC
|
||||||
"#,
|
"#,
|
||||||
)
|
)
|
||||||
.bind(source_id)
|
.bind(source_id)
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "mangalord-frontend",
|
"name": "mangalord-frontend",
|
||||||
"version": "0.26.0",
|
"version": "0.26.1",
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|||||||
Reference in New Issue
Block a user