summaryrefslogtreecommitdiff
path: root/guix-data-service/database.scm
diff options
context:
space:
mode:
Diffstat (limited to 'guix-data-service/database.scm')
-rw-r--r--guix-data-service/database.scm40
1 files changed, 40 insertions, 0 deletions
diff --git a/guix-data-service/database.scm b/guix-data-service/database.scm
new file mode 100644
index 0000000..ba7cd64
--- /dev/null
+++ b/guix-data-service/database.scm
@@ -0,0 +1,40 @@
+;;; Guix Data Service -- Information about Guix over time
+;;; Copyright © 2019 Christopher Baines <mail@cbaines.net>
+;;;
+;;; 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
+;;; <http://www.gnu.org/licenses/>.
+
+(define-module (guix-data-service database)
+ #:use-module (squee)
+ #:export (with-postgresql-connection))
+
+;; TODO This isn't exported for some reason
+(define pg-conn-finish
+ (@@ (squee) pg-conn-finish))
+
+(define (with-postgresql-connection f)
+ (define paramstring
+ (or (getenv "GUIX_DATA_SERVICE_DATABASE_PARAMSTRING")
+ "dbname=guix_data_service user=guix_data_service"))
+
+ (let* ((conn (connect-to-postgres-paramstring paramstring)))
+ (with-throw-handler
+ #t
+ (lambda ()
+ (let ((result (f conn)))
+ (pg-conn-finish conn)
+ result))
+ (lambda (key . args)
+ (pg-conn-finish conn)))))
+