From 40fb1793e1bd6e0a15f872bb22ddfcacf2d07bad Mon Sep 17 00:00:00 2001
From: Timm Fitschen <t.fitschen@indiscale.com>
Date: Thu, 3 Feb 2022 16:06:37 +0100
Subject: [PATCH] WIP: file system

---
 procedures/entityVersioning.sql    | 11 ++---
 procedures/insertFSODescriptor.sql | 69 ------------------------------
 procedures/retrieveEntity.sql      | 19 ++++----
 procedures/retrieveSubentity.sql   | 19 --------
 4 files changed, 17 insertions(+), 101 deletions(-)
 delete mode 100644 procedures/insertFSODescriptor.sql

diff --git a/procedures/entityVersioning.sql b/procedures/entityVersioning.sql
index 505bbea..6bec560 100644
--- a/procedures/entityVersioning.sql
+++ b/procedures/entityVersioning.sql
@@ -450,7 +450,8 @@ CREATE PROCEDURE setFileProperties (
     in FileMimetype VARBINARY(255),
     in FileStorageId VARBINARY(255),
     in FileKey VARBINARY(40000),
-    in FileParentID INT UNSIGNED
+    in FileParentID INT UNSIGNED,
+    in FileHashAlgo VARCHAR(255)
 )
 BEGIN
     DECLARE IVersion INT UNSIGNED DEFAULT NULL;
@@ -461,9 +462,9 @@ BEGIN
 
         INSERT INTO archive_files (file_id, path, size, hash,
                 checked_timestamp, mimetype, file_storage_id, file_key,
-                _iversion)
+                _iversion, hash_algorithm)
             SELECT file_id, path, size, hash, checked_timestamp, mimetype,
-                file_storage_id, file_key, IVersion AS _iversion
+                file_storage_id, file_key, IVersion AS _iversion, hash_algorithm
             FROM files
             WHERE file_id = FileID;
     END IF;
@@ -472,9 +473,9 @@ BEGIN
 
     IF FilePath IS NOT NULL THEN
         INSERT INTO files (file_id, path, size, hash, checked_timestamp,
-                mimetype, file_storage_id, file_key)
+                mimetype, file_storage_id, file_key, hash_algorithm)
             VALUES (FileID, FilePath, FileSize, unhex(FileHash), FileChecked,
-                FileMimetype, FileStorageId, FileKey);
+                FileMimetype, FileStorageId, FileKey, FileHashAlgo);
     END IF;
 
 END //
diff --git a/procedures/insertFSODescriptor.sql b/procedures/insertFSODescriptor.sql
deleted file mode 100644
index ac693d8..0000000
--- a/procedures/insertFSODescriptor.sql
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * This file is a part of the CaosDB Project.
- *
- * Copyright (C) 2021 IndiScale GmbH <info@indiscale.com>
- * Copyright (C) 2021 Timm Fitschen <t.fitschen@indiscale>
- *
- * 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/>.
- */
-
-
-DROP PROCEDURE IF EXISTS db_5_0.insertFSODescriptor;
-delimiter //
-/**
- * Insert a FSODescriptor
- *
- * Parameters
- * ----------
- * FileID
- *   The entity's id.
- * FileHash
- *   The SHA512 Hash of the file (or NULL for directories).
- * FileCheckedTimestamp
- *   The timestamp when the hash was last checked.
- * FileSize
- *   The byte size (or NULL for directories).
- * FilePath
- *   The path of the object.
- * FileMimetype
- *   The mimetype (use "inode/directory" for directories, use NULL for unknown)
- * FileStorageID
- *   The ID of the back-end file storage where this object is located.
- * FileKey
- *   The file storage key of this object.
- * FileParentID
- *   The entity id of the parent directory (or NULL).
- */
-CREATE PROCEDURE db_5_0.insertFSODescriptor(
-    in FileID INT UNSIGNED,
-    in FileHash VARCHAR(255),
-    in FileCheckedTimestamp BIGINT,
-    in FileSize BIGINT UNSIGNED,
-    in FilePath VARCHAR(5000),
-    in FileMimetype VARBINARY(255),
-    in FileStorageID VARBINARY(255),
-    in FileKey VARBINARY(40000),
-    in FileParentID INT UNSIGNED
-)
-BEGIN
-
-    INSERT INTO files
-            (file_id, parent_directory, hash, checked_timestamp, size, path,
-             mimetype, file_storage_id, file_key)
-        VALUES (FileID, FileParentID, unhex(FileHash), FileCheckedTimestamp,
-        FileSize, FilePath, FileMimetype, FileStorageID, FileKey);
-
-END;
-//
-delimiter ;
diff --git a/procedures/retrieveEntity.sql b/procedures/retrieveEntity.sql
index 7b29217..8fb7197 100644
--- a/procedures/retrieveEntity.sql
+++ b/procedures/retrieveEntity.sql
@@ -46,21 +46,23 @@ drop procedure if exists db_5_0.retrieveEntity //
  * ResultSet
  * ---------
  * Tuple of (DatatypeID, Collection, EntityID, EntityName, EntityDesc,
- *           EntityRole, FileSize, FilePath, FileHash, FileHashChecked,
- *           FileMimetype, FileStorageID, FileKey, FileParentID, ACL, Version)
+ *           EntityRole, FileSize, FilePath, FileHash, FileHashAlgo,
+ *           FileHashChecked, FileMimetype, FileStorageID, FileKey,
+ *           FileParentID, ACL, Version)
  */
 create procedure db_5_0.retrieveEntity(
     in EntityID INT UNSIGNED,
     in Version VARBINARY(255))
 retrieveEntityBody: BEGIN
