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