tracking: provide setup-select for queries

This commit is contained in:
Helmut Merz 2024-08-02 11:23:51 +02:00
parent 5930e8a594
commit cc7a5e27a8
2 changed files with 17 additions and 10 deletions

View file

@ -67,7 +67,7 @@
;(util:logd sql args)
(let* ((qp (dbi:prepare (conn st) sql))
(qx (dbi:execute qp args)))
(dbi:fetch-all qx))))
(mapcar #'normalize-plist (dbi:fetch-all qx)))))
(defun do-sql (st spec)
(multiple-value-bind (sql args) (sxql:yield spec)

View file

@ -69,18 +69,12 @@
(insert track new-data)
(update track new-data))))))
(defun query-one (cont crit &key (order-by '(:trackid)))
(defun query-one (cont crit &key order-by)
(util:lgd crit)
(let* ((tr (make-item cont))
(st (storage cont))
(table (storage:qualified-table-name st (table-name cont)))
(cols (cons :trackid (append (shape:head-fields tr) '(:timestamp :data))))
(row (storage:normalize-plist (car (storage:query st
(sxql:select cols
(sxql:from table)
(sxql:where crit)
(sxql:order-by (values-list order-by))
(sxql:limit 1)))))))
(row (car (storage:query st
(setup-select cont crit :order-by order-by :limit 1)))))
(setup-track tr row)))
(defun insert (track &optional data)
@ -106,6 +100,19 @@
;;;; auxiliary functions for queries, ...
(defun setup-select (cont crit &key order-by limit)
(let ((table (storage:qualified-table-name (storage cont) (table-name cont)))
(cols (cons :trackid (append (item-head-fields cont) '(:timestamp :data))))
(clauses))
(if limit
(push (sxql:limit limit) clauses))
(if order-by
(push (sxql:order-by (values-list order-by)) clauses))
(sxql:select cols
(sxql:from table)
(sxql:where crit)
(values-list clauses))))
(defun make-where (specs)
(let (crit)
(dolist (spec specs)