Add created timestamp column to the rel tables.
Could open new possibilities for tracking, ranking, or just curiosity.
This commit is contained in:
		
							parent
							
								
									172a539f24
								
							
						
					
					
						commit
						35dbdd27cf
					
				
					 3 changed files with 137 additions and 10 deletions
				
			
		|  | @ -41,7 +41,7 @@ ffmpeg = _load_ffmpeg() | ||||||
| 
 | 
 | ||||||
| # Database ######################################################################################### | # Database ######################################################################################### | ||||||
| 
 | 
 | ||||||
| DATABASE_VERSION = 22 | DATABASE_VERSION = 23 | ||||||
| 
 | 
 | ||||||
| DB_INIT = f''' | DB_INIT = f''' | ||||||
| CREATE TABLE IF NOT EXISTS albums( | CREATE TABLE IF NOT EXISTS albums( | ||||||
|  | @ -135,6 +135,7 @@ CREATE INDEX IF NOT EXISTS index_users_username on users(username COLLATE NOCASE | ||||||
| CREATE TABLE IF NOT EXISTS album_associated_directories( | CREATE TABLE IF NOT EXISTS album_associated_directories( | ||||||
|     albumid INT NOT NULL, |     albumid INT NOT NULL, | ||||||
|     directory TEXT NOT NULL COLLATE NOCASE, |     directory TEXT NOT NULL COLLATE NOCASE, | ||||||
|  |     created INT, | ||||||
|     FOREIGN KEY(albumid) REFERENCES albums(id) |     FOREIGN KEY(albumid) REFERENCES albums(id) | ||||||
| ); | ); | ||||||
| CREATE INDEX IF NOT EXISTS index_album_associated_directories_albumid on | CREATE INDEX IF NOT EXISTS index_album_associated_directories_albumid on | ||||||
|  | @ -145,6 +146,8 @@ CREATE INDEX IF NOT EXISTS index_album_associated_directories_directory on | ||||||
| CREATE TABLE IF NOT EXISTS album_group_rel( | CREATE TABLE IF NOT EXISTS album_group_rel( | ||||||
|     parentid INT NOT NULL, |     parentid INT NOT NULL, | ||||||
|     memberid INT NOT NULL, |     memberid INT NOT NULL, | ||||||
|  |     created INT, | ||||||
|  |     PRIMARY KEY(parentid, memberid), | ||||||
|     FOREIGN KEY(parentid) REFERENCES albums(id), |     FOREIGN KEY(parentid) REFERENCES albums(id), | ||||||
|     FOREIGN KEY(memberid) REFERENCES albums(id) |     FOREIGN KEY(memberid) REFERENCES albums(id) | ||||||
| ); | ); | ||||||
|  | @ -154,20 +157,19 @@ CREATE INDEX IF NOT EXISTS index_album_group_rel_memberid on album_group_rel(mem | ||||||
| CREATE TABLE IF NOT EXISTS album_photo_rel( | CREATE TABLE IF NOT EXISTS album_photo_rel( | ||||||
|     albumid INT NOT NULL, |     albumid INT NOT NULL, | ||||||
|     photoid INT NOT NULL, |     photoid INT NOT NULL, | ||||||
|  |     created INT, | ||||||
|  |     PRIMARY KEY(albumid, photoid), | ||||||
|     FOREIGN KEY(albumid) REFERENCES albums(id), |     FOREIGN KEY(albumid) REFERENCES albums(id), | ||||||
|     FOREIGN KEY(photoid) REFERENCES photos(id) |     FOREIGN KEY(photoid) REFERENCES photos(id) | ||||||
| ); | ); | ||||||
| CREATE INDEX IF NOT EXISTS index_album_photo_rel_albumid on album_photo_rel(albumid); | CREATE INDEX IF NOT EXISTS index_album_photo_rel_albumid on album_photo_rel(albumid); | ||||||
| CREATE INDEX IF NOT EXISTS index_album_photo_rel_photoid on album_photo_rel(photoid); | CREATE INDEX IF NOT EXISTS index_album_photo_rel_photoid on album_photo_rel(photoid); | ||||||
| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ||||||
| CREATE TABLE IF NOT EXISTS id_numbers( |  | ||||||
|     tab TEXT NOT NULL, |  | ||||||
|     last_id TEXT NOT NULL |  | ||||||
| ); |  | ||||||
| ---------------------------------------------------------------------------------------------------- |  | ||||||
| CREATE TABLE IF NOT EXISTS photo_tag_rel( | CREATE TABLE IF NOT EXISTS photo_tag_rel( | ||||||
|     photoid INT NOT NULL, |     photoid INT NOT NULL, | ||||||
|     tagid INT NOT NULL, |     tagid INT NOT NULL, | ||||||
|  |     created INT, | ||||||
|  |     PRIMARY KEY(photoid, tagid), | ||||||
|     FOREIGN KEY(photoid) REFERENCES photos(id), |     FOREIGN KEY(photoid) REFERENCES photos(id), | ||||||
|     FOREIGN KEY(tagid) REFERENCES tags(id) |     FOREIGN KEY(tagid) REFERENCES tags(id) | ||||||
| ); | ); | ||||||
|  | @ -178,6 +180,8 @@ CREATE INDEX IF NOT EXISTS index_photo_tag_rel_photoid_tagid on photo_tag_rel(ph | ||||||
| CREATE TABLE IF NOT EXISTS tag_group_rel( | CREATE TABLE IF NOT EXISTS tag_group_rel( | ||||||
|     parentid INT NOT NULL, |     parentid INT NOT NULL, | ||||||
|     memberid INT NOT NULL, |     memberid INT NOT NULL, | ||||||
|  |     created INT, | ||||||
|  |     PRIMARY KEY(parentid, memberid), | ||||||
|     FOREIGN KEY(parentid) REFERENCES tags(id), |     FOREIGN KEY(parentid) REFERENCES tags(id), | ||||||
|     FOREIGN KEY(memberid) REFERENCES tags(id) |     FOREIGN KEY(memberid) REFERENCES tags(id) | ||||||
| ); | ); | ||||||
|  | @ -186,7 +190,8 @@ CREATE INDEX IF NOT EXISTS index_tag_group_rel_memberid on tag_group_rel(memberi | ||||||
| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ||||||
| CREATE TABLE IF NOT EXISTS tag_synonyms( | CREATE TABLE IF NOT EXISTS tag_synonyms( | ||||||
|     name TEXT NOT NULL, |     name TEXT NOT NULL, | ||||||
|     mastername TEXT NOT NULL |     mastername TEXT NOT NULL, | ||||||
|  |     created INT | ||||||
| ); | ); | ||||||
| CREATE INDEX IF NOT EXISTS index_tag_synonyms_name on tag_synonyms(name); | CREATE INDEX IF NOT EXISTS index_tag_synonyms_name on tag_synonyms(name); | ||||||
| ''' | ''' | ||||||
|  |  | ||||||
|  | @ -122,6 +122,7 @@ class GroupableMixin(metaclass=abc.ABCMeta): | ||||||
|         data = { |         data = { | ||||||
|             'parentid': self.id, |             'parentid': self.id, | ||||||
|             'memberid': member.id, |             'memberid': member.id, | ||||||
|  |             'created': helpers.now().timestamp(), | ||||||
|         } |         } | ||||||
|         self.photodb.insert(table=self.group_table, pairs=data) |         self.photodb.insert(table=self.group_table, pairs=data) | ||||||
| 
 | 
 | ||||||
|  | @ -332,7 +333,11 @@ class Album(ObjectBase, GroupableMixin): | ||||||
|             return |             return | ||||||
| 
 | 
 | ||||||
|         log.info('Adding directory "%s" to %s.', path.absolute_path, self) |         log.info('Adding directory "%s" to %s.', path.absolute_path, self) | ||||||
|         data = {'albumid': self.id, 'directory': path.absolute_path} |         data = { | ||||||
|  |             'albumid': self.id, | ||||||
|  |             'directory': path.absolute_path, | ||||||
|  |             'created': helpers.now().timestamp(), | ||||||
|  |         } | ||||||
|         self.photodb.insert(table='album_associated_directories', pairs=data) |         self.photodb.insert(table='album_associated_directories', pairs=data) | ||||||
| 
 | 
 | ||||||
|     @decorators.required_feature('album.edit') |     @decorators.required_feature('album.edit') | ||||||
|  | @ -375,7 +380,11 @@ class Album(ObjectBase, GroupableMixin): | ||||||
| 
 | 
 | ||||||
|     def _add_photo(self, photo): |     def _add_photo(self, photo): | ||||||
|         log.info('Adding photo %s to %s.', photo, self) |         log.info('Adding photo %s to %s.', photo, self) | ||||||
|         data = {'albumid': self.id, 'photoid': photo.id} |         data = { | ||||||
|  |             'albumid': self.id, | ||||||
|  |             'photoid': photo.id, | ||||||
|  |             'created': helpers.now().timestamp(), | ||||||
|  |         } | ||||||
|         self.photodb.insert(table='album_photo_rel', pairs=data) |         self.photodb.insert(table='album_photo_rel', pairs=data) | ||||||
| 
 | 
 | ||||||
|     @decorators.required_feature('album.edit') |     @decorators.required_feature('album.edit') | ||||||
|  | @ -965,7 +974,8 @@ class Photo(ObjectBase): | ||||||
| 
 | 
 | ||||||
|         data = { |         data = { | ||||||
|             'photoid': self.id, |             'photoid': self.id, | ||||||
|             'tagid': tag.id |             'tagid': tag.id, | ||||||
|  |             'created': helpers.now().timestamp(), | ||||||
|         } |         } | ||||||
|         self.photodb.insert(table='photo_tag_rel', pairs=data) |         self.photodb.insert(table='photo_tag_rel', pairs=data) | ||||||
|         data = { |         data = { | ||||||
|  | @ -1661,6 +1671,7 @@ class Tag(ObjectBase, GroupableMixin): | ||||||
|         data = { |         data = { | ||||||
|             'name': synname, |             'name': synname, | ||||||
|             'mastername': self.name, |             'mastername': self.name, | ||||||
|  |             'created': helpers.now().timestamp(), | ||||||
|         } |         } | ||||||
|         self.photodb.insert(table='tag_synonyms', pairs=data) |         self.photodb.insert(table='tag_synonyms', pairs=data) | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -888,6 +888,117 @@ def upgrade_21_to_22(photodb): | ||||||
|     photodb.execute('DROP INDEX IF EXISTS index_photos_override_filename') |     photodb.execute('DROP INDEX IF EXISTS index_photos_override_filename') | ||||||
|     photodb.execute('CREATE INDEX IF NOT EXISTS index_photos_basename on photos(basename COLLATE NOCASE)') |     photodb.execute('CREATE INDEX IF NOT EXISTS index_photos_basename on photos(basename COLLATE NOCASE)') | ||||||
| 
 | 
 | ||||||
|  | def upgrade_22_to_23(photodb): | ||||||
|  |     ''' | ||||||
|  |     In this version, the rel tables received explicit primary keys and | ||||||
|  |     a `created` column. | ||||||
|  |     ''' | ||||||
|  |     m = Migrator(photodb) | ||||||
|  | 
 | ||||||
|  |     m.tables['album_associated_directories']['create'] = ''' | ||||||
|  |     CREATE TABLE IF NOT EXISTS album_associated_directories( | ||||||
|  |         albumid INT NOT NULL, | ||||||
|  |         directory TEXT NOT NULL COLLATE NOCASE, | ||||||
|  |         created INT, | ||||||
|  |         FOREIGN KEY(albumid) REFERENCES albums(id) | ||||||
|  |     ); | ||||||
|  |     ''' | ||||||
|  |     m.tables['album_associated_directories']['transfer'] = ''' | ||||||
|  |     INSERT INTO album_associated_directories SELECT | ||||||
|  |         albumid, | ||||||
|  |         directory, | ||||||
|  |         (SELECT created FROM albums WHERE id=albumid) | ||||||
|  |     FROM album_associated_directories_old; | ||||||
|  |     ''' | ||||||
|  | 
 | ||||||
|  |     m.tables['album_group_rel']['create'] = ''' | ||||||
|  |     CREATE TABLE IF NOT EXISTS album_group_rel( | ||||||
|  |         parentid INT NOT NULL, | ||||||
|  |         memberid INT NOT NULL, | ||||||
|  |         created INT, | ||||||
|  |         PRIMARY KEY(parentid, memberid), | ||||||
|  |         FOREIGN KEY(parentid) REFERENCES albums(id), | ||||||
|  |         FOREIGN KEY(memberid) REFERENCES albums(id) | ||||||
|  |     ); | ||||||
|  |     ''' | ||||||
|  |     m.tables['album_group_rel']['transfer'] = ''' | ||||||
|  |     INSERT INTO album_group_rel SELECT | ||||||
|  |         parentid, | ||||||
|  |         memberid, | ||||||
|  |         MAX((SELECT created FROM albums WHERE id=parentid), (SELECT created FROM albums WHERE id=memberid)) | ||||||
|  |     FROM album_group_rel_old; | ||||||
|  |     ''' | ||||||
|  | 
 | ||||||
|  |     m.tables['album_photo_rel']['create'] = ''' | ||||||
|  |     CREATE TABLE IF NOT EXISTS album_photo_rel( | ||||||
|  |         albumid INT NOT NULL, | ||||||
|  |         photoid INT NOT NULL, | ||||||
|  |         created INT, | ||||||
|  |         PRIMARY KEY(albumid, photoid), | ||||||
|  |         FOREIGN KEY(albumid) REFERENCES albums(id), | ||||||
|  |         FOREIGN KEY(photoid) REFERENCES photos(id) | ||||||
|  |     ); | ||||||
|  |     ''' | ||||||
|  |     m.tables['album_photo_rel']['transfer'] = ''' | ||||||
|  |     INSERT INTO album_photo_rel SELECT | ||||||
|  |         albumid, | ||||||
|  |         photoid, | ||||||
|  |         MAX((SELECT created FROM albums WHERE id=albumid), (SELECT created FROM photos WHERE id=photoid)) | ||||||
|  |     FROM album_photo_rel_old; | ||||||
|  |     ''' | ||||||
|  | 
 | ||||||
|  |     m.tables['photo_tag_rel']['create'] = ''' | ||||||
|  |     CREATE TABLE IF NOT EXISTS photo_tag_rel( | ||||||
|  |         photoid INT NOT NULL, | ||||||
|  |         tagid INT NOT NULL, | ||||||
|  |         created INT, | ||||||
|  |         PRIMARY KEY(photoid, tagid), | ||||||
|  |         FOREIGN KEY(photoid) REFERENCES photos(id), | ||||||
|  |         FOREIGN KEY(tagid) REFERENCES tags(id) | ||||||
|  |     ); | ||||||
|  |     ''' | ||||||
|  |     m.tables['photo_tag_rel']['transfer'] = ''' | ||||||
|  |     INSERT INTO photo_tag_rel SELECT | ||||||
|  |         photoid, | ||||||
|  |         tagid, | ||||||
|  |         MAX((SELECT created FROM photos WHERE id=photoid), (SELECT created FROM tags WHERE id=tagid)) | ||||||
|  |     FROM photo_tag_rel_old; | ||||||
|  |     ''' | ||||||
|  | 
 | ||||||
|  |     m.tables['tag_group_rel']['create'] = ''' | ||||||
|  |     CREATE TABLE IF NOT EXISTS tag_group_rel( | ||||||
|  |         parentid INT NOT NULL, | ||||||
|  |         memberid INT NOT NULL, | ||||||
|  |         created INT, | ||||||
|  |         PRIMARY KEY(parentid, memberid), | ||||||
|  |         FOREIGN KEY(parentid) REFERENCES tags(id), | ||||||
|  |         FOREIGN KEY(memberid) REFERENCES tags(id) | ||||||
|  |     ); | ||||||
|  |     ''' | ||||||
|  |     m.tables['tag_group_rel']['transfer'] = ''' | ||||||
|  |     INSERT INTO tag_group_rel SELECT | ||||||
|  |         parentid, | ||||||
|  |         memberid, | ||||||
|  |         MAX((SELECT created FROM tags WHERE id=parentid), (SELECT created FROM tags WHERE id=memberid)) | ||||||
|  |     FROM tag_group_rel_old; | ||||||
|  |     ''' | ||||||
|  | 
 | ||||||
|  |     m.tables['tag_synonyms']['create'] = ''' | ||||||
|  |     CREATE TABLE IF NOT EXISTS tag_synonyms( | ||||||
|  |         name TEXT NOT NULL, | ||||||
|  |         mastername TEXT NOT NULL, | ||||||
|  |         created INT | ||||||
|  |     ); | ||||||
|  |     ''' | ||||||
|  |     m.tables['tag_synonyms']['transfer'] = ''' | ||||||
|  |     INSERT INTO tag_synonyms SELECT | ||||||
|  |         name, | ||||||
|  |         mastername, | ||||||
|  |         (SELECT COALESCE(created, 0) FROM tags WHERE tags.name=name) | ||||||
|  |     FROM tag_synonyms_old; | ||||||
|  |     ''' | ||||||
|  |     m.go() | ||||||
|  | 
 | ||||||
| def upgrade_all(data_directory): | def upgrade_all(data_directory): | ||||||
|     ''' |     ''' | ||||||
|     Given the directory containing a phototagger database, apply all of the |     Given the directory containing a phototagger database, apply all of the | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue