about summary refs log tree commit diff
path: root/src/libstore/local-store.cc
diff options
context:
space:
mode:
authorEelco Dolstra <e.dolstra@tudelft.nl>2010-11-17T12·40+0000
committerEelco Dolstra <e.dolstra@tudelft.nl>2010-11-17T12·40+0000
commite60c962fb8dd3d8be37c1f4ae08d5247901fa129 (patch)
treec8ac16743478164312460f897901d1731930dbd1 /src/libstore/local-store.cc
parent1db6259076b1b8f667451da8d2e44a55ece19056 (diff)
* Add an operation `nix-store -q --size'.
Diffstat (limited to 'src/libstore/local-store.cc')
-rw-r--r--src/libstore/local-store.cc14
1 files changed, 12 insertions, 2 deletions
diff --git a/src/libstore/local-store.cc b/src/libstore/local-store.cc
index 9595561bcb61..201e4bae124a 100644
--- a/src/libstore/local-store.cc
+++ b/src/libstore/local-store.cc
@@ -88,6 +88,13 @@ void SQLiteStmt::bind(int value)
 }
 
 
+void SQLiteStmt::bind64(long long value)
+{
+    if (sqlite3_bind_int64(stmt, curArg++, value) != SQLITE_OK)
+        throw SQLiteError(db, "binding argument");
+}
+
+
 void SQLiteStmt::bind()
 {
     if (sqlite3_bind_null(stmt, curArg++) != SQLITE_OK)
@@ -340,7 +347,7 @@ void LocalStore::openDB(bool create)
     stmtAddReference.create(db,
         "insert or replace into Refs (referrer, reference) values (?, ?);");
     stmtQueryPathInfo.create(db,
-        "select id, hash, registrationTime, deriver from ValidPaths where path = ?;");
+        "select id, hash, registrationTime, deriver, narSize from ValidPaths where path = ?;");
     stmtQueryReferences.create(db,
         "select path from Refs join ValidPaths on reference = id where referrer = ?;");
     stmtQueryReferrers.create(db,
@@ -449,7 +456,7 @@ unsigned long long LocalStore::addValidPath(const ValidPathInfo & info)
     else
         stmtRegisterValidPath.bind(); // null
     if (info.narSize != 0)
-        stmtRegisterValidPath.bind(info.narSize);
+        stmtRegisterValidPath.bind64(info.narSize);
     else
         stmtRegisterValidPath.bind(); // null
     if (sqlite3_step(stmtRegisterValidPath) != SQLITE_DONE)
@@ -600,6 +607,9 @@ ValidPathInfo LocalStore::queryPathInfo(const Path & path)
     s = (const char *) sqlite3_column_text(stmtQueryPathInfo, 3);
     if (s) info.deriver = s;
 
+    /* Note that narSize = NULL yields 0. */
+    info.narSize = sqlite3_column_int64(stmtQueryPathInfo, 4);
+
     /* Get the references. */
     SQLiteStmtUse use2(stmtQueryReferences);