[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
14/19: database: 'sqlite-register' takes a database, not a file name.
From: |
Ludovic Courtès |
Subject: |
14/19: database: 'sqlite-register' takes a database, not a file name. |
Date: |
Thu, 14 Jun 2018 05:17:10 -0400 (EDT) |
civodul pushed a commit to branch master
in repository guix.
commit ef1297e8c74a0358d2538a5dd43d50cde7bf14a3
Author: Ludovic Courtès <address@hidden>
Date: Thu Jun 7 21:55:15 2018 +0200
database: 'sqlite-register' takes a database, not a file name.
* guix/store/database.scm (sqlite-register): Remove #:db-file and add
'db' parameter. Remove #:schema and 'parameterize'.
(register-path): Wrap 'sqlite-register' call in 'with-database' and in
'parameterize'.
* tests/store-database.scm ("new database")
("register-path with unregistered references"): Adjust accordingly.
---
guix/store/database.scm | 57 ++++++++++++++++++++++--------------------------
tests/store-database.scm | 40 ++++++++++++++++-----------------
2 files changed, 46 insertions(+), 51 deletions(-)
diff --git a/guix/store/database.scm b/guix/store/database.scm
index 67dfb8b..1e5e3bc 100644
--- a/guix/store/database.scm
+++ b/guix/store/database.scm
@@ -157,30 +157,24 @@ ids of items referred to."
(last-insert-row-id db))
references)))
-;; XXX figure out caching of statement and database objects... later
-(define* (sqlite-register #:key db-file path (references '())
- deriver hash nar-size
- (schema (sql-schema)))
- "Registers this stuff in a database specified by DB-FILE. PATH is the string
-path of some store item, REFERENCES is a list of string paths which the store
-item PATH refers to (they need to be already registered!), DERIVER is a string
-path of the derivation that created the store item PATH, HASH is the
-base16-encoded sha256 hash of the store item denoted by PATH (prefixed with
-\"sha256:\") after being converted to nar form, and NAR-SIZE is the size in
-bytes of the store item denoted by PATH after being converted to nar form.
+(define* (sqlite-register db #:key path (references '())
+ deriver hash nar-size)
+ "Registers this stuff in DB. PATH is the store item to register and
+REFERENCES is the list of store items PATH refers to; DERIVER is the '.drv'
+that produced PATH, HASH is the base16-encoded Nix sha256 hash of
+PATH (prefixed with \"sha256:\"), and NAR-SIZE is the size in bytes PATH after
+being converted to nar form.
Every store item in REFERENCES must already be registered."
- (parameterize ((sql-schema schema))
- (with-database db-file db
- (let ((id (update-or-insert db #:path path
- #:deriver deriver
- #:hash hash
- #:nar-size nar-size
- #:time (time-second (current-time
time-utc)))))
- ;; Call 'path-id' on each of REFERENCES. This ensures we get a
- ;; "non-NULL constraint" failure if one of REFERENCES is unregistered.
- (add-references db id
- (map (cut path-id db <>) references))))))
+ (let ((id (update-or-insert db #:path path
+ #:deriver deriver
+ #:hash hash
+ #:nar-size nar-size
+ #:time (time-second (current-time time-utc)))))
+ ;; Call 'path-id' on each of REFERENCES. This ensures we get a
+ ;; "non-NULL constraint" failure if one of REFERENCES is unregistered.
+ (add-references db id
+ (map (cut path-id db <>) references))))
;;;
@@ -267,15 +261,16 @@ be used internally by the daemon's build hook."
(when reset-timestamps?
(reset-timestamps real-path))
(mkdir-p db-dir)
- (sqlite-register
- #:db-file (string-append db-dir "/db.sqlite")
- #:schema schema
- #:path to-register
- #:references references
- #:deriver deriver
- #:hash (string-append "sha256:"
- (bytevector->base16-string hash))
- #:nar-size nar-size)
+ (parameterize ((sql-schema schema))
+ (with-database (string-append db-dir "/db.sqlite") db
+ (sqlite-register
+ db
+ #:path to-register
+ #:references references
+ #:deriver deriver
+ #:hash (string-append "sha256:"
+ (bytevector->base16-string hash))
+ #:nar-size nar-size)))
(when deduplicate?
(deduplicate real-path hash #:store store-dir)))))
diff --git a/tests/store-database.scm b/tests/store-database.scm
index 9562055..22c3566 100644
--- a/tests/store-database.scm
+++ b/tests/store-database.scm
@@ -57,20 +57,20 @@
(call-with-temporary-output-file
(lambda (db-file port)
(delete-file db-file)
- (sqlite-register #:db-file db-file
- #:path "/gnu/foo"
- #:references '()
- #:deriver "/gnu/foo.drv"
- #:hash (string-append "sha256:" (make-string 64 #\e))
- #:nar-size 1234)
- (sqlite-register #:db-file db-file
- #:path "/gnu/bar"
- #:references '("/gnu/foo")
- #:deriver "/gnu/bar.drv"
- #:hash (string-append "sha256:" (make-string 64 #\a))
- #:nar-size 4321)
- (let ((path-id (@@ (guix store database) path-id)))
- (with-database db-file db
+ (with-database db-file db
+ (sqlite-register db
+ #:path "/gnu/foo"
+ #:references '()
+ #:deriver "/gnu/foo.drv"
+ #:hash (string-append "sha256:" (make-string 64 #\e))
+ #:nar-size 1234)
+ (sqlite-register db
+ #:path "/gnu/bar"
+ #:references '("/gnu/foo")
+ #:deriver "/gnu/bar.drv"
+ #:hash (string-append "sha256:" (make-string 64 #\a))
+ #:nar-size 4321)
+ (let ((path-id (@@ (guix store database) path-id)))
(list (path-id db "/gnu/foo")
(path-id db "/gnu/bar")))))))
@@ -83,12 +83,12 @@
(delete-file db-file)
(catch 'sqlite-error
(lambda ()
- (sqlite-register #:db-file db-file
- #:path "/gnu/foo"
- #:references '("/gnu/bar")
- #:deriver "/gnu/foo.drv"
- #:hash (string-append "sha256:" (make-string 64 #\e))
- #:nar-size 1234)
+ (with-database db-file db
+ (sqlite-register db #:path "/gnu/foo"
+ #:references '("/gnu/bar")
+ #:deriver "/gnu/foo.drv"
+ #:hash (string-append "sha256:" (make-string 64
#\e))
+ #:nar-size 1234))
#f)
(lambda args
(pk 'welcome-exception! args)
- 04/19: build: Require Guile-SQLite3., (continued)
- 04/19: build: Require Guile-SQLite3., Ludovic Courtès, 2018/06/14
- 16/19: install: Use 'reset-timestamps' from (guix store database)., Ludovic Courtès, 2018/06/14
- 02/19: database: Fail registration when encountering unregistered references., Ludovic Courtès, 2018/06/14
- 08/19: database: Remove extra SQL parameter in 'update-or-insert'., Ludovic Courtès, 2018/06/14
- 05/19: database: Provide a way to specify the schema location., Ludovic Courtès, 2018/06/14
- 07/19: deduplicate: Fix a couple of thinkos., Ludovic Courtès, 2018/06/14
- 18/19: store: Remove 'register-path'., Ludovic Courtès, 2018/06/14
- 17/19: database: Allow for deterministic database construction., Ludovic Courtès, 2018/06/14
- 11/19: database: 'reset-timestamps' sets file permissions as well., Ludovic Courtès, 2018/06/14
- 03/19: store-copy: 'read-reference-graph' returns a list of records., Ludovic Courtès, 2018/06/14
- 14/19: database: 'sqlite-register' takes a database, not a file name.,
Ludovic Courtès <=
- 12/19: vm: 'expression->derivation-in-linux-vm' code can now use dlopen., Ludovic Courtès, 2018/06/14
- 10/19: database: Replace existing entries in Refs., Ludovic Courtès, 2018/06/14
- 15/19: database: Add 'register-items'., Ludovic Courtès, 2018/06/14
- 06/19: database: 'register-path' creates the database directory if needed., Ludovic Courtès, 2018/06/14
- 09/19: database: Add #:reset-timestamps? to 'register-path'., Ludovic Courtès, 2018/06/14
- 01/19: database: 'with-database' can now initialize new databases., Ludovic Courtès, 2018/06/14
- 13/19: install: Use (guix store database) instead of 'guix-register'., Ludovic Courtès, 2018/06/14
- 19/19: Remove 'guix-register' and its traces., Ludovic Courtès, 2018/06/14