diff --git a/storage/storage.lisp b/storage/storage.lisp index 3a6630c..e7d8153 100644 --- a/storage/storage.lisp +++ b/storage/storage.lisp @@ -11,7 +11,7 @@ #:db-options #:db-params #:qualified-table-name #:do-sql #:query #:drop-table #:schema - #:normalize-plist)) + #:normalize-keyword #:normalize-plist)) (in-package :scopes/storage) @@ -90,7 +90,7 @@ ;;;; utilities (defun normalize-keyword (kw) - (intern (string-upcase (symbol-name kw)) :keyword)) + (intern (string-upcase kw) :keyword)) (defun normalize-plist (pl) (let ((res nil)) diff --git a/storage/tracking.lisp b/storage/tracking.lisp index 42b041d..a2ff0e0 100644 --- a/storage/tracking.lisp +++ b/storage/tracking.lisp @@ -54,7 +54,6 @@ (storage:timestamp-to-sql (engine track) ts))) (if data (setf (getf vl :data) (jzon:stringify data)))) vl)) - (defun insert (track) (ensure-timestamp track) @@ -72,11 +71,20 @@ (let* ((st (storage cont)) (table (storage:qualified-table-name st (table-name cont))) (cols (append (head-fields cont) '(:timestamp :data))) - (res (storage:normalize-plist (car (storage:query st + (row (storage:normalize-plist (car (storage:query st (sxql:select cols (sxql:from table) (sxql:where (:= :trackid trid)))))))) - res)) + (build-track cont row))) + +(defun build-track (cont row) + (let* ((hv (mapcar #'(lambda (x) (getf row x)) (head-fields cont))) + (tr (apply #'make-item cont hv))) + (setf (trackid tr) (getf row :trackid)) + (setf (time-stamp tr) (getf row :timestamp)) + (setf (data tr) + (jzon:parse (getf row :data) :key-fn #'storage:normalize-keyword)) + tr)) (defun create-table (cont) (let* diff --git a/test/test-storage.lisp b/test/test-storage.lisp index aae6b12..7bd5a56 100644 --- a/test/test-storage.lisp +++ b/test/test-storage.lisp @@ -38,7 +38,7 @@ (t:show-result))) (defun test-track (st) - (let (cont tr (data (make-hash-table :test 'equalp))) + (let (cont tr tr2 (data (make-hash-table))) (setf cont (make-instance 'tracking:container :storage st)) (storage:drop-table st :tracks) (tracking:create-table cont) @@ -50,5 +50,7 @@ (setf (tracking:data tr) data) (tracking:insert tr) (== (tracking:trackid tr) 1) - (print (tracking:get-track cont 1)) + (setf tr2 (tracking:get-track cont 1)) + (== (tracking:head tr2) '("t01" "john")) + (== (gethash :desc (tracking:data tr2)) "scopes/storage: queries") ))