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.
This commit is contained in:
Ludovic Courtès 2018-06-07 21:55:15 +02:00
parent c45477d2a1
commit ef1297e8c7
No known key found for this signature in database
GPG Key ID: 090B11993D9AEBB5
2 changed files with 46 additions and 51 deletions

View File

@ -157,30 +157,24 @@ ids of items referred to."
(last-insert-row-id db)) (last-insert-row-id db))
references))) references)))
;; XXX figure out caching of statement and database objects... later (define* (sqlite-register db #:key path (references '())
(define* (sqlite-register #:key db-file path (references '()) deriver hash nar-size)
deriver hash nar-size "Registers this stuff in DB. PATH is the store item to register and
(schema (sql-schema))) REFERENCES is the list of store items PATH refers to; DERIVER is the '.drv'
"Registers this stuff in a database specified by DB-FILE. PATH is the string that produced PATH, HASH is the base16-encoded Nix sha256 hash of
path of some store item, REFERENCES is a list of string paths which the store PATH (prefixed with \"sha256:\"), and NAR-SIZE is the size in bytes PATH after
item PATH refers to (they need to be already registered!), DERIVER is a string being converted to nar form.
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.
Every store item in REFERENCES must already be registered." Every store item in REFERENCES must already be registered."
(parameterize ((sql-schema schema)) (let ((id (update-or-insert db #:path path
(with-database db-file db #:deriver deriver
(let ((id (update-or-insert db #:path path #:hash hash
#:deriver deriver #:nar-size nar-size
#:hash hash #:time (time-second (current-time time-utc)))))
#:nar-size nar-size ;; Call 'path-id' on each of REFERENCES. This ensures we get a
#:time (time-second (current-time time-utc))))) ;; "non-NULL constraint" failure if one of REFERENCES is unregistered.
;; Call 'path-id' on each of REFERENCES. This ensures we get a (add-references db id
;; "non-NULL constraint" failure if one of REFERENCES is unregistered. (map (cut path-id db <>) references))))
(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? (when reset-timestamps?
(reset-timestamps real-path)) (reset-timestamps real-path))
(mkdir-p db-dir) (mkdir-p db-dir)
(sqlite-register (parameterize ((sql-schema schema))
#:db-file (string-append db-dir "/db.sqlite") (with-database (string-append db-dir "/db.sqlite") db
#:schema schema (sqlite-register
#:path to-register db
#:references references #:path to-register
#:deriver deriver #:references references
#:hash (string-append "sha256:" #:deriver deriver
(bytevector->base16-string hash)) #:hash (string-append "sha256:"
#:nar-size nar-size) (bytevector->base16-string hash))
#:nar-size nar-size)))
(when deduplicate? (when deduplicate?
(deduplicate real-path hash #:store store-dir))))) (deduplicate real-path hash #:store store-dir)))))

View File

@ -57,20 +57,20 @@
(call-with-temporary-output-file (call-with-temporary-output-file
(lambda (db-file port) (lambda (db-file port)
(delete-file db-file) (delete-file db-file)
(sqlite-register #:db-file db-file (with-database db-file db
#:path "/gnu/foo" (sqlite-register db
#:references '() #:path "/gnu/foo"
#:deriver "/gnu/foo.drv" #:references '()
#:hash (string-append "sha256:" (make-string 64 #\e)) #:deriver "/gnu/foo.drv"
#:nar-size 1234) #:hash (string-append "sha256:" (make-string 64 #\e))
(sqlite-register #:db-file db-file #:nar-size 1234)
#:path "/gnu/bar" (sqlite-register db
#:references '("/gnu/foo") #:path "/gnu/bar"
#:deriver "/gnu/bar.drv" #:references '("/gnu/foo")
#:hash (string-append "sha256:" (make-string 64 #\a)) #:deriver "/gnu/bar.drv"
#:nar-size 4321) #:hash (string-append "sha256:" (make-string 64 #\a))
(let ((path-id (@@ (guix store database) path-id))) #:nar-size 4321)
(with-database db-file db (let ((path-id (@@ (guix store database) path-id)))
(list (path-id db "/gnu/foo") (list (path-id db "/gnu/foo")
(path-id db "/gnu/bar"))))))) (path-id db "/gnu/bar")))))))
@ -83,12 +83,12 @@
(delete-file db-file) (delete-file db-file)
(catch 'sqlite-error (catch 'sqlite-error
(lambda () (lambda ()
(sqlite-register #:db-file db-file (with-database db-file db
#:path "/gnu/foo" (sqlite-register db #:path "/gnu/foo"
#:references '("/gnu/bar") #:references '("/gnu/bar")
#:deriver "/gnu/foo.drv" #:deriver "/gnu/foo.drv"
#:hash (string-append "sha256:" (make-string 64 #\e)) #:hash (string-append "sha256:" (make-string 64 #\e))
#:nar-size 1234) #:nar-size 1234))
#f) #f)
(lambda args (lambda args
(pk 'welcome-exception! args) (pk 'welcome-exception! args)