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