Merge database migrations...
...in preparation of v1.0.0. This fixes #60
This commit is contained in:
parent
8d9cff8c3b
commit
91a6b4de08
|
@ -0,0 +1,9 @@
|
|||
DROP TABLE IF EXISTS site_info;
|
||||
DROP TABLE IF EXISTS access_token;
|
||||
DROP TABLE IF EXISTS media_url;
|
||||
DROP TABLE IF EXISTS share_token;
|
||||
DROP TABLE IF EXISTS media;
|
||||
DROP TABLE IF EXISTS video_metadata;
|
||||
DROP TABLE IF EXISTS media_exif;
|
||||
DROP TABLE IF EXISTS album;
|
||||
DROP TABLE IF EXISTS user;
|
|
@ -0,0 +1,115 @@
|
|||
-- Users and authentication
|
||||
CREATE TABLE IF NOT EXISTS user (
|
||||
user_id int NOT NULL AUTO_INCREMENT,
|
||||
username varchar(256) NOT NULL UNIQUE,
|
||||
password varchar(256),
|
||||
root_path varchar(512),
|
||||
admin boolean NOT NULL DEFAULT 0,
|
||||
|
||||
PRIMARY KEY (user_id)
|
||||
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS access_token (
|
||||
token_id int NOT NULL AUTO_INCREMENT,
|
||||
user_id int NOT NULL,
|
||||
value char(24) NOT NULL UNIQUE,
|
||||
expire timestamp NOT NULL,
|
||||
|
||||
PRIMARY KEY (token_id),
|
||||
FOREIGN KEY (user_id) REFERENCES user(user_id) ON DELETE CASCADE
|
||||
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS site_info (
|
||||
initial_setup boolean NOT NULL DEFAULT TRUE
|
||||
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
-- Video related
|
||||
CREATE TABLE IF NOT EXISTS video_metadata (
|
||||
metadata_id int NOT NULL AUTO_INCREMENT,
|
||||
|
||||
width int(6) NOT NULL,
|
||||
height int(6) NOT NULL,
|
||||
duration double NOT NULL,
|
||||
codec varchar(128),
|
||||
framerate double,
|
||||
bitrate int(24),
|
||||
color_profile varchar(128),
|
||||
audio varchar(128),
|
||||
|
||||
PRIMARY KEY (metadata_id)
|
||||
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
-- Media related
|
||||
CREATE TABLE IF NOT EXISTS album (
|
||||
album_id int NOT NULL AUTO_INCREMENT,
|
||||
title varchar(256) NOT NULL,
|
||||
parent_album int,
|
||||
owner_id int NOT NULL,
|
||||
path varchar(1024) NOT NULL,
|
||||
path_hash varchar(32) NOT NULL UNIQUE,
|
||||
|
||||
PRIMARY KEY (album_id),
|
||||
FOREIGN KEY (parent_album) REFERENCES album(album_id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (owner_id) REFERENCES user(user_id) ON DELETE CASCADE
|
||||
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS media_exif (
|
||||
exif_id int NOT NULL AUTO_INCREMENT,
|
||||
camera varchar(256),
|
||||
maker varchar(256),
|
||||
lens varchar(256),
|
||||
dateShot timestamp NULL,
|
||||
exposure varchar(256),
|
||||
aperture float,
|
||||
iso int(6),
|
||||
focal_length float,
|
||||
flash varchar(256),
|
||||
orientation int(1),
|
||||
exposure_program int(1),
|
||||
|
||||
PRIMARY KEY (exif_id)
|
||||
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS media (
|
||||
media_id int NOT NULL AUTO_INCREMENT,
|
||||
title varchar(256) NOT NULL,
|
||||
path varchar(1024) NOT NULL,
|
||||
path_hash varchar(32) NOT NULL UNIQUE,
|
||||
album_id int NOT NULL,
|
||||
exif_id int,
|
||||
favorite boolean DEFAULT FALSE,
|
||||
media_type varchar(64) NOT NULL,
|
||||
video_metadata_id int,
|
||||
|
||||
PRIMARY KEY (media_id),
|
||||
FOREIGN KEY (album_id) REFERENCES album(album_id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (exif_id) REFERENCES media_exif(exif_id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (video_metadata_id) REFERENCES video_metadata(metadata_id) ON DELETE CASCADE
|
||||
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS media_url (
|
||||
url_id int NOT NULL AUTO_INCREMENT,
|
||||
media_id int NOT NULL,
|
||||
media_name varchar(512) NOT NULL,
|
||||
width int NOT NULL,
|
||||
height int NOT NULL,
|
||||
purpose varchar(64) NOT NULL,
|
||||
content_type varchar(64) NOT NULL,
|
||||
|
||||
PRIMARY KEY (url_id),
|
||||
FOREIGN KEY (media_id) REFERENCES media(media_id) ON DELETE CASCADE
|
||||
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
-- Public shares
|
||||
CREATE TABLE IF NOT EXISTS share_token (
|
||||
token_id int AUTO_INCREMENT,
|
||||
value char(24) NOT NULL UNIQUE,
|
||||
owner_id int NOT NULL,
|
||||
expire timestamp NULL DEFAULT NULL,
|
||||
password varchar(256),
|
||||
album_id int,
|
||||
media_id int,
|
||||
|
||||
PRIMARY KEY (token_id)
|
||||
-- CHECK (album_id IS NOT NULL OR media_id IS NOT NULL)
|
||||
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
@ -1,2 +0,0 @@
|
|||
DROP TABLE IF EXISTS user;
|
||||
DROP TABLE IF NOT EXISTS access_token;
|
|
@ -1,19 +0,0 @@
|
|||
CREATE TABLE IF NOT EXISTS user (
|
||||
user_id int NOT NULL AUTO_INCREMENT,
|
||||
username varchar(256) NOT NULL UNIQUE,
|
||||
password varchar(256),
|
||||
root_path varchar(512),
|
||||
admin boolean NOT NULL DEFAULT 0,
|
||||
|
||||
PRIMARY KEY (user_id)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS access_token (
|
||||
token_id int NOT NULL AUTO_INCREMENT,
|
||||
user_id int NOT NULL,
|
||||
value char(24) NOT NULL UNIQUE,
|
||||
expire timestamp NOT NULL,
|
||||
|
||||
PRIMARY KEY (token_id),
|
||||
FOREIGN KEY (user_id) REFERENCES user(user_id) ON DELETE CASCADE
|
||||
);
|
|
@ -1,4 +0,0 @@
|
|||
DROP TABLE IF EXISTS photo;
|
||||
DROP TABLE IF EXISTS album;
|
||||
DROP TABLE IF EXISTS photo_url;
|
||||
DROP TABLE IF EXISTS photo_exif;
|
|
@ -1,55 +0,0 @@
|
|||
CREATE TABLE IF NOT EXISTS photo_exif (
|
||||
exif_id int NOT NULL AUTO_INCREMENT,
|
||||
camera varchar(256),
|
||||
maker varchar(256),
|
||||
lens varchar(256),
|
||||
dateShot timestamp NULL,
|
||||
exposure varchar(256),
|
||||
aperture float,
|
||||
iso int(6),
|
||||
focal_length float,
|
||||
flash varchar(256),
|
||||
orientation int(1),
|
||||
exposure_program int(1),
|
||||
|
||||
PRIMARY KEY (exif_id)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS album (
|
||||
album_id int NOT NULL AUTO_INCREMENT,
|
||||
title varchar(256) NOT NULL,
|
||||
parent_album int,
|
||||
owner_id int NOT NULL,
|
||||
path varchar(1024) NOT NULL,
|
||||
path_hash varchar(32) NOT NULL UNIQUE,
|
||||
|
||||
PRIMARY KEY (album_id),
|
||||
FOREIGN KEY (parent_album) REFERENCES album(album_id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (owner_id) REFERENCES user(user_id) ON DELETE CASCADE
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS photo (
|
||||
photo_id int NOT NULL AUTO_INCREMENT,
|
||||
title varchar(256) NOT NULL,
|
||||
path varchar(1024) NOT NULL,
|
||||
path_hash varchar(32) NOT NULL UNIQUE,
|
||||
album_id int NOT NULL,
|
||||
exif_id int,
|
||||
|
||||
PRIMARY KEY (photo_id),
|
||||
FOREIGN KEY (album_id) REFERENCES album(album_id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (exif_id) REFERENCES photo_exif(exif_id) ON DELETE CASCADE
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS photo_url (
|
||||
url_id int NOT NULL AUTO_INCREMENT,
|
||||
photo_id int NOT NULL,
|
||||
photo_name varchar(512) NOT NULL,
|
||||
width int NOT NULL,
|
||||
height int NOT NULL,
|
||||
purpose varchar(64) NOT NULL,
|
||||
content_type varchar(64) NOT NULL,
|
||||
|
||||
PRIMARY KEY (url_id),
|
||||
FOREIGN KEY (photo_id) REFERENCES photo(photo_id) ON DELETE CASCADE
|
||||
);
|
|
@ -1 +0,0 @@
|
|||
DROP TABLE IF EXISTS site_info;
|
|
@ -1,3 +0,0 @@
|
|||
CREATE TABLE IF NOT EXISTS site_info (
|
||||
initial_setup boolean NOT NULL DEFAULT TRUE
|
||||
);
|
|
@ -1,2 +0,0 @@
|
|||
|
||||
DROP TABLE IF EXISTS share_token;
|
|
@ -1,12 +0,0 @@
|
|||
CREATE TABLE IF NOT EXISTS share_token (
|
||||
token_id int AUTO_INCREMENT,
|
||||
value char(24) NOT NULL UNIQUE,
|
||||
owner_id int NOT NULL,
|
||||
expire timestamp NULL DEFAULT NULL,
|
||||
password varchar(256),
|
||||
album_id int,
|
||||
photo_id int,
|
||||
|
||||
PRIMARY KEY (token_id)
|
||||
-- CHECK (album_id IS NOT NULL OR photo_id IS NOT NULL)
|
||||
);
|
|
@ -1,9 +0,0 @@
|
|||
-- Migrate all tables in database to use utf8 for better language support
|
||||
ALTER TABLE access_token CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
|
||||
ALTER TABLE album CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
|
||||
ALTER TABLE photo CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
|
||||
ALTER TABLE photo_exif CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
|
||||
ALTER TABLE photo_url CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
|
||||
ALTER TABLE share_token CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
|
||||
ALTER TABLE site_info CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
|
||||
ALTER TABLE user CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
|
|
@ -1,9 +0,0 @@
|
|||
-- Migrate all tables in database to use utf8 for better language support
|
||||
ALTER TABLE access_token CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
ALTER TABLE album CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
ALTER TABLE photo CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
ALTER TABLE photo_exif CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
ALTER TABLE photo_url CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
ALTER TABLE share_token CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
ALTER TABLE site_info CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
ALTER TABLE user CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
@ -1,2 +0,0 @@
|
|||
-- Add favorite attribute to photos
|
||||
ALTER TABLE photo DROP favorite
|
|
@ -1,2 +0,0 @@
|
|||
-- Add favorite attribute to photos
|
||||
ALTER TABLE photo ADD favorite BOOL DEFAULT false
|
|
@ -1,43 +0,0 @@
|
|||
-- Update database to hash indexed paths
|
||||
|
||||
CREATE PROCEDURE MigratePathHashIfNeeded()
|
||||
BEGIN
|
||||
|
||||
-- Add path hash for photo table if it doesn't exist
|
||||
IF NOT EXISTS( SELECT *
|
||||
FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE table_name = 'photo'
|
||||
AND table_schema = DATABASE()
|
||||
AND column_name = 'path_hash') THEN
|
||||
|
||||
-- Remove unique index from photo.path
|
||||
ALTER TABLE photo DROP INDEX path;
|
||||
|
||||
-- Add path_hash and set it to the md5 hash based of the path attribute
|
||||
ALTER TABLE photo ADD path_hash varchar(32) AFTER path;
|
||||
UPDATE photo p SET path_hash = md5(p.path);
|
||||
ALTER TABLE photo MODIFY path_hash varchar(32) NOT NULL UNIQUE;
|
||||
|
||||
END IF;
|
||||
|
||||
-- Add path hash for album table if it doesn't exist
|
||||
IF NOT EXISTS( SELECT *
|
||||
FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE table_name = 'album'
|
||||
AND table_schema = DATABASE()
|
||||
AND column_name = 'path_hash') THEN
|
||||
|
||||
-- Remove unique index from album.path
|
||||
ALTER TABLE album DROP INDEX path;
|
||||
|
||||
-- Add path_hash and set it to the md5 hash based of the path attribute
|
||||
ALTER TABLE album ADD path_hash varchar(32) AFTER path;
|
||||
UPDATE album a SET path_hash = md5(a.path);
|
||||
ALTER TABLE album MODIFY path_hash varchar(32) NOT NULL UNIQUE;
|
||||
|
||||
END IF;
|
||||
|
||||
END; -- MigratePathHashIfNeeded procedure end
|
||||
|
||||
CALL MigratePathHashIfNeeded();
|
||||
DROP PROCEDURE MigratePathHashIfNeeded;
|
|
@ -1,17 +0,0 @@
|
|||
|
||||
ALTER TABLE media RENAME TO photo;
|
||||
ALTER TABLE media_url RENAME TO photo_url;
|
||||
ALTER TABLE media_exif RENAME TO photo_exif;
|
||||
|
||||
ALTER TABLE photo CHANGE COLUMN media_id photo_id int NOT NULL AUTO_INCREMENT;
|
||||
ALTER TABLE photo_url CHANGE COLUMN media_id photo_id int NOT NULL;
|
||||
ALTER TABLE photo_url CHANGE COLUMN media_name photo_name varchar(512) NOT NULL;
|
||||
ALTER TABLE share_token CHANGE COLUMN media_id photo_id int;
|
||||
|
||||
ALTER TABLE photo DROP COLUMN media_type;
|
||||
|
||||
ALTER TABLE photo
|
||||
DROP FOREIGN KEY photo_ibfk_3,
|
||||
DROP COLUMN video_metadata_id;
|
||||
|
||||
DROP TABLE video_metadata;
|
|
@ -1,31 +0,0 @@
|
|||
ALTER TABLE photo RENAME TO media;
|
||||
ALTER TABLE photo_url RENAME TO media_url;
|
||||
ALTER TABLE photo_exif RENAME TO media_exif;
|
||||
|
||||
ALTER TABLE media RENAME COLUMN photo_id TO media_id;
|
||||
|
||||
ALTER TABLE media_url
|
||||
RENAME COLUMN photo_id TO media_id,
|
||||
RENAME COLUMN photo_name TO media_name;
|
||||
|
||||
ALTER TABLE share_token RENAME COLUMN photo_id TO media_id;
|
||||
|
||||
CREATE TABLE video_metadata (
|
||||
metadata_id int NOT NULL AUTO_INCREMENT,
|
||||
|
||||
width int(6) NOT NULL,
|
||||
height int(6) NOT NULL,
|
||||
duration double NOT NULL,
|
||||
codec varchar(128),
|
||||
framerate double,
|
||||
bitrate int(24),
|
||||
color_profile varchar(128),
|
||||
audio varchar(128),
|
||||
|
||||
PRIMARY KEY (metadata_id)
|
||||
);
|
||||
|
||||
ALTER TABLE media
|
||||
ADD COLUMN media_type varchar(64) NOT NULL DEFAULT "photo",
|
||||
ADD COLUMN video_metadata_id int,
|
||||
ADD FOREIGN KEY (video_metadata_id) REFERENCES video_metadata(metadata_id);
|
Loading…
Reference in New Issue