diff --git a/libs/mytap-1.0.zip b/libs/mytap-1.0.zip index 9e04965cd40320bde2e598c585119ffa7f6b1eab..4243087c1e50de041a3eb1f1f069c3003edae34a 100644 Binary files a/libs/mytap-1.0.zip and b/libs/mytap-1.0.zip differ diff --git a/patches/applyPatches.sh b/patches/applyPatches.sh index f4295ef5a29d19b5f10e8c2d628a9148385cf97e..735dd3ea48a43d033b46dad1c7eb1700bda5c9b1 100755 --- a/patches/applyPatches.sh +++ b/patches/applyPatches.sh @@ -39,8 +39,6 @@ fi source $UTILSPATH/load_settings.sh source $UTILSPATH/helpers.sh -mysql_execute "DELETE FROM rules" - PATCHES="./patch*/patch.sh" for p in $PATCHES diff --git a/patches/patch20210219-5.0.0-rc1/patch.sh b/patches/patch20220110-6.0-SNAPSHOT/patch.sh similarity index 96% rename from patches/patch20210219-5.0.0-rc1/patch.sh rename to patches/patch20220110-6.0-SNAPSHOT/patch.sh index b3c8447b449f60ed9a5ebe311cb534eb407178b2..8c73b314582c189e8562bd4cd5899deb01278f56 100755 --- a/patches/patch20210219-5.0.0-rc1/patch.sh +++ b/patches/patch20220110-6.0-SNAPSHOT/patch.sh @@ -25,8 +25,8 @@ # Refactors the files and archive_files tables and all affected procedures for # the new file back-end # Update mysql schema to version v5.0.0-rc1 -NEW_VERSION="v5.0.0-rc1" -OLD_VERSION="v4.0.0" +NEW_VERSION="v6.0-SNAPSHOT" +OLD_VERSION="v5.0.0" if [ -z "$UTILSPATH" ]; then UTILSPATH="../utils" diff --git a/patches/patch20210219-5.0.0-rc1/patch.sql b/patches/patch20220110-6.0-SNAPSHOT/patch.sql similarity index 93% rename from patches/patch20210219-5.0.0-rc1/patch.sql rename to patches/patch20220110-6.0-SNAPSHOT/patch.sql index c7426fe9cfb466fb9a43643fa62115e2829a619e..2a6c7744f93fa7c08747c7b7a8e2e62a25abacc7 100644 --- a/patches/patch20210219-5.0.0-rc1/patch.sql +++ b/patches/patch20220110-6.0-SNAPSHOT/patch.sql @@ -43,7 +43,7 @@ ALTER TABLE files ADD COLUMN IF NOT EXISTS ( parent_directory INT UNSIGNED DEFAULT NULL, mimetype VARBINARY(255) DEFAULT NULL, file_storage_id VARBINARY(255) NOT NULL DEFAULT "DEFAULT", - file_key VARBINARY(255) DEFAULT NULL + file_key VARBINARY(16175) DEFAULT NULL ); -- ... and to the corresponding archive_files table. @@ -51,7 +51,7 @@ ALTER TABLE archive_files ADD COLUMN IF NOT EXISTS ( parent_directory INT UNSIGNED DEFAULT NULL, mimetype VARBINARY(255) DEFAULT NULL, file_storage_id VARBINARY(255) NOT NULL DEFAULT "DEFAULT", - file_key VARBINARY(40000) DEFAULT NULL, + file_key VARBINARY(16175) DEFAULT NULL, checked_timestamp BIGINT NOT NULL DEFAULT 0 ); @@ -80,16 +80,16 @@ INSERT IGNORE INTO files 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(40000) NOT NULL; -ALTER TABLE archive_files MODIFY COLUMN file_key VARBINARY(40000) NOT NULL; +ALTER TABLE files MODIFY COLUMN file_key VARBINARY(16175) NOT NULL; +ALTER TABLE archive_files MODIFY COLUMN file_key VARBINARY(16175) NOT NULL; -- Size may be NULL for directories -ALTER TABLE files MODIFY COLUMN size BIGINT NULL DEFAULT NULL; -ALTER TABLE archive_files MODIFY COLUMN size BIGINT NULL DEFAULT NULL; +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(5000) NOT NULL; -ALTER TABLE archive_files MODIFY COLUMN path VARCHAR(5000) NOT NULL; +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 @@ -136,11 +136,11 @@ BEGIN DECLARE dir_path_no_trailing_slash VARCHAR(255) DEFAULT ""; DECLARE dir_exists BOOLEAN DEFAULT FALSE; DECLARE parent_dir_id INT UNSIGNED DEFAULT 51; - DECLARE cur CURSOR FOR SELECT file_id, path FROM files WHERE mimetype != "inode/directory"; + DECLARE cur CURSOR FOR SELECT file_id, path FROM files WHERE mimetype != "inode/directory" OR mimetype IS NULL; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; OPEN cur; - UPDATE files SET parent_directory = 51 WHERE mimetype != "inode/directory"; + UPDATE files SET parent_directory = 51 WHERE mimetype != "inode/directory" OR mimetype IS NULL; -- loop over all FILE entities in the table (not DIRECTORY) loop1: LOOP FETCH cur INTO _file_id, _path; @@ -212,4 +212,4 @@ DELIMITER ; CALL _create_dirs(); -- not to be uses after this patch has been applied. -DROP PROCEDURE _create_dirs; +-- DROP PROCEDURE _create_dirs; diff --git a/procedures/insertFSODescriptor.sql b/procedures/insertFSODescriptor.sql index d0e432cab333c47b0aaa15ad92a3f5f6fda46ae0..ac693d8fe8f88c02ae7a7992efa7f9146e59228b 100644 --- a/procedures/insertFSODescriptor.sql +++ b/procedures/insertFSODescriptor.sql @@ -19,7 +19,7 @@ */ -DROP PROCEDURE IF EXISTS db_2_0.insertFSODescriptor; +DROP PROCEDURE IF EXISTS db_5_0.insertFSODescriptor; delimiter // /** * Insert a FSODescriptor @@ -45,7 +45,7 @@ delimiter // * FileParentID * The entity id of the parent directory (or NULL). */ -CREATE PROCEDURE db_2_0.insertFSODescriptor( +CREATE PROCEDURE db_5_0.insertFSODescriptor( in FileID INT UNSIGNED, in FileHash VARCHAR(255), in FileCheckedTimestamp BIGINT, diff --git a/tests/test_autotap.sql b/tests/test_autotap.sql index ebec7304fd753261775a40a8ccfd8e765136ec0e..22cc4e47b9625f71b746c7a876689a196f2c5eca 100644 --- a/tests/test_autotap.sql +++ b/tests/test_autotap.sql @@ -724,7 +724,7 @@ SELECT tap.col_collation_is('_caosdb_schema_unit_tests','entities','description' -- COLUMN entities.role SELECT tap.has_column('_caosdb_schema_unit_tests','entities','role',''); -SELECT tap.col_column_type_is('_caosdb_schema_unit_tests','entities','role','enum(\'RECORDTYPE\',\'RECORD\',\'FILE\',\'DOMAIN\',\'PROPERTY\',\'DATATYPE\',\'ROLE\',\'QUERYTEMPLATE\')',''); +SELECT tap.col_column_type_is('_caosdb_schema_unit_tests','entities','role','enum(\'RECORDTYPE\',\'RECORD\',\'FILE\',\'DOMAIN\',\'PROPERTY\',\'DATATYPE\',\'ROLE\',\'QUERYTEMPLATE\',\'DIRECTORY\')',''); SELECT tap.col_extra_is('_caosdb_schema_unit_tests','entities','role','',''); SELECT tap.col_default_is('_caosdb_schema_unit_tests','entities','role',NULL,''); SELECT tap.col_charset_is('_caosdb_schema_unit_tests','entities','role','utf8',''); @@ -909,7 +909,39 @@ SELECT tap.table_collation_is('_caosdb_schema_unit_tests','files','utf8_unicode_ SELECT tap.table_engine_is('_caosdb_schema_unit_tests','files','InnoDB',''); -- COLUMNS -SELECT tap.columns_are('_caosdb_schema_unit_tests','files','`file_id`,`path`,`size`,`hash`,`checked_timestamp`',''); +SELECT tap.columns_are('_caosdb_schema_unit_tests','files','`file_id`,`path`,`size`,`hash`,`checked_timestamp`,`parent_directory`,`mimetype`,`file_storage_id`,`file_key`',''); + +-- TODO COLUMN files.parent_directory +SELECT tap.has_column('_caosdb_schema_unit_tests','files','parent_directory',''); +SELECT tap.col_column_type_is('_caosdb_schema_unit_tests','files','parent_directory','int(10) unsigned',''); +SELECT tap.col_extra_is('_caosdb_schema_unit_tests','files','parent_directory','',''); +SELECT tap.col_default_is('_caosdb_schema_unit_tests','files','parent_directory','NULL',''); +SELECT tap.col_charset_is('_caosdb_schema_unit_tests','files','parent_directory',NULL,''); +SELECT tap.col_collation_is('_caosdb_schema_unit_tests','files','parent_directory',NULL,''); + +-- TODO COLUMN files.mimetype +SELECT tap.has_column('_caosdb_schema_unit_tests','files','mimetype',''); +SELECT tap.col_column_type_is('_caosdb_schema_unit_tests','files','mimetype','varbinary(255)',''); +SELECT tap.col_extra_is('_caosdb_schema_unit_tests','files','mimetype','',''); +SELECT tap.col_default_is('_caosdb_schema_unit_tests','files','mimetype','NULL',''); +SELECT tap.col_charset_is('_caosdb_schema_unit_tests','files','mimetype',NULL,''); +SELECT tap.col_collation_is('_caosdb_schema_unit_tests','files','mimetype',NULL,''); + +-- TODO COLUMN files.file_storage_id +SELECT tap.has_column('_caosdb_schema_unit_tests','files','file_storage_id',''); +SELECT tap.col_column_type_is('_caosdb_schema_unit_tests','files','file_storage_id','varbinary(255)',''); +SELECT tap.col_extra_is('_caosdb_schema_unit_tests','files','file_storage_id','',''); +SELECT tap.col_default_is('_caosdb_schema_unit_tests','files','file_storage_id','\'DEFAULT\'',''); +SELECT tap.col_charset_is('_caosdb_schema_unit_tests','files','file_storage_id',NULL,''); +SELECT tap.col_collation_is('_caosdb_schema_unit_tests','files','file_storage_id',NULL,''); + +-- TODO COLUMN files.file_key +SELECT tap.has_column('_caosdb_schema_unit_tests','files','file_key',''); +SELECT tap.col_column_type_is('_caosdb_schema_unit_tests','files','file_key','varbinary(16175)',''); +SELECT tap.col_extra_is('_caosdb_schema_unit_tests','files','file_key','',''); +SELECT tap.col_default_is('_caosdb_schema_unit_tests','files','file_key',NULL,''); +SELECT tap.col_charset_is('_caosdb_schema_unit_tests','files','file_key',NULL,''); +SELECT tap.col_collation_is('_caosdb_schema_unit_tests','files','file_key',NULL,''); -- COLUMN files.file_id @@ -923,7 +955,7 @@ SELECT tap.col_collation_is('_caosdb_schema_unit_tests','files','file_id',NULL,' -- COLUMN files.path SELECT tap.has_column('_caosdb_schema_unit_tests','files','path',''); -SELECT tap.col_column_type_is('_caosdb_schema_unit_tests','files','path','varchar(255)',''); +SELECT tap.col_column_type_is('_caosdb_schema_unit_tests','files','path','varchar(16175)',''); SELECT tap.col_extra_is('_caosdb_schema_unit_tests','files','path','',''); SELECT tap.col_default_is('_caosdb_schema_unit_tests','files','path',NULL,''); SELECT tap.col_charset_is('_caosdb_schema_unit_tests','files','path','utf8',''); @@ -934,7 +966,7 @@ SELECT tap.col_collation_is('_caosdb_schema_unit_tests','files','path','utf8_uni SELECT tap.has_column('_caosdb_schema_unit_tests','files','size',''); SELECT tap.col_column_type_is('_caosdb_schema_unit_tests','files','size','bigint(20) unsigned',''); SELECT tap.col_extra_is('_caosdb_schema_unit_tests','files','size','',''); -SELECT tap.col_default_is('_caosdb_schema_unit_tests','files','size',NULL,''); +SELECT tap.col_default_is('_caosdb_schema_unit_tests','files','size','NULL',''); SELECT tap.col_charset_is('_caosdb_schema_unit_tests','files','size',NULL,''); SELECT tap.col_collation_is('_caosdb_schema_unit_tests','files','size',NULL,''); @@ -957,7 +989,7 @@ SELECT tap.col_charset_is('_caosdb_schema_unit_tests','files','checked_timestamp SELECT tap.col_collation_is('_caosdb_schema_unit_tests','files','checked_timestamp',NULL,''); -- CONSTRAINTS -SELECT tap.constraints_are('_caosdb_schema_unit_tests','files','`PRIMARY`,`fil_file_id_entity`',''); +SELECT tap.constraints_are('_caosdb_schema_unit_tests','files','`PRIMARY`,`fil_file_id_entity`,`path`,`files_ibfk_1`',''); -- CONSTRAINT files.fil_file_id_entity @@ -972,6 +1004,19 @@ SELECT tap.has_constraint('_caosdb_schema_unit_tests','files','PRIMARY',''); SELECT tap.constraint_type_is('_caosdb_schema_unit_tests','files','PRIMARY','PRIMARY KEY',''); SELECT tap.col_is_pk('_caosdb_schema_unit_tests','files','`file_id`',''); +-- CONSTRAINT files.path + +SELECT tap.has_constraint('_caosdb_schema_unit_tests','files','path',''); +SELECT tap.constraint_type_is('_caosdb_schema_unit_tests','files','path','UNIQUE',''); + +-- CONSTRAINT files.files_ibfk_1 + +SELECT tap.has_constraint('_caosdb_schema_unit_tests','files','files_ibfk_1',''); +SELECT tap.constraint_type_is('_caosdb_schema_unit_tests','files','files_ibfk_1','FOREIGN KEY',''); +SELECT tap.fk_on_delete('_caosdb_schema_unit_tests','files','files_ibfk_1','RESTRICT',''); +SELECT tap.fk_on_update('_caosdb_schema_unit_tests','files','files_ibfk_1','RESTRICT',''); + + -- *************************************************************** -- TABLE _caosdb_schema_unit_tests.integer_data -- *************************************************************** diff --git a/tests/test_directory_patch.sql b/tests/test_directory_patch.sql index a77470485f967381920eccf01cbefb963c0c261d..24da84e58cc6c4a596d56a1a26461ca8b2b24bf2 100644 --- a/tests/test_directory_patch.sql +++ b/tests/test_directory_patch.sql @@ -6,30 +6,30 @@ CALL tap.no_plan(); -- SETUP INSERT INTO entities (id, role, acl) VALUES -(51, "FILE", 0), (52, "FILE", 0), (53, "FILE", 0), (54, "FILE", 0), (55, "FILE", 0), -(56, "FILE", 0); +(56, "FILE", 0), +(57, "FILE", 0); -INSERT INTO files (file_id, path, size, storageId) VALUES -(51, "file_at_root_a", 256, "file_at_root_a"), -(52, "file_at_root_b", 256, "file_at_root_b"), -(53, "level1/file_at_level1_a", 256, "level1/file_at_level1_a"), -(54, "level1/file_at_level1_b", 256, "level1/file_at_level1_b"), -(55, "level1/level2/file_at_level2_a", 256, "level1/level2/file_at_level2_a"), -(56, "level1/level2/file_at_level2_b", 256, "level1/level2/file_at_level2_b"); +INSERT INTO files (file_id, path, size, file_key) VALUES +(52, "file_at_root_a", 256, "file_at_root_a"), +(53, "file_at_root_b", 256, "file_at_root_b"), +(54, "level1/file_at_level1_a", 256, "level1/file_at_level1_a"), +(55, "level1/file_at_level1_b", 256, "level1/file_at_level1_b"), +(56, "level1/level2/file_at_level2_a", 256, "level1/level2/file_at_level2_a"), +(57, "level1/level2/file_at_level2_b", 256, "level1/level2/file_at_level2_b"); -SELECT tap.eq(COUNT(*), 6, "six rows in test_files") FROM files; + +SELECT tap.eq(COUNT(*), 7, "7 rows in test_files") FROM files; -- TEST _create_dirs CALL _create_dirs(); -SELECT * FROM files; -SELECT tap.eq(COUNT(*), 8, "8 rows in test_files") FROM files; +SELECT tap.eq(COUNT(*), 9, "9 rows in test_files") FROM files; SELECT tap.eq(COUNT(*), 1, "one dir level1") FROM files WHERE path="level1"; SELECT tap.eq(COUNT(*), 1, "one dir level1/level2") FROM files WHERE path="level1/level2";