make everything compile again

This commit is contained in:
bert hubert 2018-12-10 15:02:36 +01:00
parent 0a22c24024
commit f15076bc2b
5 changed files with 30 additions and 38 deletions

View File

@ -226,8 +226,4 @@ MDBROCursor MDBROTransaction::getCursor(const MDBDbi& dbi)
return MDBROCursor(this, dbi);
}
void MDBRWTransaction::put(MDB_dbi dbi, string_view key, string_view val, int flags)
{
put(dbi, MDB_val{key.size(), (void*)&key[0]}, MDB_val{val.size(), (void*)&val[0]}, flags);
}

View File

@ -169,6 +169,13 @@ public:
d_mdbval.mv_data = (void*)&v[0];
}
MDBInVal(const string& v)
{
d_mdbval.mv_size = v.size();
d_mdbval.mv_data = (void*)&v[0];
}
template<typename T>
static MDBInVal fromStruct(const T& t)
{
@ -376,17 +383,23 @@ public:
void clear(MDB_dbi dbi);
void put(MDB_dbi dbi, const MDB_val& key, const MDB_val& val, int flags=0)
void put(MDB_dbi dbi, const MDBInVal& key, const MDBInVal& val, int flags=0)
{
if(!d_txn)
throw std::runtime_error("Attempt to use a closed RW transaction for put");
int rc;
if((rc=mdb_put(d_txn, dbi, (MDB_val*)&key, (MDB_val*)&val, flags)))
if((rc=mdb_put(d_txn, dbi,
const_cast<MDB_val*>(&key.d_mdbval),
const_cast<MDB_val*>(&val.d_mdbval), flags)))
throw std::runtime_error("putting data: " + std::string(mdb_strerror(rc)));
}
void put(MDB_dbi dbi, string_view key, string_view val, int flags=0);
/*
void put(MDB_dbi dbi, string_view key, string_view val, int flags=0)
{
put(dbi, MDBInVal(key), MDBInVal(val), flags);
}
*/
int del(MDB_dbi dbi, const MDB_val& key)
{
@ -498,9 +511,11 @@ public:
return rc;
}
int put(MDB_val& key, MDB_val& data, int flags=0)
int put(const MDBOutVal& key, const MDBOutVal& data, int flags=0)
{
return mdb_cursor_put(d_cursor, &key, &data, flags);
return mdb_cursor_put(d_cursor,
const_cast<MDB_val*>(&key.d_mdbval),
const_cast<MDB_val*>(&data.d_mdbval), flags);
}
int del(MDB_val& key, int flags)

View File

@ -40,8 +40,7 @@ try
for(int n=0; n < 15; ++n) {
auto txn = env->getRWTransaction();
int val = n + 1000*tid;
txn.put(dbi, {sizeof(val), (char*)&val},
{sizeof(val), (char*)&val});
txn.put(dbi, val, val);
txn.commit();
cout << "Done with transaction "<<n<<" in thread " << tid<<endl;
}

View File

@ -25,28 +25,6 @@ struct Record
};
struct MDBVal
{
MDBVal(unsigned int v) : d_v(v)
{
d_mdbval.mv_size = sizeof(d_v);
d_mdbval.mv_data = &d_v;
}
MDBVal(const std::string& str) : d_str(str)
{
d_mdbval.mv_size = str.size();
d_mdbval.mv_data = (void*)str.c_str();
}
operator MDB_val&()
{
return d_mdbval;
}
unsigned int d_v;
std::string d_str;
MDB_val d_mdbval;
};
static unsigned int getMaxID(MDBRWTransaction& txn, MDBDbi& dbi)
{
auto cursor = txn.getCursor(dbi);
@ -64,9 +42,9 @@ static void store(MDBRWTransaction& txn, MDBDbi& records, MDBDbi& domainidx, MDB
boost::archive::binary_oarchive oa(oss,boost::archive::no_header );
oa << r;
txn.put(records, MDBVal(r.id), MDBVal(oss.str()), MDB_APPEND);
txn.put(domainidx, MDBVal(r.domain_id), MDBVal(r.id));
txn.put(nameidx, MDBVal(r.name), MDBVal(r.id));
txn.put(records, r.id, oss.str(), MDB_APPEND);
txn.put(domainidx, r.domain_id, r.id);
txn.put(nameidx, r.name, r.id);
}
@ -154,8 +132,12 @@ int main(int argc, char** argv)
MDBOutVal data;
int count = 0;
MDBOutVal key;
MDBInVal tmp("www.powerdns.com");
key.d_mdbval = tmp.d_mdbval;
// ugh
while(!rocursor.get(key, data, count ? MDB_NEXT_DUP : MDB_SET)) {
unsigned int id = data.get<unsigned int>();
cout<<"Got something: id="<<id<<endl;

View File

@ -42,7 +42,7 @@ int main(int argc, char** argv)
cout << "Adding "<<limit<<" values .. "; cout.flush();
for(unsigned int n = 0 ; n < limit; ++n) {
txn.put(dbi, MDBVal(n), MDBVal(n), MDB_APPEND);
txn.put(dbi, n, n, MDB_APPEND);
}
cout <<"Done!"<<endl;
cout <<"Calling commit.. "; cout.flush();