aboutsummaryrefslogtreecommitdiff
path: root/src/libstore/local-store.hh
diff options
context:
space:
mode:
authorEelco Dolstra <e.dolstra@tudelft.nl>2010-02-18 14:30:42 +0000
committerEelco Dolstra <e.dolstra@tudelft.nl>2010-02-18 14:30:42 +0000
commite0305bb7a8b24fe1ea8b36cc2e5fe77ab151ae2f (patch)
tree6b8e160ed4437f9c9ccdb34468c285183c63ca19 /src/libstore/local-store.hh
parenta053d2d8e53f2967c64ab2b204727e4c27f06c0e (diff)
* Some wrapper objects to ensure that SQLite objects are properly
destroyed.
Diffstat (limited to 'src/libstore/local-store.hh')
-rw-r--r--src/libstore/local-store.hh40
1 files changed, 36 insertions, 4 deletions
diff --git a/src/libstore/local-store.hh b/src/libstore/local-store.hh
index f29565680..3637a5d07 100644
--- a/src/libstore/local-store.hh
+++ b/src/libstore/local-store.hh
@@ -6,7 +6,9 @@
#include "store-api.hh"
#include "util.hh"
-#include <sqlite3.h>
+
+class sqlite3;
+class sqlite3_stmt;
namespace nix {
@@ -14,8 +16,9 @@ namespace nix {
/* Nix store and database schema version. Version 1 (or 0) was Nix <=
0.7. Version 2 was Nix 0.8 and 0.9. Version 3 is Nix 0.10.
- Version 4 is Nix 0.11. Version 5 is Nix 0.12*/
-const int nixSchemaVersion = 5;
+ Version 4 is Nix 0.11. Version 5 is Nix 0.12-0.14. Version 6 is
+ Nix 0.15. */
+const int nixSchemaVersion = 6;
extern string drvsLogDir;
@@ -43,6 +46,28 @@ struct RunningSubstituter
};
+/* Wrapper object to close the SQLite database automatically. */
+struct SQLite
+{
+ sqlite3 * db;
+ SQLite() { db = 0; }
+ ~SQLite();
+ operator sqlite3 * () { return db; }
+};
+
+
+/* Wrapper object to create and destroy SQLite prepared statements. */
+struct SQLiteStmt
+{
+ sqlite3 * db;
+ sqlite3_stmt * stmt;
+ SQLiteStmt() { stmt = 0; }
+ void create(sqlite3 * db, const string & s);
+ ~SQLiteStmt();
+ operator sqlite3_stmt * () { return stmt; }
+};
+
+
class LocalStore : public StoreAPI
{
private:
@@ -163,12 +188,19 @@ private:
/* Whether to do an fsync() after writing Nix metadata. */
bool doFsync;
- sqlite3 * db;
+ /* The SQLite database object. */
+ SQLite db;
+
+ /* Some precompiled SQLite statements. */
+ SQLiteStmt stmtRegisterValidPath;
+ SQLiteStmt stmtAddReference;
int getSchema();
void initSchema();
+ void prepareStatements();
+
void registerValidPath(const ValidPathInfo & info, bool ignoreValidity = false);
ValidPathInfo queryPathInfo(const Path & path, bool ignoreErrors = false);