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

add changelog and activate versioning for postgres

parent 46b7adb1
Branches master
No related tags found
No related merge requests found
Pipeline #134680 passed
# Changelog
Hier werden alle Änderungen dokumentiert.
### 2023-01-27 - version 0.3.0
## Fixed
- versioning can now be turned off in postgres-storage. An existing last frame/version will be overwritten with a keyframe if versioning is turned off.
(defproject wwsoftware/document-storage "0.2.9"
(defproject wwsoftware/document-storage "0.3.0"
:description "FIXME: write description"
:repositories [["internal" {:url "https://maven.leukipp.de/releases"
:username "anonymous"}]]
......
......@@ -44,10 +44,19 @@ SELECT document_id
-- :doc creates a new document frame record
INSERT INTO :i:repository-table
(document_id, data_type, data_encoding, version, reference, "data")
VALUES (:document-id, CAST(:type::varchar AS :i:ds-type-fqn), CAST(:encoding::varchar AS :i:ds-encoding-fqn), :version, :reference, :data)
VALUES (:document-id, CAST(:type::varchar AS :i:ds-type-fqn), CAST(:encoding::varchar AS :i:ds-encoding-fqn), :version, :reference, :data);
--;; TODO type cast is problematic with multiple storage schemas in one database
-- :name overwrite-document-frame! :! :n
-- :doc overwrite a document frame record given the version
UPDATE :i:repository-table
SET data_type = CAST(:type::varchar AS :i:ds-type-fqn),
data_encoding = CAST(:encoding::varchar AS :i:ds-encoding-fqn),
reference = :reference,
"data" = :data
WHERE document_id = :document-id AND version = :version;
-- :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
......
......@@ -19,8 +19,8 @@
(defn get-last-document-frame [storage document-id repository]
;;;TODO check if this can be speed up by using index in db
(when-let [frame (.run-query storage :get-last-document-frame
{:repository repository
:document-id document-id})]
{:repository repository
:document-id document-id})]
frame))
(defn get-last-document-version [storage document-id repository]
......@@ -74,6 +74,18 @@
:reference nil
:data doc})))
(defn overwrite-keyframe [storage document-id document version repository]
(let [doc (encoding/encode-document document)
version (or version 0)]
;;VALUES (:uuid, :document-id, :type, :encoding, :version, :reference, :data)
(.run-query storage :overwrite-document-frame!
{:repository repository
:document-id document-id
:type "key"
:encoding "nippy"
:version version
:reference nil
:data doc})))
(defn save-pframe [storage document-id doc last-version repository]
(let [last-doc (load-document storage document-id last-version repository)
......@@ -99,8 +111,12 @@
(cache/update-query-cache-document storage repository document-id document)
(let [save-result (if-let [last-version (get-last-document-version storage document-id repository)]
(if (or (true? (:force-keyframe options))
(false? (.versioned-repository? storage repository))
(= (:data-type last-version) :delete))
(save-keyframe storage document-id document (:version last-version) repository)
(let [version-num (:version last-version)]
(if (.versioned-repository? storage repository)
(save-keyframe storage document-id document version-num repository)
(overwrite-keyframe storage document-id document version-num repository)))
(save-pframe storage document-id document (:version last-version) repository))
(save-keyframe storage document-id document -1 repository))]
(.take queue)
......
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