diff options
Diffstat (limited to 'src/libnix/db.hh')
-rw-r--r-- | src/libnix/db.hh | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/src/libnix/db.hh b/src/libnix/db.hh new file mode 100644 index 000000000..1c681b9b5 --- /dev/null +++ b/src/libnix/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 */ |