work in progress: insert track; provide (and use) item-factory slot in container

This commit is contained in:
Helmut Merz 2024-05-14 16:36:53 +02:00
parent 4dab1785a5
commit 35348f3fdb
3 changed files with 25 additions and 9 deletions

View file

@ -54,10 +54,10 @@
(intern (format nil "~a.~a" schema (symbol-name tn))) (intern (format nil "~a.~a" schema (symbol-name tn)))
tn))) tn)))
(defun do-sql (st spec) (defun do-sql (st spec)
(let ((sql (sxql:yield spec))) (multiple-value-bind (sql args) (sxql:yield spec)
(print sql) (print sql)
(dbi:do-sql (conn st) sql))) (dbi:do-sql (conn st) sql args)))
(defun drop-table (st tn) (defun drop-table (st tn)
(do-sql st (sxql:drop-table tn :if-exists t))) (do-sql st (sxql:drop-table tn :if-exists t)))

View file

@ -6,7 +6,9 @@
(:use :common-lisp) (:use :common-lisp)
(:local-nicknames (:storage :scopes/storage)) (:local-nicknames (:storage :scopes/storage))
(:export #:track #:time-stamp #:data (:export #:track #:time-stamp #:data
#:container #:container
#:make-item
#:insert
#:create-indexes #:create-table)) #:create-indexes #:create-table))
(in-package :scopes/storage/tracking) (in-package :scopes/storage/tracking)
@ -15,13 +17,25 @@
((head) ((head)
(time-stamp :reader time-stamp :accessor time-stamp!) (time-stamp :reader time-stamp :accessor time-stamp!)
(data :accessor data :initform nil) (data :accessor data :initform nil)
(container :initarg :container))) (container :reader container :initarg :container)))
(defclass container () (defclass container ()
((storage :reader storage :initarg :storage) ((item-factory :initform #'(lambda (cont) (make-instance 'track :container cont)))
(table-name :reader table-name :initform :tracks)
(head-fields :reader head-fields :initform '(taskid username)) (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) (defun create-table (cont)
(let* (let*

View file

@ -39,7 +39,9 @@
(defun test-track (st) (defun test-track (st)
(let* ((cont (make-instance 'tracking:container :storage 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) (storage:drop-table st :testing.tracks)
(tracking:create-table cont) (tracking:create-table cont)
(tracking:insert tr)
(== (tracking:data tr) nil))) (== (tracking:data tr) nil)))