From 8aed67f0575589838a0f5127030e12a251046801 Mon Sep 17 00:00:00 2001 From: Helmut Merz Date: Fri, 9 Aug 2024 17:42:05 +0200 Subject: [PATCH] storage/folder: + items (and auxiliary functions) --- storage/folder.lisp | 17 ++++++++++++++--- storage/tracking.lisp | 7 +++++-- test/test-storage.lisp | 5 ++++- 3 files changed, 23 insertions(+), 6 deletions(-) diff --git a/storage/folder.lisp b/storage/folder.lisp index 1ed624c..fbacf5f 100644 --- a/storage/folder.lisp +++ b/storage/folder.lisp @@ -5,7 +5,7 @@ (:local-nicknames (:shape :scopes/shape) (:tracking :scopes/storage/tracking) (:util :scopes/util)) - (:export #:folder #:root #:create + (:export #:folder #:root #:create #:items #:make-container)) (in-package :scopes/storage/folder) @@ -15,7 +15,7 @@ (tracking:key-fields :initform '(:parentid :name)))) (defun indexes (cont) - '((parentid name ref) (ref))) + '((parentid name) (ref))) (defun make-container (storage) (make-instance 'tracking:container @@ -31,5 +31,16 @@ (defun create (name parent) (let ((cont (tracking:container parent)) - (pid (write-to-string (tracking:trackid parent)))) + (pid (tracking:id-str parent))) (tracking:save (tracking:make-item cont pid name)))) + +(defun items (parent) + (query parent `((:parentid ,(id parent))))) + +;;;; auxiliary functions + +(defun id (f) + (tracking:id-str f)) + +(defun query (f spec) + (tracking:query (tracking:container f) (tracking:make-where spec))) diff --git a/storage/tracking.lisp b/storage/tracking.lisp index 3435582..ce842ea 100644 --- a/storage/tracking.lisp +++ b/storage/tracking.lisp @@ -8,9 +8,9 @@ (:util :scopes/util) (:alx :alexandria) (:jzon :com.inuoe.jzon)) - (:export #:track #:trackid #:key-fields #:timestamp + (:export #:track #:trackid #:id-str #:key-fields #:timestamp #:container #:make-container #:table-name #:storage #:make-item - #:get-track #:query-last #:query-one #:query + #:get-track #:query-last #:query-one #:query #:make-where #:save #:insert #:update #:create-indexes #:create-table)) @@ -33,6 +33,9 @@ (util:filter-plist hv kf) hv))) +(defun id-str (tr) + (write-to-string (trackid tr))) + (defun uid (tr) (format nil "~(~a~)-~a" (short-name (container tr)) (trackid tr))) diff --git a/test/test-storage.lisp b/test/test-storage.lisp index a3cb781..6941e34 100644 --- a/test/test-storage.lisp +++ b/test/test-storage.lisp @@ -85,7 +85,7 @@ (deftest test-folder (ctx) (let ((st (storage:storage ctx)) - cont root f1 f2 f3) + cont root f1 f2 f3 r1) (setf cont (folder:make-container st)) (storage:drop-table st :folders) (tracking:create-table cont) @@ -97,4 +97,7 @@ (== (shape:head-value f1 :parentid) "1") (setf (shape:head-value f1 :ref) :dummy-0) (tracking:save f1) + (setf r1 (folder:items root)) + (== (length r1) 1) + (== (shape:head-value (car r1) :ref) :dummy-0) ))