Skip to content
Snippets Groups Projects
Commit 2cda2f22 authored by Quazgar's avatar Quazgar
Browse files

Merge branch 'f-version-history' into 'dev'

EHN: version history

See merge request caosdb/caosdb-mysqlbackend!19
parents 5fb99009 2ba2c7e8
No related branches found
No related tags found
No related merge requests found
...@@ -62,8 +62,11 @@ unittests: ...@@ -62,8 +62,11 @@ unittests:
build-testenv: build-testenv:
tags: [ cached-dind ] tags: [ cached-dind ]
image: docker:19.03 image: docker:19.03
only:
- web
- triggers
stage: setup stage: setup
script: script:
- cd .docker - cd .docker
- docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
# use here general latest or specific branch latest... # use here general latest or specific branch latest...
......
...@@ -13,6 +13,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ...@@ -13,6 +13,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Changed ### ### Changed ###
* `retrieveEntity` does not return the columns `VersionSeconds` and
`VersionNanos` anymore.
* `get_version_history` returns two additional columns, `child_username` and
`child_realm`.
* Added a `versioned` flag to the following procedures: * Added a `versioned` flag to the following procedures:
* `applyBackReference` * `applyBackReference`
* `applyIDFilter` * `applyIDFilter`
......
#!/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
# Copyright (C) 2020 IndiScale GmbH <info@indiscale.com>
# Copyright (C) 2020 Timm Fitschen <t.fitschen@indiscale.com>
#
# 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
#
# Update mysql schema to version v4.0.0-rc1
NEW_VERSION="v4.0.0-rc2"
OLD_VERSION="v4.0.0-rc1"
if [ -z "$UTILSPATH" ]; then
UTILSPATH="../utils"
fi
. $UTILSPATH/patch_header.sh $*
check_version $OLD_VERSION
# nothing to do, just new implementations for the procedures
update_version $NEW_VERSION
success
...@@ -330,7 +330,8 @@ END; ...@@ -330,7 +330,8 @@ END;
DROP PROCEDURE IF EXISTS db_2_0.get_version_history // DROP PROCEDURE IF EXISTS db_2_0.get_version_history //
/** /**
* Select version timestamps of an entity. * Select the complete transaction history of an entity (Who created which
* version and when).
* *
* Parameters * Parameters
* ---------- * ----------
...@@ -339,8 +340,8 @@ DROP PROCEDURE IF EXISTS db_2_0.get_version_history // ...@@ -339,8 +340,8 @@ DROP PROCEDURE IF EXISTS db_2_0.get_version_history //
* *
* Selects * Selects
* ------- * -------
* Tuples (child, parent, child_seconds, child_nanos). `child` and `parent` are * Tuples (child, parent, child_seconds, child_nanos, child_username,
* version IDs. * child_realm). `child` and `parent` are version IDs.
*/ */
CREATE PROCEDURE db_2_0.get_version_history( CREATE PROCEDURE db_2_0.get_version_history(
in EntityID INT UNSIGNED) in EntityID INT UNSIGNED)
...@@ -349,7 +350,9 @@ BEGIN ...@@ -349,7 +350,9 @@ BEGIN
SELECT c.version AS child, SELECT c.version AS child,
NULL as parent, NULL as parent,
t.seconds AS child_seconds, t.seconds AS child_seconds,
t.nanos AS child_nanos t.nanos AS child_nanos,
t.username AS child_username,
t.realm AS child_realm
FROM entity_version AS c INNER JOIN transactions as t FROM entity_version AS c INNER JOIN transactions as t
ON ( c.srid = t.srid ) ON ( c.srid = t.srid )
WHERE c.entity_id = EntityID WHERE c.entity_id = EntityID
...@@ -363,7 +366,9 @@ BEGIN ...@@ -363,7 +366,9 @@ BEGIN
UNION SELECT c.version AS child, UNION SELECT c.version AS child,
p.version AS parent, p.version AS parent,
t.seconds AS child_seconds, t.seconds AS child_seconds,
t.nanos AS child_nanos t.nanos AS child_nanos,
t.username AS child_username,
t.realm AS child_realm
FROM entity_version AS p FROM entity_version AS p
INNER JOIN entity_version as c INNER JOIN entity_version as c
INNER JOIN transactions AS t INNER JOIN transactions AS t
......
...@@ -43,6 +43,10 @@ drop procedure if exists db_2_0.retrieveEntity // ...@@ -43,6 +43,10 @@ drop procedure if exists db_2_0.retrieveEntity //
* `HEAD` for the latest version or as `HEAD~n`, which retrieves the n-th * `HEAD` for the latest version or as `HEAD~n`, which retrieves the n-th
* ancestor of `HEAD`. * ancestor of `HEAD`.
* *
* ResultSet
* ---------
* Tuple of (Datatype, Collection, EntityID, EntityName, EntityDesc,
* EntityRole, FileSize, FilePath, FileHash, ACL, Version)
*/ */
create procedure db_2_0.retrieveEntity( create procedure db_2_0.retrieveEntity(
in EntityID INT UNSIGNED, in EntityID INT UNSIGNED,
...@@ -53,8 +57,6 @@ retrieveEntityBody: BEGIN ...@@ -53,8 +57,6 @@ retrieveEntityBody: BEGIN
DECLARE FileHash VARCHAR(255) DEFAULT NULL; DECLARE FileHash VARCHAR(255) DEFAULT NULL;
DECLARE DatatypeID INT UNSIGNED DEFAULT NULL; DECLARE DatatypeID INT UNSIGNED DEFAULT NULL;
DECLARE CollectionName VARCHAR(255) DEFAULT NULL; DECLARE CollectionName VARCHAR(255) DEFAULT NULL;
DECLARE VersionSeconds BIGINT UNSIGNED DEFAULT NULL;
DECLARE VersionNanos INT(10) UNSIGNED DEFAULT NULL;
DECLARE IsHead BOOLEAN DEFAULT TRUE; DECLARE IsHead BOOLEAN DEFAULT TRUE;
DECLARE IVersion INT UNSIGNED DEFAULT NULL; DECLARE IVersion INT UNSIGNED DEFAULT NULL;
...@@ -70,14 +72,6 @@ retrieveEntityBody: BEGIN ...@@ -70,14 +72,6 @@ retrieveEntityBody: BEGIN
SELECT get_head_version(EntityID) = Version INTO IsHead; SELECT get_head_version(EntityID) = Version INTO IsHead;
END IF; END IF;
SELECT t.seconds, t.nanos
INTO VersionSeconds, VersionNanos
FROM entity_version AS e
INNER JOIN transactions AS t
ON ( e.srid = t.srid )
WHERE e.entity_id = EntityID
AND e.version = Version;
IF IsHead IS FALSE THEN IF IsHead IS FALSE THEN
SET IVersion=get_iversion(EntityID, Version); SET IVersion=get_iversion(EntityID, Version);
...@@ -136,9 +130,7 @@ retrieveEntityBody: BEGIN ...@@ -136,9 +130,7 @@ retrieveEntityBody: BEGIN
FilePath AS FilePath, FilePath AS FilePath,
FileHash AS FileHash, FileHash AS FileHash,
(SELECT acl FROM entity_acl AS a WHERE a.id = e.acl) AS ACL, (SELECT acl FROM entity_acl AS a WHERE a.id = e.acl) AS ACL,
Version AS Version, Version AS Version
VersionSeconds AS VersionSeconds,
VersionNanos AS VersionNanos
FROM archive_entities AS e FROM archive_entities AS e
WHERE e.id = EntityID WHERE e.id = EntityID
AND e._iversion = IVersion AND e._iversion = IVersion
...@@ -187,9 +179,7 @@ retrieveEntityBody: BEGIN ...@@ -187,9 +179,7 @@ retrieveEntityBody: BEGIN
FilePath AS FilePath, FilePath AS FilePath,
FileHash AS FileHash, FileHash AS FileHash,
(SELECT acl FROM entity_acl AS a WHERE a.id = e.acl) AS ACL, (SELECT acl FROM entity_acl AS a WHERE a.id = e.acl) AS ACL,
Version AS Version, Version AS Version
VersionSeconds AS VersionSeconds,
VersionNanos AS VersionNanos
FROM entities e WHERE id = EntityID LIMIT 1; FROM entities e WHERE id = EntityID LIMIT 1;
END; END;
// //
......
...@@ -143,6 +143,9 @@ SELECT tap.eq(count(*), 1, "after updateEntity, one entity in archive_entities") ...@@ -143,6 +143,9 @@ SELECT tap.eq(count(*), 1, "after updateEntity, one entity in archive_entities")
FROM archive_entities; FROM archive_entities;
-- TEST get_version_history
CALL get_version_history(@EntityID);
-- TEST retrieveEntity -- TEST retrieveEntity
SELECT version INTO @x FROM entity_version SELECT version INTO @x FROM entity_version
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment