diff --git a/patches/patch20220110-6.0-SNAPSHOT/patch.sql b/patches/patch20220110-6.0-SNAPSHOT/patch.sql index 931ac7d3c20177dbd8271531b7099df6d632530f..12f7f77bce1951a10ef9c5150d53df81f8bbe5bd 100644 --- a/patches/patch20220110-6.0-SNAPSHOT/patch.sql +++ b/patches/patch20220110-6.0-SNAPSHOT/patch.sql @@ -12,7 +12,7 @@ DELETE FROM entities WHERE id = 50; CREATE TABLE IF NOT EXISTS file_hashes ( file_id INT UNSIGNED, digest VARBINARY(255) NOT NULL, - algorithm VARBINARY(255) NOT NULL DEFAULT "SHA-512", + algorithm VARBINARY(255) NOT NULL, checked_timestamp BIGINT NOT NULL DEFAULT 0, PRIMARY KEY (file_id, algorithm), FOREIGN KEY (file_id) REFERENCES files (file_id) @@ -30,8 +30,8 @@ CREATE TABLE IF NOT EXISTS archive_file_hashes ( ); -- Move existing hash data to new tables... -INSERT INTO file_hashes (file_id, digest, checked_timestamp) SELECT file_id, hash, checked_timestamp FROM files WHERE hash IS NOT NULL; -INSERT INTO archive_file_hashes (file_id, _iversion, digest, checked_timestamp) SELECT file_id, _iversion, hash, checked_timestamp FROM archive_files WHERE hash IS NOT NULL; +INSERT INTO file_hashes (file_id, digest, algorithm, checked_timestamp) SELECT file_id, hash, "SHA-512", checked_timestamp FROM files WHERE hash IS NOT NULL; +INSERT INTO archive_file_hashes (file_id, _iversion, digest, algorithm, checked_timestamp) SELECT file_id, _iversion, hash, "SHA-512", checked_timestamp FROM archive_files WHERE hash IS NOT NULL; -- and remove hash colums from the files and archive_files tables. ALTER TABLE files DROP COLUMN hash; @@ -40,19 +40,21 @@ ALTER TABLE archive_files DROP COLUMN hash; -- Add new fields to files table... ALTER TABLE files ADD COLUMN IF NOT EXISTS ( + hash_algorithm VARBINARY(255) NULL DEFAULT "SHA-512", parent_directory INT UNSIGNED DEFAULT NULL, mimetype VARBINARY(255) DEFAULT NULL, file_storage_id VARBINARY(255) NOT NULL DEFAULT "DEFAULT", - file_key VARBINARY(16175) DEFAULT NULL + file_key VARBINARY(16000) DEFAULT NULL ); -- ... and to the corresponding archive_files table. ALTER TABLE archive_files ADD COLUMN IF NOT EXISTS ( + checked_timestamp BIGINT NOT NULL DEFAULT 0, + hash_algorithm VARBINARY(255) NULL DEFAULT "SHA-512", parent_directory INT UNSIGNED DEFAULT NULL, mimetype VARBINARY(255) DEFAULT NULL, file_storage_id VARBINARY(255) NOT NULL DEFAULT "DEFAULT", - file_key VARBINARY(16175) DEFAULT NULL, - checked_timestamp BIGINT NOT NULL DEFAULT 0 + file_key VARBINARY(16000) DEFAULT NULL ); -- no two files at the same path are allowed. @@ -68,54 +70,29 @@ ALTER TABLE entities MODIFY COLUMN `role` enum('RECORDTYPE','RECORD','FILE','DOM INSERT IGNORE INTO entities (id, description, role, acl) VALUES (9, "The directory role.", "ROLE", 0); INSERT IGNORE INTO name_data (domain_id, entity_id, property_id, value, status, pidx) VALUES (0, 9, 20, "DIRECTORY", "FIX", 0); --- Add a special nameless directory which is used as the root directory of the --- internal file system. -INSERT IGNORE INTO entities (id, description, role, acl) VALUES (51, "The root directory of the internal files system", "DIRECTORY", 0); -INSERT IGNORE INTO files - (file_id, path, size, hash, checked_timestamp, mimetype, file_storage_id, - file_key, parent_directory) - VALUES (51, "", 0, NULL, 0, "inode/directory", "DEFAULT", "", NULL); - -- In the default file storage back-end the key is just the path. UPDATE files SET file_key=path; UPDATE archive_files SET file_key=path; + -- and now, set NOT NULL for the file_key column -ALTER TABLE files MODIFY COLUMN file_key VARBINARY(16175) NOT NULL; -ALTER TABLE archive_files MODIFY COLUMN file_key VARBINARY(16175) NOT NULL; +ALTER TABLE files MODIFY COLUMN file_key VARBINARY(16000) NOT NULL; +ALTER TABLE archive_files MODIFY COLUMN file_key VARBINARY(16000) NOT NULL; -- Size may be NULL for directories ALTER TABLE files MODIFY COLUMN size BIGINT UNSIGNED NULL DEFAULT NULL; ALTER TABLE archive_files MODIFY COLUMN size BIGINT UNSIGNED NULL DEFAULT NULL; -- More characters for long names -ALTER TABLE files MODIFY COLUMN path VARCHAR(16175) NOT NULL; -ALTER TABLE archive_files MODIFY COLUMN path VARCHAR(16175) NOT NULL; - --- Test data for the _create_dirs procedure... --- INSERT INTO entities (id, role, acl) VALUES - -- (52, "FILE", 0), - -- (53, "FILE", 0), - -- (54, "FILE", 0), - -- (55, "FILE", 0), - -- (56, "FILE", 0), - -- (57, "FILE", 0), - -- (58, "FILE", 0), - -- (59, "FILE", 0), - -- (60, "FILE", 0); --- INSERT INTO files - -- (file_id, path, size, hash, checked_timestamp, mimetype, file_storage_id, - -- file_key, parent_directory) - -- VALUES - -- (52, "file1", 0, NULL, 0, "bla", "DEFAULT", "", NULL), - -- (53, "file2", 0, NULL, 0, "bla", "DEFAULT", "", NULL), - -- (54, "A/B/file3", 0, NULL, 0, "bla", "DEFAULT", "", NULL), - -- (55, "A/B/file4", 0, NULL, 0, "bla", "DEFAULT", "", NULL), - -- (56, "A/B/C/file5", 0, NULL, 0, "bla", "DEFAULT", "", NULL), - -- (57, "A/B/C/file6", 0, NULL, 0, "bla", "DEFAULT", "", NULL), - -- (58, "B/C/D/file7", 0, NULL, 0, "bla", "DEFAULT", "", NULL), - -- (59, "B/C/D/file8", 0, NULL, 0, "bla", "DEFAULT", "", NULL), - -- (60, "B/C/file9", 0, NULL, 0, "bla", "DEFAULT", "", NULL); +ALTER TABLE files MODIFY COLUMN path VARCHAR(16000) NOT NULL; +ALTER TABLE archive_files MODIFY COLUMN path VARCHAR(16000) NOT NULL; +-- Add a special nameless directory which is used as the root directory of the +-- internal file system. +INSERT IGNORE INTO entities (id, description, role, acl) VALUES (51, "The root directory of the internal files system", "DIRECTORY", 0); +INSERT IGNORE INTO files + (file_id, path, checked_timestamp, mimetype, file_storage_id, + file_key, parent_directory) + VALUES (51, "", 0, "inode/directory", "DEFAULT", "", NULL); DROP PROCEDURE IF EXISTS _create_dirs; DELIMITER // @@ -188,9 +165,9 @@ BEGIN INSERT INTO entities (description, role, acl) VALUES (NULL, "DIRECTORY", 0); SET dir_id = LAST_INSERT_ID(); -- ... then insert the FSODescriptor - INSERT INTO files (file_id, path, size, hash, checked_timestamp, + INSERT INTO files (file_id, path, checked_timestamp, mimetype, file_storage_id, file_key, parent_directory) - VALUES (dir_id, dir_path_no_trailing_slash, 0, NULL, 0, + VALUES (dir_id, dir_path_no_trailing_slash, 0, "inode/directory", "DEFAULT", dir_path_no_trailing_slash, parent_dir_id); -- set the parent_dir_id for the next iteration