From c252d1cb30682c73993da5933c7705b8f0200184 Mon Sep 17 00:00:00 2001 From: Christopher Baines Date: Fri, 23 Apr 2021 18:42:40 +0100 Subject: Actually add the system module --- guix-data-service/model/system.scm | 57 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 guix-data-service/model/system.scm (limited to 'guix-data-service') diff --git a/guix-data-service/model/system.scm b/guix-data-service/model/system.scm new file mode 100644 index 0000000..e64e7f5 --- /dev/null +++ b/guix-data-service/model/system.scm @@ -0,0 +1,57 @@ +;;; Guix Data Service -- Information about Guix over time +;;; Copyright © 2019, 2020, 2021 Christopher Baines +;;; +;;; This program is free software: you can redistribute it and/or +;;; modify it under the terms of the GNU Affero General Public License +;;; as published by the Free Software Foundation, either version 3 of +;;; the License, or (at your option) any later version. +;;; +;;; This program is distributed in the hope that it will be useful, +;;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +;;; Affero General Public License for more details. +;;; +;;; You should have received a copy of the GNU Affero General Public +;;; License along with this program. If not, see +;;; . + +(define-module (guix-data-service model system) + #:use-module (srfi srfi-1) + #:use-module (ice-9 vlist) + #:use-module (ice-9 match) + #:use-module (squee) + #:use-module (guix-data-service model utils) + #:export (system->system-id + list-systems)) + +(define system->system-id-cache + (make-hash-table)) + +(define systems-cache #f) + +(define (system->system-id conn system) + (let ((cached-value (hash-ref system->system-id-cache + system))) + (or cached-value + (match (insert-missing-data-and-return-all-ids + conn + "systems" + '(system) + `((,system))) + ((id) + (hash-set! system->system-id-cache + system + id) + (set! systems-cache #f) + id))))) + +(define (list-systems conn) + (if systems-cache + systems-cache + (let ((systems + (map car + (exec-query + conn + "SELECT system FROM systems ORDER BY system")))) + (set! systems-cache systems) + systems))) -- cgit v1.2.3