store: database: Inline SQL to where it's used.
This makes the code easier to read, as you don't have to keep jumping between the two places. * guix/store/database.scm (path-id-sql, update-sql, insert-sql, add-reference-sql): Remove variables. (path-id, update-or-insert, add-references): Include SQL. Change-Id: I53b4ab973be8d0cd10a0f35ba25972f1c9680353
This commit is contained in:
parent
b914fb9b70
commit
cdd4a0c3c9
|
@ -178,13 +178,14 @@ If FILE doesn't exist, create it and initialize it as a new database. Pass
|
||||||
((#(id)) id)
|
((#(id)) id)
|
||||||
(_ #f))))
|
(_ #f))))
|
||||||
|
|
||||||
(define path-id-sql
|
|
||||||
"SELECT id FROM ValidPaths WHERE path = :path")
|
|
||||||
|
|
||||||
(define* (path-id db path)
|
(define* (path-id db path)
|
||||||
"If PATH exists in the 'ValidPaths' table, return its numerical
|
"If PATH exists in the 'ValidPaths' table, return its numerical
|
||||||
identifier. Otherwise, return #f."
|
identifier. Otherwise, return #f."
|
||||||
(let ((stmt (sqlite-prepare db path-id-sql #:cache? #t)))
|
(let ((stmt (sqlite-prepare
|
||||||
|
db
|
||||||
|
"
|
||||||
|
SELECT id FROM ValidPaths WHERE path = :path"
|
||||||
|
#:cache? #t)))
|
||||||
(sqlite-bind-arguments stmt #:path path)
|
(sqlite-bind-arguments stmt #:path path)
|
||||||
(let ((result (sqlite-fold cons '() stmt)))
|
(let ((result (sqlite-fold cons '() stmt)))
|
||||||
(sqlite-finalize stmt)
|
(sqlite-finalize stmt)
|
||||||
|
@ -192,14 +193,6 @@ identifier. Otherwise, return #f."
|
||||||
((#(id) . _) id)
|
((#(id) . _) id)
|
||||||
(_ #f)))))
|
(_ #f)))))
|
||||||
|
|
||||||
(define update-sql
|
|
||||||
"UPDATE ValidPaths SET hash = :hash, registrationTime = :time, deriver =
|
|
||||||
:deriver, narSize = :size WHERE id = :id")
|
|
||||||
|
|
||||||
(define insert-sql
|
|
||||||
"INSERT INTO ValidPaths (path, hash, registrationTime, deriver, narSize)
|
|
||||||
VALUES (:path, :hash, :time, :deriver, :size)")
|
|
||||||
|
|
||||||
(define-inlinable (assert-integer proc in-range? key number)
|
(define-inlinable (assert-integer proc in-range? key number)
|
||||||
(unless (integer? number)
|
(unless (integer? number)
|
||||||
(throw 'wrong-type-arg proc
|
(throw 'wrong-type-arg proc
|
||||||
|
@ -222,14 +215,25 @@ of course. Returns the row id of the row that was modified or inserted."
|
||||||
|
|
||||||
(let ((id (path-id db path)))
|
(let ((id (path-id db path)))
|
||||||
(if id
|
(if id
|
||||||
(let ((stmt (sqlite-prepare db update-sql #:cache? #t)))
|
(let ((stmt (sqlite-prepare
|
||||||
|
db
|
||||||
|
"
|
||||||
|
UPDATE ValidPaths
|
||||||
|
SET hash = :hash, registrationTime = :time, deriver = :deriver, narSize = :size
|
||||||
|
WHERE id = :id"
|
||||||
|
#:cache? #t)))
|
||||||
(sqlite-bind-arguments stmt #:id id
|
(sqlite-bind-arguments stmt #:id id
|
||||||
#:deriver deriver
|
#:deriver deriver
|
||||||
#:hash hash #:size nar-size #:time time)
|
#:hash hash #:size nar-size #:time time)
|
||||||
(sqlite-fold cons '() stmt)
|
(sqlite-fold cons '() stmt)
|
||||||
(sqlite-finalize stmt)
|
(sqlite-finalize stmt)
|
||||||
(last-insert-row-id db))
|
(last-insert-row-id db))
|
||||||
(let ((stmt (sqlite-prepare db insert-sql #:cache? #t)))
|
(let ((stmt (sqlite-prepare
|
||||||
|
db
|
||||||
|
"
|
||||||
|
INSERT INTO ValidPaths (path, hash, registrationTime, deriver, narSize)
|
||||||
|
VALUES (:path, :hash, :time, :deriver, :size)"
|
||||||
|
#:cache? #t)))
|
||||||
(sqlite-bind-arguments stmt
|
(sqlite-bind-arguments stmt
|
||||||
#:path path #:deriver deriver
|
#:path path #:deriver deriver
|
||||||
#:hash hash #:size nar-size #:time time)
|
#:hash hash #:size nar-size #:time time)
|
||||||
|
@ -237,13 +241,15 @@ of course. Returns the row id of the row that was modified or inserted."
|
||||||
(sqlite-finalize stmt)
|
(sqlite-finalize stmt)
|
||||||
(last-insert-row-id db)))))
|
(last-insert-row-id db)))))
|
||||||
|
|
||||||
(define add-reference-sql
|
|
||||||
"INSERT OR REPLACE INTO Refs (referrer, reference) VALUES (:referrer, :reference);")
|
|
||||||
|
|
||||||
(define (add-references db referrer references)
|
(define (add-references db referrer references)
|
||||||
"REFERRER is the id of the referring store item, REFERENCES is a list
|
"REFERRER is the id of the referring store item, REFERENCES is a list
|
||||||
ids of items referred to."
|
ids of items referred to."
|
||||||
(let ((stmt (sqlite-prepare db add-reference-sql #:cache? #t)))
|
(let ((stmt (sqlite-prepare
|
||||||
|
db
|
||||||
|
"
|
||||||
|
INSERT OR REPLACE INTO Refs (referrer, reference)
|
||||||
|
VALUES (:referrer, :reference)"
|
||||||
|
#:cache? #t)))
|
||||||
(for-each (lambda (reference)
|
(for-each (lambda (reference)
|
||||||
(sqlite-reset stmt)
|
(sqlite-reset stmt)
|
||||||
(sqlite-bind-arguments stmt #:referrer referrer
|
(sqlite-bind-arguments stmt #:referrer referrer
|
||||||
|
|
Loading…
Reference in New Issue