aboutsummaryrefslogtreecommitdiff
path: root/src/libstore/local-store.cc
diff options
context:
space:
mode:
authorEelco Dolstra <e.dolstra@tudelft.nl>2010-02-22 12:44:36 +0000
committerEelco Dolstra <e.dolstra@tudelft.nl>2010-02-22 12:44:36 +0000
commitc4d388add4942f6f99a8df12f4e49149005047e2 (patch)
tree910f35306dbf6d78898d6c3968bcc039db187655 /src/libstore/local-store.cc
parent103cfee056cbc8f002929fd5958e305c1a75fe45 (diff)
* Get derivation outputs from the database instead of the .drv file,
which requires more I/O.
Diffstat (limited to 'src/libstore/local-store.cc')
-rw-r--r--src/libstore/local-store.cc24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/libstore/local-store.cc b/src/libstore/local-store.cc
index 0590b294b..0823e785b 100644
--- a/src/libstore/local-store.cc
+++ b/src/libstore/local-store.cc
@@ -299,6 +299,8 @@ void LocalStore::prepareStatements()
"insert or replace into DerivationOutputs (drv, id, path) values (?, ?, ?);");
stmtQueryValidDerivers.create(db,
"select v.id, v.path from DerivationOutputs d join ValidPaths v on d.drv = v.id where d.path = ?;");
+ stmtQueryDerivationOutputs.create(db,
+ "select id, path from DerivationOutputs where drv = ?;");
}
@@ -623,6 +625,28 @@ PathSet LocalStore::queryValidDerivers(const Path & path)
}
+PathSet LocalStore::queryDerivationOutputs(const Path & path)
+{
+ SQLiteTxn txn(db);
+
+ SQLiteStmtUse use(stmtQueryDerivationOutputs);
+ stmtQueryDerivationOutputs.bind(queryPathInfo(path).id);
+
+ PathSet outputs;
+ int r;
+ while ((r = sqlite3_step(stmtQueryDerivationOutputs)) == SQLITE_ROW) {
+ const char * s = (const char *) sqlite3_column_text(stmtQueryDerivationOutputs, 1);
+ assert(s);
+ outputs.insert(s);
+ }
+
+ if (r != SQLITE_DONE)
+ throw SQLiteError(db, format("error getting outputs of `%1%'") % path);
+
+ return outputs;
+}
+
+
void LocalStore::startSubstituter(const Path & substituter, RunningSubstituter & run)
{
if (run.pid != -1) return;