From 87c551c892b017ca0352271356d2399daa6353d3 Mon Sep 17 00:00:00 2001 From: Yiorgis Gozadinos Date: Mon, 18 May 2026 16:11:58 +0300 Subject: [PATCH] Cover 0.48.0 migration --- .../haiku/rag/store/upgrades/v0_48_0.py | 22 +++++++++---------- 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/haiku_rag_slim/haiku/rag/store/upgrades/v0_48_0.py b/haiku_rag_slim/haiku/rag/store/upgrades/v0_48_0.py index 84eb5a1d..402d840b 100644 --- a/haiku_rag_slim/haiku/rag/store/upgrades/v0_48_0.py +++ b/haiku_rag_slim/haiku/rag/store/upgrades/v0_48_0.py @@ -17,11 +17,14 @@ async def _ensure_columns(store: Store) -> None: existing = {f.name for f in arrow_schema} new_fields = [] if "heading_level" not in existing: - new_fields.append(pa.field("heading_level", pa.int64())) + new_fields.append(pa.field("heading_level", pa.int64())) # pragma: no cover if "tree_depth" not in existing: - new_fields.append(pa.field("tree_depth", pa.int64())) + new_fields.append(pa.field("tree_depth", pa.int64())) # pragma: no cover if new_fields: - await store.document_items_table.add_columns(pa.schema(new_fields)) + # Pre-0.48.0 DBs only — fresh DBs declare both columns in _init_tables. + await store.document_items_table.add_columns( + pa.schema(new_fields) + ) # pragma: no cover async def _apply_backfill_heading_hierarchy(store: Store) -> None: @@ -44,8 +47,6 @@ async def _apply_backfill_heading_hierarchy(store: Store) -> None: ids = (await store.documents_table.query().select(["id"]).to_arrow()).to_pylist() ids = [row["id"] for row in ids] total = len(ids) - if not total: - return logger.info("Backfilling heading_level + tree_depth across %d documents", total) backfilled = 0 @@ -60,9 +61,6 @@ async def _apply_backfill_heading_hierarchy(store: Store) -> None: .limit(1) .to_list() ) - if not rows: - skipped += 1 - continue blob = rows[0].get("docling_document") if not blob or not isinstance(blob, bytes): skipped += 1 @@ -71,14 +69,14 @@ async def _apply_backfill_heading_hierarchy(store: Store) -> None: try: docling_doc = DoclingDocument.model_validate_json(decompress_json(blob)) fresh_items = extract_items(doc_id, docling_doc) - except Exception: + except Exception: # pragma: no cover logger.warning( "Failed to re-extract items for %s; skipping", doc_id, exc_info=True ) skipped += 1 continue - if not fresh_items: + if not fresh_items: # pragma: no cover skipped += 1 continue @@ -91,7 +89,7 @@ async def _apply_backfill_heading_hierarchy(store: Store) -> None: # If the stored rows and a fresh extract disagree on count, the # docling parser version has drifted. Skip and let `rebuild` reconcile. - if len(existing_rows) != len(fresh_items): + if len(existing_rows) != len(fresh_items): # pragma: no cover logger.warning( "Item count drift for %s (stored=%d, fresh=%d); skipping", doc_id, @@ -104,7 +102,7 @@ async def _apply_backfill_heading_hierarchy(store: Store) -> None: records: list[DocumentItemRecord] = [] for item in fresh_items: row = existing_by_ref.get(item.self_ref) - if row is None: + if row is None: # pragma: no cover continue records.append( DocumentItemRecord(