mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-07 10:14:46 -04:00
Fix #2445 (Fix bug in new get_item_id() db lookup. Names in the authors table …)
This commit is contained in:
parent
8c433aaba5
commit
ad9a66cc1e
@ -65,9 +65,11 @@ class Table:
|
|||||||
'datetime': c_parse,
|
'datetime': c_parse,
|
||||||
'bool': bool
|
'bool': bool
|
||||||
}.get(dt)
|
}.get(dt)
|
||||||
|
self.serialize = None
|
||||||
if name == 'authors':
|
if name == 'authors':
|
||||||
# Legacy
|
# Legacy
|
||||||
self.unserialize = lambda x: x.replace('|', ',') if x else ''
|
self.unserialize = lambda x: x.replace('|', ',') if x else ''
|
||||||
|
self.serialize = lambda x: x.replace(',', '|')
|
||||||
self.link_table = (link_table if link_table else
|
self.link_table = (link_table if link_table else
|
||||||
'books_%s_link'%self.metadata['table'])
|
'books_%s_link'%self.metadata['table'])
|
||||||
if self.supports_notes and dt == 'rating': # custom ratings table
|
if self.supports_notes and dt == 'rating': # custom ratings table
|
||||||
@ -268,12 +270,16 @@ class ManyToOneTable(Table):
|
|||||||
item_names = tuple(item_names)
|
item_names = tuple(item_names)
|
||||||
if case_sensitive:
|
if case_sensitive:
|
||||||
colname = self.metadata['column']
|
colname = self.metadata['column']
|
||||||
|
serialized_names = tuple(map(self.serialize, item_names)) if self.serialize else item_names
|
||||||
if len(item_names) == 1:
|
if len(item_names) == 1:
|
||||||
iid = db.get(f'SELECT id FROM {self.metadata["table"]} WHERE {colname} = ?', ((item_names[0],)), all=False)
|
iid = db.get(f'SELECT id FROM {self.metadata["table"]} WHERE {colname} = ?', ((serialized_names[0],)), all=False)
|
||||||
return {item_names[0]: iid}
|
return {item_names[0]: iid}
|
||||||
inq = ('?,' * len(item_names))[:-1]
|
inq = ('?,' * len(item_names))[:-1]
|
||||||
ans = dict.fromkeys(item_names)
|
ans = dict.fromkeys(item_names)
|
||||||
ans.update(db.get(f'SELECT {colname}, id FROM {self.metadata["table"]} WHERE {colname} IN ({inq})', item_names))
|
res = db.get(f'SELECT {colname}, id FROM {self.metadata["table"]} WHERE {colname} IN ({inq})', serialized_names)
|
||||||
|
if self.unserialize:
|
||||||
|
res = ((self.unserialize(name), iid) for name, iid in res)
|
||||||
|
ans.update(res)
|
||||||
return ans
|
return ans
|
||||||
if len(item_names) == 1:
|
if len(item_names) == 1:
|
||||||
q = icu_lower(item_names[0])
|
q = icu_lower(item_names[0])
|
||||||
|
Loading…
x
Reference in New Issue
Block a user