diff options
author | Eelco Dolstra <e.dolstra@tudelft.nl> | 2010-02-18T13·48+0000 |
---|---|---|
committer | Eelco Dolstra <e.dolstra@tudelft.nl> | 2010-02-18T13·48+0000 |
commit | a053d2d8e53f2967c64ab2b204727e4c27f06c0e (patch) | |
tree | 31e40ad0c7777ee4782ffb5accd7097128877c55 /src/libstore | |
parent | dbddac0fe91072b402ccb3801c952e3159f0cba4 (diff) |
* Add the deriver to the ValidPaths table. In principle we could now
store all the derivers of a path efficiently. But that opens a big can of worms with respect to garbage collector semantics.
Diffstat (limited to 'src/libstore')
-rw-r--r-- | src/libstore/local-store.cc | 31 | ||||
-rw-r--r-- | src/libstore/schema.sql | 3 |
2 files changed, 21 insertions, 13 deletions
diff --git a/src/libstore/local-store.cc b/src/libstore/local-store.cc index 03c5d76b377e..35391f3aaf77 100644 --- a/src/libstore/local-store.cc +++ b/src/libstore/local-store.cc @@ -1217,19 +1217,14 @@ void LocalStore::upgradeStore6() PathSet validPaths = queryValidPaths(); + if (sqlite3_exec(db, "begin;", 0, 0, 0) != SQLITE_OK) + throw SQLiteError(db, "running `begin' command"); + sqlite3_stmt * registerStmt; - if (sqlite3_prepare_v2(db, "insert into ValidPaths (path, hash, registrationTime) values (?, ?, ?);", + if (sqlite3_prepare_v2(db, "insert into ValidPaths (path, hash, registrationTime, deriver) values (?, ?, ?, ?);", -1, ®isterStmt, 0) != SQLITE_OK) throw SQLiteError(db, "creating statement"); - sqlite3_stmt * addRefStmt; - if (sqlite3_prepare_v2(db, "insert into Refs (referrer, reference) values (?, ?);", - -1, &addRefStmt, 0) != SQLITE_OK) - throw SQLiteError(db, "creating statement"); - - if (sqlite3_exec(db, "begin;", 0, 0, 0) != SQLITE_OK) - throw SQLiteError(db, "running `begin' command"); - std::map<Path, sqlite3_int64> pathToId; foreach (PathSet::iterator, i, validPaths) { @@ -1244,6 +1239,13 @@ void LocalStore::upgradeStore6() throw SQLiteError(db, "binding argument 2"); if (sqlite3_bind_int(registerStmt, 3, info.registrationTime) != SQLITE_OK) throw SQLiteError(db, "binding argument 3"); + if (info.deriver != "") { + if (sqlite3_bind_text(registerStmt, 4, info.deriver.c_str(), -1, SQLITE_TRANSIENT) != SQLITE_OK) + throw SQLiteError(db, "binding argument 4"); + } else { + if (sqlite3_bind_null(registerStmt, 4) != SQLITE_OK) + throw SQLiteError(db, "binding argument 4"); + } if (sqlite3_step(registerStmt) != SQLITE_DONE) throw SQLiteError(db, "registering valid path in database"); @@ -1252,8 +1254,16 @@ void LocalStore::upgradeStore6() std::cerr << "."; } + if (sqlite3_finalize(registerStmt) != SQLITE_OK) + throw SQLiteError(db, "finalizing statement"); + std::cerr << "|"; + sqlite3_stmt * addRefStmt; + if (sqlite3_prepare_v2(db, "insert into Refs (referrer, reference) values (?, ?);", + -1, &addRefStmt, 0) != SQLITE_OK) + throw SQLiteError(db, "creating statement"); + foreach (PathSet::iterator, i, validPaths) { ValidPathInfo info = queryPathInfo(*i, true); @@ -1278,9 +1288,6 @@ void LocalStore::upgradeStore6() if (sqlite3_exec(db, "commit;", 0, 0, 0) != SQLITE_OK) throw SQLiteError(db, "running `commit' command"); - if (sqlite3_finalize(registerStmt) != SQLITE_OK) - throw SQLiteError(db, "finalizing statement"); - if (sqlite3_finalize(addRefStmt) != SQLITE_OK) throw SQLiteError(db, "finalizing statement"); diff --git a/src/libstore/schema.sql b/src/libstore/schema.sql index 3c07978fc986..dc53f452c2d6 100644 --- a/src/libstore/schema.sql +++ b/src/libstore/schema.sql @@ -4,7 +4,8 @@ create table if not exists ValidPaths ( id integer primary key autoincrement not null, path text unique not null, hash text not null, - registrationTime integer not null + registrationTime integer not null, + deriver text ); create table if not exists Refs ( |