91dc023665
Whenever Nix attempts to realise a derivation for which a closure is already known, but this closure cannot be realised, fall back on normalising the derivation. The most common scenario in which this is useful is when we have registered substitutes in order to perform binary distribution from, say, a network repository. If the repository is down, the realisation of the derivation will fail. When this option is specified, Nix will build the derivation instead. Thus, binary installation falls back on a source installation. This option is not the default since it is generally not desirable for a transient failure in obtaining the substitutes to lead to a full build from source (with the related consumption of resources).
90 lines
1.5 KiB
C++
90 lines
1.5 KiB
C++
#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,
|
|
bool deleteEmpty = true);
|
|
|
|
void delPair(const Transaction & txn, TableId table,
|
|
const string & key);
|
|
|
|
void enumTable(const Transaction & txn, TableId table,
|
|
Strings & keys);
|
|
};
|
|
|
|
|
|
#endif /* !__DB_H */
|