-    DECLARE FilePath VARCHAR(5000) DEFAULT NULL;
+    DECLARE FilePath VARCHAR(15920) DEFAULT NULL;
     DECLARE FileParentID INT UNSIGNED DEFAULT NULL;
     DECLARE FileSize BIGINT UNSIGNED DEFAULT NULL;
     DECLARE FileHash VARCHAR(255) DEFAULT NULL;
+    DECLARE FileHashAlgo VARCHAR(255) DEFAULT NULL;
     DECLARE FileHashChecked BIGINT DEFAULT NULL;
     DECLARE FileMimetype VARBINARY(255) DEFAULT NULL;
     DECLARE FileStorageID VARBINARY(255) DEFAULT NULL;
-    DECLARE FileKey VARBINARY(40000) DEFAULT NULL;
+    DECLARE FileKey VARBINARY(15920) DEFAULT NULL;
     DECLARE DatatypeID INT UNSIGNED DEFAULT NULL;
     DECLARE CollectionName VARCHAR(255) DEFAULT NULL;
     DECLARE IsHead BOOLEAN DEFAULT TRUE;
@@ -87,8 +89,8 @@ retrieveEntityBody: BEGIN
                 LEAVE retrieveEntityBody;
             END IF;
 
-            SELECT path, size, hex(hash), checked_timestamp,  mimetype, file_storage_id, file_key
-                INTO FilePath, FileSize, FileHash, FileHashChecked, FileMimetype, FileStorageID, FileKey
+            SELECT path, size, hex(hash), hash_algorithm, checked_timestamp,  mimetype, file_storage_id, file_key
+                INTO FilePath, FileSize, FileHash, FileHashAlgo, FileHashChecked, FileMimetype, FileStorageID, FileKey
                 FROM archive_files
                 WHERE file_id = EntityID
                 AND _iversion = IVersion
@@ -152,8 +154,8 @@ retrieveEntityBody: BEGIN
         END IF;
     END IF;
 
-    SELECT path, parent_directory, size, hex(hash), checked_timestamp, mimetype, file_storage_id, file_key
-        INTO FilePath, FileParentID, FileSize, FileHash, FileHashChecked, FileMimetype, FileStorageID, FileKey
+    SELECT path, parent_directory, size, hex(hash), hash_algorithm, checked_timestamp, mimetype, file_storage_id, file_key
+        INTO FilePath, FileParentID, FileSize, FileHash, FileHashAlgo, FileHashChecked, FileMimetype, FileStorageID, FileKey
         FROM files
         WHERE file_id = EntityID
         LIMIT 1;
@@ -188,6 +190,7 @@ retrieveEntityBody: BEGIN
         FileSize AS FileSize,
         FilePath AS FilePath,
         FileHash AS FileHash,
+        FileHashAlgo AS FileHashAlgo,
         FileHashChecked AS FileHashChecked,
         FileMimetype as FileMimetype,
         FileStorageID as FileStorageID,
diff --git a/procedures/retrieveSubentity.sql b/procedures/retrieveSubentity.sql
index 406d668..eae01c6 100644
--- a/procedures/retrieveSubentity.sql
+++ b/procedures/retrieveSubentity.sql
@@ -23,25 +23,6 @@
 DELIMITER //
 DROP PROCEDURE IF EXISTS db_5_0.retrieveSubEntity //
 /**
-CREATE PROCEDURE db_5_0.retrieveSubEntity(in EntityID INT UNSIGNED, in DomainID INT UNSIGNED)
-BEGIN
-	DECLARE FilePath VARCHAR(255) DEFAULT NULL;
-	DECLARE FileSize VARCHAR(255) DEFAULT NULL;
-	DECLARE FileHash VARCHAR(255) DEFAULT NULL;
-	
-	Select path, size, hex(hash) into FilePath, FileSize, FileHash from files where file_id = EntityID LIMIT 1;
-		Select DomainID as DomainID,
-			EntityID as EntityID, 
-			e.name as EntityName, 
-			e.description as EntityDesc, 
-			e.role as EntityRole, 
-			FileSize as FileSize, 
-			FilePath as FilePath, 
-			FileHash as FileHash 
-		from entities e where id = EntityID LIMIT 1;
-
-END;
-//
 
 **/
 DELIMITER ;
-- 
GitLab