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