Add caching of tag synonyms.
This commit is contained in:
parent
c6b71f1a0d
commit
c736c33165
1 changed files with 16 additions and 3 deletions
|
@ -1157,6 +1157,7 @@ class Tag(ObjectBase, GroupableMixin):
|
|||
|
||||
self.group_getter = self.photodb.get_tag
|
||||
self.group_getter_many = self.photodb.get_tags_by_id
|
||||
self._cached_synonyms = None
|
||||
|
||||
def __eq__(self, other):
|
||||
return self.name == other or ObjectBase.__eq__(self, other)
|
||||
|
@ -1232,6 +1233,9 @@ class Tag(ObjectBase, GroupableMixin):
|
|||
}
|
||||
self.photodb.sql_insert(table='tag_synonyms', data=data)
|
||||
|
||||
if self._cached_synonyms is not None:
|
||||
self._cached_synonyms.add(synname)
|
||||
|
||||
if commit:
|
||||
self.photodb.log.debug('Committing - add synonym')
|
||||
self.photodb.commit()
|
||||
|
@ -1255,10 +1259,13 @@ class Tag(ObjectBase, GroupableMixin):
|
|||
|
||||
# Migrate the old tag's synonyms to the new one
|
||||
# UPDATE is safe for this operation because there is no chance of duplicates.
|
||||
my_synonyms = self.get_synonyms()
|
||||
data = {
|
||||
'mastername': (self.name, mastertag.name),
|
||||
}
|
||||
self.photodb.sql_update(table='tag_synonyms', pairs=data, where_key='mastername')
|
||||
if mastertag._cached_synonyms is not None:
|
||||
mastertag._cached_synonyms.update(my_synonyms)
|
||||
|
||||
# Because these were two separate tags, perhaps in separate trees, it
|
||||
# is possible for a photo to have both at the moment.
|
||||
|
@ -1340,13 +1347,16 @@ class Tag(ObjectBase, GroupableMixin):
|
|||
self.photodb.commit()
|
||||
|
||||
def get_synonyms(self):
|
||||
if self._cached_synonyms is not None:
|
||||
return self._cached_synonyms.copy()
|
||||
|
||||
syn_rows = self.photodb.sql_select(
|
||||
'SELECT name FROM tag_synonyms WHERE mastername == ?',
|
||||
[self.name]
|
||||
)
|
||||
syn_names = [row[0] for row in syn_rows]
|
||||
syn_names.sort()
|
||||
return syn_names
|
||||
synonyms = set(row[0] for row in syn_rows)
|
||||
self._cached_synonyms = synonyms.copy()
|
||||
return synonyms
|
||||
|
||||
@decorators.required_feature('tag.edit')
|
||||
# GroupableMixin.join_group already has @transaction.
|
||||
|
@ -1413,6 +1423,9 @@ class Tag(ObjectBase, GroupableMixin):
|
|||
|
||||
self.photodb._cached_frozen_children = None
|
||||
self.photodb.sql_delete(table='tag_synonyms', pairs={'name': synname})
|
||||
if self._cached_synonyms is not None:
|
||||
self._cached_synonyms.remove(synname)
|
||||
|
||||
if commit:
|
||||
self.photodb.log.debug('Committing - remove synonym')
|
||||
self.photodb.commit()
|
||||
|
|
Loading…
Reference in a new issue