Skip to content
Snippets Groups Projects
Commit 213809d6 authored by Bruno Burke's avatar Bruno Burke :hamburger:
Browse files

dspostgres: fix list-documents for deleted documents

parent fe7eeb85
No related branches found
No related tags found
No related merge requests found
Pipeline #96496 passed
(defproject wwsoftware/document-storage "0.2.5"
(defproject wwsoftware/document-storage "0.2.6"
:description "FIXME: write description"
:repositories [["internal" {:url "https://leukipp.fh-muenster.de:9082/releases"
:username "anonymous"}]]
......
......@@ -37,20 +37,22 @@ SELECT * FROM :i:repository-table WHERE document_id = :document-id AND version =
-- :doc retrieve all document-ids
SELECT document_id
FROM :i:repository-table
WHERE document_id NOT IN (SELECT document_id FROM :i:repository-table WHERE data_type = 'delete')
GROUP BY document_id
-- :name create-document-frame! :! :n
-- :doc creates a new document frame record
INSERT INTO :i:repository-table
(document_id, data_type, data_encoding, version, reference, "data")
VALUES (:document-id, :type, :encoding, :version, :reference, :data)
VALUES (:document-id, CAST(:type AS :i:ds-type-fqn), :encoding, :version, :reference, :data)
--;; TODO type cast is problematic with multiple storage schemas in one database
-- :name get-last-document-frame :? :1
-- :doc retrieve the last document-frame given the document-id.
SELECT * FROM :i:repository-table WHERE document_id = :document-id order by "version" desc limit 1
-- :name select-relevant-document-frames :? :*
-- :doc retrieve all necessary document frames to restore the latest document version
with RECURSIVE rec AS (
......
......@@ -25,7 +25,8 @@
(defn get-last-document-version [storage document-id repository]
(when-let [frame (get-last-document-frame storage document-id repository)]
(:version frame)))
{:version (:version frame)
:data-type (keyword (:data_type frame))}))
(defn restore-document-version [storage document-id version repository]
(when-let [frames (.run-query storage :select-relevant-document-frames-by-version
......@@ -52,7 +53,8 @@
(defn load-document
([storage document-id repository]
(when-let [last-document-version (get-last-document-version storage document-id repository)]
(load-document storage document-id last-document-version repository)))
(when-not (= (:data-type last-document-version) :delete)
(load-document storage document-id (:version last-document-version) repository))))
([storage document-id version repository]
(let [restore-document-fn #(restore-document-version storage document-id version repository)]
(if (.cached-repository? storage repository)
......@@ -90,9 +92,10 @@
(defn save-document [storage document-id document repository options]
(cache/update-query-cache-document storage repository document-id document)
(if-let [last-version (get-last-document-version storage document-id repository)]
(if (true? (:force-keyframe options))
(save-keyframe storage document-id document last-version repository)
(save-pframe storage document-id document last-version repository))
(if (or (true? (:force-keyframe options))
(= (:data-type last-version) :delete))
(save-keyframe storage document-id document (:version last-version) repository)
(save-pframe storage document-id document (:version last-version) repository))
(save-keyframe storage document-id document -1 repository)))
......@@ -102,6 +105,6 @@
:document-id document-id
:type :ds-type/delete
:encoding :ds-encoding/edn
:version (inc (get-last-document-version storage document-id repository))
:version (inc (:version (get-last-document-version storage document-id repository)))
:reference nil
:data (encoding/encode-document "")}))
......@@ -34,8 +34,8 @@
;;;Create Testdocument in each repository
(.save-document @ds-atom docname1 new-document1 repo1name)
(.save-document @ds-atom docname2 new-document2 repo2name)
(let [last-version1 (pgdocs/get-last-document-version @ds-atom docname1 repo1name)
last-version2 (pgdocs/get-last-document-version @ds-atom docname2 repo2name)]
(let [last-version1 (:version (pgdocs/get-last-document-version @ds-atom docname1 repo1name))
last-version2 (:version (pgdocs/get-last-document-version @ds-atom docname2 repo2name))]
;;; Check if inital versions are not cached
(is (nil? (pgcache/get-cached-document @ds-atom repo1name docname1 last-version1)) "Initial documents are not cached")
(is (nil? (pgcache/get-cached-document @ds-atom repo2name docname2 last-version2)) "Initial documents are not cached")
......
......@@ -14,7 +14,10 @@
(.save-document @ds-atom id structure repo)
(is (some #{id} (.list-documents @ds-atom :testrepo)))
(is (= structure
(.load-document @ds-atom id repo))))))
(.load-document @ds-atom id repo)))
(.delete-document @ds-atom id repo)
(is (not (.load-document @ds-atom id repo)) "Deleted documents should not be loadable with .load-document")
(is (not (some #{id} (.list-documents @ds-atom repo))) "Deleted documents should not be listed with .list-documents"))))
(defn test-versioning [ds-atom]
(testing "update document and check if changes are versioned"
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment