From 35348f3fdbf28960b0d18103249629cd03372de7 Mon Sep 17 00:00:00 2001 From: Helmut Merz Date: Tue, 14 May 2024 16:36:53 +0200 Subject: [PATCH] work in progress: insert track; provide (and use) item-factory slot in container --- storage/storage.lisp | 6 +++--- storage/tracking.lisp | 24 +++++++++++++++++++----- test/test-storage.lisp | 4 +++- 3 files changed, 25 insertions(+), 9 deletions(-) diff --git a/storage/storage.lisp b/storage/storage.lisp index 637099a..cdec34c 100644 --- a/storage/storage.lisp +++ b/storage/storage.lisp @@ -54,10 +54,10 @@ (intern (format nil "~a.~a" schema (symbol-name tn))) tn))) -(defun do-sql (st spec) - (let ((sql (sxql:yield spec))) +(defun do-sql (st spec) + (multiple-value-bind (sql args) (sxql:yield spec) (print sql) - (dbi:do-sql (conn st) sql))) + (dbi:do-sql (conn st) sql args))) (defun drop-table (st tn) (do-sql st (sxql:drop-table tn :if-exists t))) diff --git a/storage/tracking.lisp b/storage/tracking.lisp index 797d27b..2634a1e 100644 --- a/storage/tracking.lisp +++ b/storage/tracking.lisp @@ -6,7 +6,9 @@ (:use :common-lisp) (:local-nicknames (:storage :scopes/storage)) (:export #:track #:time-stamp #:data - #:container + #:container + #:make-item + #:insert #:create-indexes #:create-table)) (in-package :scopes/storage/tracking) @@ -15,13 +17,25 @@ ((head) (time-stamp :reader time-stamp :accessor time-stamp!) (data :accessor data :initform nil) - (container :initarg :container))) + (container :reader container :initarg :container))) (defclass container () - ((storage :reader storage :initarg :storage) - (table-name :reader table-name :initform :tracks) + ((item-factory :initform #'(lambda (cont) (make-instance 'track :container cont))) (head-fields :reader head-fields :initform '(taskid username)) - (indexes :reader indexes :initform '((taskid username) (username))))) + (table-name :reader table-name :initform :tracks) + (indexes :reader indexes :initform '((taskid username) (username))) + (storage :reader storage :initarg :storage))) + +(defun make-item (cont) + (funcall (slot-value cont 'item-factory) cont)) + +(defun insert (track) + (let* ((cont (container track)) + (st (storage cont)) + (table (storage:qualified-table-name st (table-name cont)))) + (storage:do-sql st + (sxql:insert-into table + (sxql:set= :taskid "t01"))))) (defun create-table (cont) (let* diff --git a/test/test-storage.lisp b/test/test-storage.lisp index fb3e1dd..3df0f1a 100644 --- a/test/test-storage.lisp +++ b/test/test-storage.lisp @@ -39,7 +39,9 @@ (defun test-track (st) (let* ((cont (make-instance 'tracking:container :storage st)) - (tr (make-instance 'tracking:track :container cont))) + ;;(tr (make-instance 'tracking:track :container cont))) + (tr (tracking:make-item cont))) (storage:drop-table st :testing.tracks) (tracking:create-table cont) + (tracking:insert tr) (== (tracking:data tr) nil)))