Skip to content
Snippets Groups Projects
Verified Commit 426e8bcd authored by Timm Fitschen's avatar Timm Fitschen
Browse files

fix problems from merge of versioning

parent 8ff0241d
Branches
No related tags found
1 merge request!12DRAFT: ENH: file system: core
#!/bin/bash
#
# ** header v3.0
# This file is a part of the CaosDB Project.
#
# Copyright (C) 2018 Research Group Biomedical Physics,
# Max-Planck-Institute for Dynamics and Self-Organization Göttingen
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
# ** end header
#
# Refactors the entities table and move all names to name_data
# Update mysql schema to version v3.0.0-rc1
NEW_VERSION="v4.0.0-rc1"
OLD_VERSION="v3.0.0-rc2"
if [ -z "$UTILSPATH" ]; then
UTILSPATH="../utils"
fi
. $UTILSPATH/patch_header.sh $*
check_version $OLD_VERSION
mysql_execute_file $PATCH_DIR/patch.sql
update_version $NEW_VERSION
success
-- USE _caosdb_schema_unit_tests;
-- REMOVE SQLITE datatype
DELETE FROM name_data WHERE entity_id = 50;
DELETE FROM entities WHERE id = 50;
ALTER TABLE files ADD UNIQUE (`path`);
ALTER TABLE files ADD COLUMN IF NOT EXISTS (
mimetype VARBINARY(255) DEFAULT NULL,
fileStorage VARBINARY(255) NOT NULL DEFAULT "DEFAULT",
storageId VARBINARY(255) DEFAULT NULL
);
ALTER TABLE archive_files ADD COLUMN IF NOT EXISTS (
mimetype VARBINARY(255) DEFAULT NULL,
fileStorage VARBINARY(255) NOT NULL DEFAULT "DEFAULT",
storageId VARBINARY(255) DEFAULT NULL,
checked_timestamp BIGINT DEFAULT NULL
);
ALTER TABLE entities MODIFY COLUMN `role` enum('RECORDTYPE','RECORD','FILE','DOMAIN','PROPERTY','DATATYPE','ROLE','QUERYTEMPLATE', 'DIRECTORY') COLLATE utf8_unicode_ci NOT NULL;
INSERT INTO entities (id, description, role, acl) VALUES (9, "The directory role.", "ROLE", 0);
INSERT INTO name_data (domain_id, entity_id, property_id, value, status, pidx) VALUES (0, 9, 20, "DIRECTORY", "FIX", 0);
UPDATE files SET storageId=path;
ALTER TABLE files MODIFY COLUMN storageId VARBINARY(255) NOT NULL;
DROP PROCEDURE IF EXISTS _create_dirs;
DELIMITER //
CREATE PROCEDURE _create_dirs()
BEGIN
DECLARE done BOOLEAN DEFAULT FALSE;
DECLARE _file_id INT UNSIGNED DEFAULT NULL;
DECLARE _path VARCHAR(255) DEFAULT NULL;
DECLARE dir_id INT UNSIGNED DEFAULT NULL;
DECLARE dir_path VARCHAR(255) DEFAULT "";
DECLARE dir_exists BOOLEAN DEFAULT FALSE;
DECLARE cur CURSOR FOR SELECT file_id, path FROM files;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cur;
loop1: LOOP
FETCH cur INTO _file_id, _path;
IF done THEN
LEAVE loop1;
END IF;
-- TODO
loop2: LOOP
SELECT REGEXP_SUBSTR(_path, CONCAT("(?U)^", dir_path, ".*/" )) INTO dir_path;
IF dir_path = "" THEN
SET dir_exists = FALSE;
SET done = FALSE;
LEAVE loop2;
END IF;
SELECT TRUE INTO dir_exists FROM files WHERE path = LEFT(dir_path, CHAR_LENGTH(dir_path)-1);
IF dir_exists IS TRUE THEN
SET dir_exists = FALSE;
ITERATE loop2;
END IF;
INSERT INTO entities (description, role, acl) VALUES (NULL, "DIRECTORY", 0);
SET dir_id = LAST_INSERT_ID();
INSERT INTO files (file_id, path, size, hash, checked_timestamp,
mimetype, fileStorage, storageId)
VALUES (dir_id, LEFT(dir_path, CHAR_LENGTH(dir_path)-1), 0,
NULL, 0, "inode/directory", "DEFAULT", LEFT(dir_path,
CHAR_LENGTH(dir_path)-1));
END LOOP;
END LOOP;
CLOSE cur;
END //
DELIMITER ;
CALL _create_dirs();
......@@ -55,7 +55,7 @@ BEGIN
SELECT e.child, IVersion AS child_iversion, e.parent
FROM isa_cache AS e
WHERE e.child = EntityID
AND e.rpath = CAST(EntityID AS CHAR);
AND e.rpath = CAST(EntityID AS CHAR) COLLATE utf8_unicode_ci;
END IF;
DELETE FROM isa_cache
......
......@@ -399,7 +399,11 @@ CREATE PROCEDURE setFileProperties (
in EntityID INT UNSIGNED,
in FilePath TEXT,
in FileSize BIGINT UNSIGNED,
in FileHash VARCHAR(255)
in FileHash VARCHAR(255),
in FileChecked BIGINT,
in FileMimetype VARBINARY(255),
in FileStorage VARBINARY(255),
in FileStorageId VARBINARY(65525)
)
BEGIN
DECLARE IVersion INT UNSIGNED DEFAULT NULL;
......@@ -409,8 +413,10 @@ BEGIN
WHERE e.entity_id = EntityID;
INSERT INTO archive_files (file_id, path, size, hash,
checked_timestamp, mimetype, fileStorage, storageId,
_iversion)
SELECT file_id, path, size, hash, IVersion AS _iversion
SELECT file_id, path, size, hash, checked_timestamp, mimetype,
fileStorage, storageId, IVersion AS _iversion
FROM files
WHERE file_id = EntityID;
END IF;
......@@ -418,8 +424,10 @@ BEGIN
DELETE FROM files WHERE file_id = EntityID;
IF FilePath IS NOT NULL THEN
INSERT INTO files (file_id, path, size, hash)
VALUES (EntityID, FilePath, FileSize, unhex(FileHash));
INSERT INTO files (file_id, path, size, hash, checked_timestamp,
mimetype, fileStorage, storageId)
VALUES (EntityID, FilePath, FileSize, unhex(FileHash), FileChecked,
FileMimetype, FileStorage, FileStorageId);
END IF;
END //
......
......@@ -46,7 +46,12 @@ Select
A tuple (EntityID, Version)
*/
CREATE PROCEDURE db_2_0.insertEntity(in EntityName VARCHAR(255), in EntityDesc TEXT, in EntityRole VARCHAR(255), in ACL VARBINARY(65525))
CREATE PROCEDURE db_2_0.insertEntity(
in EntityName VARCHAR(255),
in EntityDesc TEXT,
in EntityRole VARCHAR(255),
in ACL VARBINARY(65525)
)
BEGIN
DECLARE NewEntityID INT UNSIGNED DEFAULT NULL;
DECLARE NewACLID INT UNSIGNED DEFAULT NULL;
......
This diff is collapsed.
......@@ -31,18 +31,20 @@ CALL tap.no_plan();
-- #####################################################################
-- SETUP
-- switch off versioning
DELETE FROM feature_config WHERE _key = "ENTITY_VERSIONING";
DELETE FROM entity_version;
DELETE FROM transactions;
INSERT INTO transactions (srid,seconds,nanos,username,realm) VALUES
("SRIDbla", 1234, 2345, "me", "home"),
("SRIDblub", 2345, 3465, "me", "home"),
("SRIDblieb", 3456, 4576, "you", "home");
SET @SRID = "SRIDbla";
CALL insertEntity("EntityName", "EntityDescription", "RECORDTYPE", "{}");
SET @EntityID=99;
SET @PropertyID=11;
SET @Value=50;
-- switch off versioning
DELETE FROM feature_config WHERE _key = "ENTITY_VERSIONING";
SELECT id INTO @Value FROM entities WHERE description = "EntityDescription";
-- TEST insertEntityProperty without Versioning
CALL insertEntityProperty(0, @EntityID, @PropertyID, "reference_data", @Value,
......@@ -52,7 +54,7 @@ CALL insertEntityProperty(0, @EntityID, @PropertyID, "reference_data", @Value,
SELECT tap.eq(0, domain_id, "domain ok") FROM reference_data;
SELECT tap.eq(99, entity_id, "entity ok") FROM reference_data;
SELECT tap.eq(11, property_id, "property ok") FROM reference_data;
SELECT tap.eq(50, value, "value ok") FROM reference_data;
SELECT tap.eq(@VALUE, value, "value ok") FROM reference_data;
SELECT tap.eq("FIX", status, "status ok") FROM reference_data;
SELECT tap.eq("0", pidx, "pidx ok") FROM reference_data;
SELECT tap.eq(NULL, value_iversion, "value_iversion ok") FROM reference_data;
......@@ -69,7 +71,7 @@ INSERT INTO feature_config (_key, _value) VALUES ("ENTITY_VERSIONING", "ENABLED"
-- TEST insertEntityProperty with Versioning - REFERENCE HEAD
SET @VALUE="50";
SELECT id INTO @Value FROM entities WHERE description = "EntityDescription";
CALL insertEntityProperty(0, @EntityID, @PropertyID, "reference_data", @Value,
NULL, "FIX", NULL, NULL, NULL, NULL, 0);
......@@ -77,7 +79,7 @@ CALL insertEntityProperty(0, @EntityID, @PropertyID, "reference_data", @Value,
SELECT tap.eq(0, domain_id, "domain ok") FROM reference_data;
SELECT tap.eq(99, entity_id, "entity ok") FROM reference_data;
SELECT tap.eq(11, property_id, "property ok") FROM reference_data;
SELECT tap.eq(50, value, "value ok") FROM reference_data;
SELECT tap.eq(@Value, value, "value ok") FROM reference_data;
SELECT tap.eq("FIX", status, "status ok") FROM reference_data;
SELECT tap.eq("0", pidx, "pidx ok") FROM reference_data;
SELECT tap.eq(value_iversion, NULL, "value_iversion ok") FROM reference_data;
......@@ -86,47 +88,51 @@ DELETE FROM reference_data WHERE domain_id=0 AND entity_id=99;
-- TEST insertEntityProperty with Versioning - Reference version
CALL insert_single_child_version(50, "hashbla", "versionbla", NULL, "SRIDbla");
CALL insert_single_child_version(50, "hashblub", "versionblub", "versionbla", "SRIDblub");
SELECT id INTO @Value FROM entities WHERE description = "EntityDescription";
CALL insert_single_child_version(@Value, "hashbla", "versionbla", NULL, "SRIDbla");
CALL insert_single_child_version(@Value, "hashblub", "versionblub", "versionbla", "SRIDblub");
SET @VALUE="50@versionbla";
CALL insertEntityProperty(0, @EntityID, @PropertyID, "reference_data", @Value,
NULL, "FIX", NULL, NULL, NULL, NULL, 0);
SET @VersionedValue=CONCAT(@Value, "@versionbla");
CALL insertEntityProperty(0, @EntityID, @PropertyID, "reference_data",
@VersionedValue, NULL, "FIX", NULL, NULL, NULL, NULL, 0);
SELECT tap.eq(0, domain_id, "domain ok") FROM reference_data;
SELECT tap.eq(99, entity_id, "entity ok") FROM reference_data;
SELECT tap.eq(11, property_id, "property ok") FROM reference_data;
SELECT tap.eq(50, value, "value ok") FROM reference_data;
SELECT tap.eq(@Value, value, "value ok") FROM reference_data;
SELECT tap.eq("FIX", status, "status ok") FROM reference_data;
SELECT tap.eq("0", pidx, "pidx ok") FROM reference_data;
SELECT tap.eq(value_iversion, "1", "value_iversion ok") FROM reference_data;
DELETE FROM reference_data WHERE domain_id=0 AND entity_id=99;
SET @VALUE="50@versionblub";
CALL insertEntityProperty(0, @EntityID, @PropertyID, "reference_data", @Value,
NULL, "FIX", NULL, NULL, NULL, NULL, 0);
SET @VersionedValue=CONCAT(@Value, "@versionblub");
CALL insertEntityProperty(0, @EntityID, @PropertyID, "reference_data",
@VersionedValue, NULL, "FIX", NULL, NULL, NULL, NULL, 0);
-- TODO switch expected/actual
SELECT tap.eq(0, domain_id, "domain ok") FROM reference_data;
SELECT tap.eq(99, entity_id, "entity ok") FROM reference_data;
SELECT tap.eq(11, property_id, "property ok") FROM reference_data;
SELECT tap.eq(50, value, "value ok") FROM reference_data;
SELECT tap.eq(@Value, value, "value ok") FROM reference_data;
SELECT tap.eq("FIX", status, "status ok") FROM reference_data;
SELECT tap.eq("0", pidx, "pidx ok") FROM reference_data;
SELECT tap.eq(value_iversion, "2", "value_iversion ok") FROM reference_data;
-- invalid values throw errors
SET @VALUE="50@";
SET @VersionedValue=CONCAT(@Value, "@");
CALL tap._assert_throws('
CALL insertEntityProperty(0, @EntityID, @PropertyID, "reference_data", @Value,
NULL, "FIX", NULL, NULL, NULL, NULL, 0)', "@ but no version id");
CALL insertEntityProperty(0, @EntityID, @PropertyID, "reference_data",
@VersionedValue, NULL, "FIX", NULL, NULL, NULL, NULL, 0)', "@ but no
version id");
SET @VALUE="50@non-existing-version";
SET @VersionedValue=CONCAT(@Value, "@non-existing-version");
CALL tap._assert_throws('
CALL insertEntityProperty(0, @EntityID, @PropertyID, "reference_data", @Value,
NULL, "FIX", NULL, NULL, NULL, NULL, 0)', "non-existing-version id");
CALL insertEntityProperty(0, @EntityID, @PropertyID, "reference_data",
@VersionedValue, NULL, "FIX", NULL, NULL, NULL, NULL, 0)',
"non-existing-version id");
-- #####################################################################
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment