work in progress: insert track; provide (and use) item-factory slot in container
This commit is contained in:
parent
4dab1785a5
commit
35348f3fdb
3 changed files with 25 additions and 9 deletions
|
@ -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)))
|
||||||
|
|
|
@ -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*
|
||||||
|
|
|
@ -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)))
|
||||||
|
|
Loading…
Add table
Reference in a new issue