diff options
author | Eelco Dolstra <e.dolstra@tudelft.nl> | 2003-11-18T10·55+0000 |
---|---|---|
committer | Eelco Dolstra <e.dolstra@tudelft.nl> | 2003-11-18T10·55+0000 |
commit | 9f0f020929c9e093405cc6193d2f227cab763912 (patch) | |
tree | 833aad12f6db91e77ff2fb47a2bcb54a0ea9d89f /src/libstore/db.hh | |
parent | 8798fae30450a88c339c8f23d7e0c75f5df2ef1c (diff) |
* libnix -> libstore.
Diffstat (limited to 'src/libstore/db.hh')
-rw-r--r-- | src/libstore/db.hh | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/src/libstore/db.hh b/src/libstore/db.hh new file mode 100644 index 000000000000..1c681b9b5419 --- /dev/null +++ b/src/libstore/db.hh @@ -0,0 +1,89 @@ +#ifndef __DB_H +#define __DB_H + +#include <string> +#include <list> +#include <map> + +#include <db_cxx.h> + +#include "util.hh" + +using namespace std; + + +class Database; + + +class Transaction +{ + friend class Database; + +private: + DbTxn * txn; + +public: + Transaction(); + Transaction(Database & _db); + ~Transaction(); + + void abort(); + void commit(); + + void moveTo(Transaction & t); +}; + + +#define noTxn Transaction() + + +typedef unsigned int TableId; /* table handles */ + + +class Database +{ + friend class Transaction; + +private: + DbEnv * env; + + int fdLock; + int fdAccessors; + + TableId nextId; + map<TableId, Db *> tables; + + void requireEnv(); + + Db * getDb(TableId table); + +public: + Database(); + ~Database(); + + void open(const string & path); + void close(); + + TableId openTable(const string & table); + + bool queryString(const Transaction & txn, TableId table, + const string & key, string & data); + + bool queryStrings(const Transaction & txn, TableId table, + const string & key, Strings & data); + + void setString(const Transaction & txn, TableId table, + const string & key, const string & data); + + void setStrings(const Transaction & txn, TableId table, + const string & key, const Strings & data); + + void delPair(const Transaction & txn, TableId table, + const string & key); + + void enumTable(const Transaction & txn, TableId table, + Strings & keys); +}; + + +#endif /* !__DB_H */ |