storage/msglog: fixes, improvements, tests OK

This commit is contained in:
Helmut Merz 2024-07-28 17:42:14 +02:00
parent 777660a957
commit 484b3251d1
4 changed files with 21 additions and 14 deletions

View file

@ -6,12 +6,13 @@
(:use :common-lisp) (:use :common-lisp)
(:local-nicknames (:config :scopes/config) (:local-nicknames (:config :scopes/config)
(:core :scopes/core) (:core :scopes/core)
(:util :scopes/util)
(:alx :alexandria)) (:alx :alexandria))
(:export #:config (:export #:config
#:storage #:params #:setup #:storage #:params #:setup
#:qualified-table-name #:qualified-table-name
#:do-sql #:query #:drop-table #:do-sql #:query #:drop-table
#:normalize-keyword #:normalize-plist)) #:normalize-plist))
(in-package :scopes/storage) (in-package :scopes/storage)
@ -82,14 +83,11 @@
;;;; utilities ;;;; utilities
(defun normalize-keyword (kw)
(intern (string-upcase kw) :keyword))
(defun normalize-plist (pl) (defun normalize-plist (pl)
(let ((res nil)) (let ((res nil))
(alx:doplist (k v pl res) (alx:doplist (k v pl res)
(push v res) (push v res)
(push (normalize-keyword k) res)))) (push (util:to-keyword k) res))))
(defun ts-string (ts) (defun ts-string (ts)
(format nil "~a" (local-time:universal-to-timestamp ts))) (format nil "~a" (local-time:universal-to-timestamp ts)))

View file

@ -6,6 +6,8 @@
(:use :common-lisp) (:use :common-lisp)
(:local-nicknames (:shape :scopes/shape) (:local-nicknames (:shape :scopes/shape)
(:storage :scopes/storage) (:storage :scopes/storage)
(:util :scopes/util)
(:alx :alexandria)
(:jzon :com.inuoe.jzon)) (:jzon :com.inuoe.jzon))
(:export #:track #:trackid #:time-stamp (:export #:track #:trackid #:time-stamp
#:container #:insert #:container #:insert
@ -73,12 +75,13 @@
(defun setup-track (tr row) (defun setup-track (tr row)
;(log:info "tr: ~s, row: ~s" tr row) ;(log:info "tr: ~s, row: ~s" tr row)
(let ((hv (mapcar #'(lambda (x) (getf row x)) (shape:head-fields tr)))) (let ((hv (mapcar #'(lambda (x) (util:to-keyword (getf row x)))
(shape:head-fields tr))))
(setf (shape:head tr) hv) (setf (shape:head tr) hv)
(setf (trackid tr) (getf row :trackid)) (setf (trackid tr) (getf row :trackid))
(setf (time-stamp tr) (getf row :timestamp)) (setf (time-stamp tr) (getf row :timestamp))
(setf (shape:data tr) (setf (shape:data tr)
(jzon:parse (getf row :data) :key-fn #'storage:normalize-keyword)) (jzon:parse (getf row :data) :key-fn #'util:to-keyword))
tr)) tr))
(defun create-table (cont) (defun create-table (cont)

View file

@ -12,7 +12,8 @@
(:shape :scopes/shape) (:shape :scopes/shape)
(:storage :scopes/storage) (:storage :scopes/storage)
(:tracking :scopes/storage/tracking) (:tracking :scopes/storage/tracking)
(:t :scopes/testing)) (:t :scopes/testing)
(:alx :alexandria))
(:export #:run #:run-all #:run-postgres #:run-sqlite) (:export #:run #:run-all #:run-postgres #:run-sqlite)
(:import-from :scopes/testing #:deftest #:==)) (:import-from :scopes/testing #:deftest #:==))
@ -46,8 +47,8 @@
(setf cont (make-instance 'tracking:container :storage st)) (setf cont (make-instance 'tracking:container :storage st))
(storage:drop-table st :tracks) (storage:drop-table st :tracks)
(tracking:create-table cont) (tracking:create-table cont)
(setf tr (tracking:make-item cont "t01" "john")) (setf tr (tracking:make-item cont :t01 :john))
(== (shape:head tr) '("t01" "john")) (== (shape:head tr) '(:t01 :john))
(== (shape:head-plist tr) '(:username "john" :taskid "t01")) (== (shape:head-plist tr) '(:username "john" :taskid "t01"))
(== (shape:data tr) nil) (== (shape:data tr) nil)
(setf (gethash :desc data) "scopes/storage: queries") (setf (gethash :desc data) "scopes/storage: queries")
@ -55,7 +56,7 @@
(tracking:insert tr) (tracking:insert tr)
(== (tracking:trackid tr) 1) (== (tracking:trackid tr) 1)
(setf tr2 (tracking:get-track cont 1)) (setf tr2 (tracking:get-track cont 1))
(== (shape:head tr2) '("t01" "john")) (== (shape:head tr2) '(:t01 :john))
(== (gethash :desc (shape:data tr2)) "scopes/storage: queries") (== (gethash :desc (shape:data tr2)) "scopes/storage: queries")
)) ))
@ -66,9 +67,12 @@
(setf cont (msglog:make-container st)) (setf cont (msglog:make-container st))
(storage:drop-table st :messages) (storage:drop-table st :messages)
(tracking:create-table cont) (tracking:create-table cont)
(setf msg (message:create '(:test :data :field :info) :data '(:info "test data"))) (setf msg (message:create '(:test :data :field)
:data (alx:plist-hash-table '(:info "test data"))))
(setf pm (msglog:save msg cont)) (setf pm (msglog:save msg cont))
(== (tracking:trackid pm) 1) (== (tracking:trackid pm) 1)
(setf pm2 (tracking:get-track cont 1)) (setf pm2 (tracking:get-track cont 1))
(log:info "pm2: ~s" pm2) ;(log:info "pm2: ~s" pm2)
(== (shape:head pm2) '(:test :data :field nil))
(== (gethash :info (shape:data pm2)) "test data")
)) ))

View file

@ -23,7 +23,9 @@
(str:join sep (mapcar #'(lambda (s) (format nil pattern s)) k))))) (str:join sep (mapcar #'(lambda (s) (format nil pattern s)) k)))))
(defun to-keyword (s) (defun to-keyword (s)
(intern (string-upcase s) :keyword)) (if (string= s "")
nil
(intern (string-upcase s) :keyword)))
(defmacro loop-plist (plist kvar vvar &body body) (defmacro loop-plist (plist kvar vvar &body body)
`(loop for (,kvar ,vvar . _) on ,plist by #'cddr ,@body)) `(loop for (,kvar ,vvar . _) on ,plist by #'cddr ,@body))