You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
107 lines
3.0 KiB
MySQL
107 lines
3.0 KiB
MySQL
3 years ago
|
-- Add migration script here
|
||
|
PRAGMA foreign_keys= off;
|
||
|
|
||
|
-- create backup files table
|
||
|
ALTER TABLE files
|
||
|
RENAME TO _files_old;
|
||
|
|
||
|
-- create backup hashes table
|
||
|
ALTER TABLE hashes
|
||
|
RENAME TO _hashes_old;
|
||
|
|
||
|
-- create backup hash_tag_mappings table
|
||
|
ALTER TABLE hash_tag_mappings
|
||
|
RENAME TO _hash_tag_mappings_old;
|
||
|
|
||
|
-- create backup hash_source_mappings table
|
||
|
ALTER TABLE hash_source_mappings
|
||
|
RENAME TO _hash_source_mappings_old;
|
||
|
|
||
|
-- create content id table
|
||
|
CREATE TABLE content_descriptors
|
||
|
(
|
||
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||
|
descriptor BLOB NOT NULL
|
||
|
);
|
||
|
|
||
|
CREATE UNIQUE INDEX content_descriptor_values ON content_descriptors (descriptor);
|
||
|
|
||
|
-- create content-id tag mappings table
|
||
|
CREATE TABLE cd_tag_mappings
|
||
|
(
|
||
|
cd_id INTEGER NOT NULL REFERENCES content_descriptors (id),
|
||
|
tag_id INTEGER NOT NULL REFERENCES tags (id),
|
||
|
PRIMARY KEY (cd_id, tag_id)
|
||
|
);
|
||
|
|
||
|
CREATE UNIQUE INDEX content_descriptor_tag_mapping_unique ON cd_tag_mappings (cd_id, tag_id);
|
||
|
CREATE INDEX content_descriptor_tag_mapping_tag ON cd_tag_mappings (tag_id);
|
||
|
|
||
|
-- create content-id source mappings table
|
||
|
CREATE TABLE cd_source_mappings
|
||
|
(
|
||
|
cd_id INTEGER NOT NULL REFERENCES content_descriptors (id),
|
||
|
source_id INTEGER NOT NULL REFERENCES sources (id),
|
||
|
PRIMARY KEY (cd_id, source_id)
|
||
|
);
|
||
|
|
||
|
CREATE UNIQUE INDEX content_descriptor_source_mapping_unique ON cd_source_mappings (cd_id, source_id);
|
||
|
|
||
|
-- create new files table
|
||
|
CREATE TABLE files
|
||
|
(
|
||
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||
|
status INTEGER NOT NULL DEFAULT 10,
|
||
|
storage_id INTEGER NOT NULL REFERENCES storage_locations (id),
|
||
|
cd_id INTEGER NOT NULL REFERENCES content_descriptors (id),
|
||
|
mime_type VARCHAR(128) NOT NULL DEFAULT 'application/octet-stream'
|
||
|
);
|
||
|
|
||
|
CREATE INDEX files_contend_descriptor ON files (cd_id);
|
||
|
|
||
|
-- create metadata table
|
||
|
CREATE TABLE file_metadata
|
||
|
(
|
||
|
file_id INTEGER PRIMARY KEY REFERENCES files (id),
|
||
|
size INTEGER NOT NULL,
|
||
|
name VARCHAR(128),
|
||
|
comment VARCHAR(1024),
|
||
|
import_time DATETIME NOT NULL,
|
||
|
creation_time DATETIME NOT NULL,
|
||
|
change_time DATETIME NOT NULL
|
||
|
);
|
||
|
|
||
|
CREATE UNIQUE INDEX file_metadata_file_id_unique ON file_metadata (file_id);
|
||
|
|
||
|
-- add content identifiers from hashes table
|
||
|
INSERT INTO content_descriptors
|
||
|
SELECT id, value
|
||
|
FROM _hashes_old;
|
||
|
|
||
|
-- add files from files table
|
||
|
INSERT INTO files (id, storage_id, cd_id, mime_type)
|
||
|
SELECT id, storage_id, hash_id AS content_id, mime_type
|
||
|
FROM _files_old;
|
||
|
|
||
|
-- add metadata from files table
|
||
|
INSERT INTO file_metadata
|
||
|
SELECT id AS file_id, size, name, comment, import_time, creation_time, change_time
|
||
|
FROM _files_old;
|
||
|
|
||
|
-- add content tag mappings
|
||
|
INSERT INTO cd_tag_mappings
|
||
|
SELECT hash_id AS content_id, tag_id
|
||
|
FROM _hash_tag_mappings_old;
|
||
|
|
||
|
-- add content id source mappings
|
||
|
INSERT INTO cd_source_mappings
|
||
|
SELECT hash_id AS content_id, source_id
|
||
|
FROM _hash_source_mappings_old;
|
||
|
|
||
|
-- drop all old tables
|
||
|
DROP TABLE _hash_source_mappings_old;
|
||
|
DROP TABLE _hash_tag_mappings_old;
|
||
|
DROP TABLE _files_old;
|
||
|
DROP TABLE _hashes_old;
|
||
|
|
||
|
pragma foreign_keys= on;
|