From 6d649616ca825063079b2045b204669a8a4ccc4b Mon Sep 17 00:00:00 2001 From: lichenblankie Date: Thu, 26 Mar 2026 11:24:01 -0700 Subject: [PATCH] fixed index_url page_id mismatch lastrowid returns 0 when ON CONFLICT DO UPDATE fires on an existing row, causing links to not be cleaned up or associated correctly on re-index. Now fetches the actual row ID with a SELECT after upsert. Also adds try/finally for connection safety. --- db.py | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/db.py b/db.py index b26a86a..7d038e7 100644 --- a/db.py +++ b/db.py @@ -249,18 +249,20 @@ def index_url(url, note=""): url = clean_url(url) title, body, links = fetch_page(url) db = get_db() - cur = db.execute( - "INSERT INTO pages (url, title, body, note) VALUES (?, ?, ?, ?) " - "ON CONFLICT(url) DO UPDATE SET title=excluded.title, body=excluded.body, note=excluded.note", - (url, title, body, note), - ) - page_id = cur.lastrowid - db.execute("DELETE FROM links WHERE page_id = ?", (page_id,)) - for href, label in links: + try: db.execute( - "INSERT INTO links (page_id, url, label) VALUES (?, ?, ?)", - (page_id, href, label), + "INSERT INTO pages (url, title, body, note) VALUES (?, ?, ?, ?) " + "ON CONFLICT(url) DO UPDATE SET title=excluded.title, body=excluded.body, note=excluded.note", + (url, title, body, note), ) - db.commit() - db.close() + page_id = db.execute("SELECT id FROM pages WHERE url = ?", (url,)).fetchone()[0] + db.execute("DELETE FROM links WHERE page_id = ?", (page_id,)) + for href, label in links: + db.execute( + "INSERT INTO links (page_id, url, label) VALUES (?, ?, ?)", + (page_id, href, label), + ) + db.commit() + finally: + db.close() return title