database: Provide a way to specify the schema location.
* guix/store/database.scm (sqlite-register): Add #:schema. Parameterize 'sql-schema' based on this. (register-path): Add #:schema and pass it to 'sqlite-register'.
This commit is contained in:
parent
c5a2e1ffcb
commit
33fddb763a
|
@ -88,7 +88,7 @@ If FILE doesn't exist, create it and initialize it as a new database."
|
||||||
;; XXX: (sqlite3) currently lacks bindings for 'sqlite3_last_insert_rowid'.
|
;; XXX: (sqlite3) currently lacks bindings for 'sqlite3_last_insert_rowid'.
|
||||||
;; Work around that.
|
;; Work around that.
|
||||||
(let* ((stmt (sqlite-prepare db "SELECT last_insert_rowid();"
|
(let* ((stmt (sqlite-prepare db "SELECT last_insert_rowid();"
|
||||||
#:cache? #t))
|
#:cache? #t))
|
||||||
(result (sqlite-fold cons '() stmt)))
|
(result (sqlite-fold cons '() stmt)))
|
||||||
(sqlite-finalize stmt)
|
(sqlite-finalize stmt)
|
||||||
(match result
|
(match result
|
||||||
|
@ -157,7 +157,8 @@ ids of items referred to."
|
||||||
|
|
||||||
;; XXX figure out caching of statement and database objects... later
|
;; XXX figure out caching of statement and database objects... later
|
||||||
(define* (sqlite-register #:key db-file path (references '())
|
(define* (sqlite-register #:key db-file path (references '())
|
||||||
deriver hash nar-size)
|
deriver hash nar-size
|
||||||
|
(schema (sql-schema)))
|
||||||
"Registers this stuff in a database specified by DB-FILE. PATH is the string
|
"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
|
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
|
item PATH refers to (they need to be already registered!), DERIVER is a string
|
||||||
|
@ -167,16 +168,17 @@ base16-encoded sha256 hash of the store item denoted by PATH (prefixed with
|
||||||
bytes of the store item denoted by PATH after being converted to nar form.
|
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."
|
||||||
(with-database db-file db
|
(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))))))
|
||||||
|
|
||||||
|
|
||||||
;;;
|
;;;
|
||||||
|
@ -221,7 +223,8 @@ it's a directory."
|
||||||
|
|
||||||
(define* (register-path path
|
(define* (register-path path
|
||||||
#:key (references '()) deriver prefix
|
#:key (references '()) deriver prefix
|
||||||
state-directory (deduplicate? #t))
|
state-directory (deduplicate? #t)
|
||||||
|
(schema (sql-schema)))
|
||||||
;; Priority for options: first what is given, then environment variables,
|
;; Priority for options: first what is given, then environment variables,
|
||||||
;; then defaults. %state-directory, %store-directory, and
|
;; then defaults. %state-directory, %store-directory, and
|
||||||
;; %store-database-directory already handle the "environment variables /
|
;; %store-database-directory already handle the "environment variables /
|
||||||
|
@ -267,6 +270,7 @@ be used internally by the daemon's build hook."
|
||||||
(reset-timestamps real-path)
|
(reset-timestamps real-path)
|
||||||
(sqlite-register
|
(sqlite-register
|
||||||
#:db-file (string-append db-dir "/db.sqlite")
|
#:db-file (string-append db-dir "/db.sqlite")
|
||||||
|
#:schema schema
|
||||||
#:path to-register
|
#:path to-register
|
||||||
#:references references
|
#:references references
|
||||||
#:deriver deriver
|
#:deriver deriver
|
||||||
|
|
Loading…
Reference in New Issue