insert: use query form, return trackid and timestamp; timestamp: without TZ

This commit is contained in:
Helmut Merz 2024-05-16 08:27:22 +02:00
parent 6c36fdc72d
commit bee8d6d75e
3 changed files with 21 additions and 9 deletions

View file

@ -7,7 +7,7 @@
(:export #:*db-config*
#:make-engine #:make-storage
#:db-options #:db-params #:qualified-table-name
#:do-sql #:drop-table
#:do-sql #:query #:drop-table
#:schema))
(in-package :scopes/storage)
@ -54,9 +54,16 @@
(intern (format nil "~a.~a" schema (symbol-name tn)))
tn)))
(defun query (st spec)
(multiple-value-bind (sql args) (sxql:yield spec)
;(print sql)
(let* ((qp (dbi:prepare (conn st) sql))
(qx (dbi:execute qp args)))
(dbi:fetch-all qx))))
(defun do-sql (st spec)
(multiple-value-bind (sql args) (sxql:yield spec)
(print sql)
;(print sql)
(dbi:do-sql (conn st) sql args)))
(defun drop-table (st tn)

View file

@ -5,7 +5,7 @@
(defpackage :scopes/storage/tracking
(:use :common-lisp)
(:local-nicknames (:storage :scopes/storage))
(:export #:track #:head #:head-proplist #:time-stamp #:data
(:export #:track #:trackid #:head #:head-proplist #:time-stamp #:data
#:container
#:make-item
#:insert
@ -14,7 +14,7 @@
(in-package :scopes/storage/tracking)
(defclass track ()
((trackid :initform nil)
((trackid :accessor trackid :initform nil)
(head :accessor head :initarg :head)
(time-stamp :accessor time-stamp :initform nil)
(data :accessor data :initform nil)
@ -49,10 +49,14 @@
(defun insert (track)
(let* ((cont (container track))
(st (storage cont))
(table (storage:qualified-table-name st (table-name cont))))
(storage:do-sql st
(table (storage:qualified-table-name st (table-name cont)))
(res (car (storage:query st
(sxql:insert-into table
(apply #'sxql:make-clause ':set= (proplist track))))))
(apply #'sxql:make-clause ':set= (proplist track))
(sxql:returning :trackid :timestamp))))))
(setf (trackid track) (cadr res))
(setf (time-stamp track) (cadddr res))
track))
(defun create-table (cont)
(let*
@ -71,7 +75,7 @@
(nconc
`((trackid :type ,id-type :primary-key t :not-null t))
hf-def
`((timestamp :type timestamptz :not-null t :default current_timestamp)
`((timestamp :type timestamp :not-null t :default current_timestamp)
(data :type ,json-type :not-null t :default |'{}'|)))))
(create-indexes st table tn (indexes cont))))

View file

@ -47,4 +47,5 @@
(== (tracking:head-proplist tr) '(:username "john" :taskid "t01"))
(== (tracking:data tr) nil)
(tracking:insert tr)
(== (tracking:trackid tr) 1)
))