From 4e878b14cc614bc6c6506c706fb1745b052e562f Mon Sep 17 00:00:00 2001 From: un-pogaz <46523284+un-pogaz@users.noreply.github.com> Date: Fri, 22 Sep 2023 10:19:43 +0200 Subject: [PATCH] Add retrieve all item_id for each field assosiated to a notes --- src/calibre/db/backend.py | 3 +++ src/calibre/db/cache.py | 4 ++++ src/calibre/db/notes/connect.py | 8 ++++++++ 3 files changed, 15 insertions(+) diff --git a/src/calibre/db/backend.py b/src/calibre/db/backend.py index dab117d743..bb4b39267b 100644 --- a/src/calibre/db/backend.py +++ b/src/calibre/db/backend.py @@ -975,6 +975,9 @@ class DB: def notes_data_for(self, field_name, item_id): return self.notes.get_note_data(self.conn, field_name, item_id) + def get_notes_id_map(self): + return self.notes.get_note_id_map(self.conn) + def set_notes_for(self, field, item_id, doc: str, searchable_text: str, resource_hashes, remove_unused_resources) -> int: id_val = self.tables[field].id_map[item_id] note_id = self.notes.set_note(self.conn, field, item_id, id_val, doc, resource_hashes, searchable_text) diff --git a/src/calibre/db/cache.py b/src/calibre/db/cache.py index e60ea7c32d..ea7c5790d3 100644 --- a/src/calibre/db/cache.py +++ b/src/calibre/db/cache.py @@ -686,6 +686,10 @@ class Cache: ' Return all notes data as a dict or None if note does not exist ' return self.backend.notes_data_for(field, item_id) + def get_notes_id_map(self) -> dict: + ' Return all item_id for each field assosiated to a notes. ' + return self.backend.get_notes_id_map() + @read_api def field_supports_notes(self, field) -> bool: ' Return True iff the specified field supports notes ' diff --git a/src/calibre/db/notes/connect.py b/src/calibre/db/notes/connect.py index 2bcfb76d6f..558a25b85f 100644 --- a/src/calibre/db/notes/connect.py +++ b/src/calibre/db/notes/connect.py @@ -269,6 +269,14 @@ class Notes: 'resource_hashes': frozenset(self.resources_used_by(conn, note_id)), } + def get_note_id_map(self, conn): + rslt = {} + for (note_id, field_name) in conn.execute('SELECT id,colname FROM notes_db.notes'): + if field_name not in rslt: + rslt[field_name] = [] + rslt[field_name].append(note_id) + return rslt + def rename_note(self, conn, field_name, old_item_id, new_item_id, new_item_value): note_id = self.note_id_for(conn, field_name, old_item_id) if note_id is None: