aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--nar-herder/database.scm46
1 files changed, 31 insertions, 15 deletions
diff --git a/nar-herder/database.scm b/nar-herder/database.scm
index a8a043c..e170d64 100644
--- a/nar-herder/database.scm
+++ b/nar-herder/database.scm
@@ -111,8 +111,6 @@ CREATE TABLE narinfos (
added_at TEXT
);
-CREATE UNIQUE INDEX narinfos_store_hash ON narinfos (substr(store_path, 12, 32));
-
CREATE TABLE narinfo_files (
narinfo_id INTEGER NOT NULL REFERENCES narinfos (id),
size INTEGER NOT NULL,
@@ -120,9 +118,6 @@ CREATE TABLE narinfo_files (
url TEXT NOT NULL
);
-CREATE INDEX narinfo_files_narinfo_id ON narinfo_files (narinfo_id);
-CREATE INDEX narinfo_files_url ON narinfo_files (url);
-
CREATE TABLE narinfo_references (
narinfo_id INTEGER NOT NULL REFERENCES narinfos (id),
store_path TEXT NOT NULL
@@ -134,8 +129,6 @@ CREATE TABLE tags (
value TEXT NOT NULL
);
-CREATE UNIQUE INDEX tags_index ON tags (key, value);
-
CREATE TABLE narinfo_tags (
narinfo_id INTEGER NOT NULL REFERENCES narinfos (id),
tag_id INTEGER NOT NULL REFERENCES tags (id)
@@ -155,9 +148,6 @@ CREATE TABLE cached_narinfo_files (
compression TEXT
);
-CREATE INDEX cached_narinfo_files_narinfo_id
- ON cached_narinfo_files (narinfo_id);
-
CREATE TABLE scheduled_narinfo_removal (
narinfo_id INTEGER PRIMARY KEY ASC REFERENCES narinfos (id),
removal_datetime TEXT NOT NULL
@@ -217,10 +207,7 @@ CREATE TABLE cached_narinfo_files (
narinfo_id INTEGER NOT NULL REFERENCES narinfos (id),
size INTEGER NOT NULL,
compression TEXT NOT NULL
-);
-
-CREATE INDEX cached_narinfo_files_narinfo_id
- ON cached_narinfo_files (narinfo_id);"))
+);"))
(unless (column-exists? db "narinfos" "added_at")
(sqlite-exec
@@ -247,6 +234,22 @@ CREATE TABLE scheduled_cached_narinfo_removal (
(sqlite-exec
db
+ "
+CREATE UNIQUE INDEX IF NOT EXISTS
+ narinfos_store_hash ON narinfos (substr(store_path, 12, 32));")
+
+ (sqlite-exec
+ db
+ "CREATE UNIQUE INDEX IF NOT EXISTS
+ tags_index ON tags (key, value);")
+
+ (sqlite-exec
+ db
+ "CREATE INDEX IF NOT EXISTS cached_narinfo_files_narinfo_id
+ ON cached_narinfo_files (narinfo_id);")
+
+ (sqlite-exec
+ db
"CREATE INDEX IF NOT EXISTS narinfo_tags_narinfo_id
ON narinfo_tags (narinfo_id);")
@@ -583,12 +586,25 @@ PRAGMA optimize;")))
(apply values vals))))
(define (dump-database database name)
+ (define (strip-db name)
+ (let ((db (db-open name)))
+ (let ((tables-to-clear
+ '("cached_narinfo_files")))
+ (for-each
+ (lambda (table)
+ (sqlite-exec db (simple-format #f "DELETE FROM ~A;" table)))
+ tables-to-clear))
+
+ (sqlite-close db)))
+
(call-with-worker-thread
(database-reader-thread-channel database)
(lambda (db)
(sqlite-exec
db
- (string-append "VACUUM INTO '" name "';")))))
+ (string-append "VACUUM INTO '" name "';"))
+
+ (strip-db name))))
(define (last-insert-rowid db)
(let ((statement