/*
 * 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 ;