diff options
Diffstat (limited to 'src/libstore/db.cc')
-rw-r--r-- | src/libstore/db.cc | 28 |
1 files changed, 24 insertions, 4 deletions
diff --git a/src/libstore/db.cc b/src/libstore/db.cc index 74c933d0e687..7ded82ef1fe8 100644 --- a/src/libstore/db.cc +++ b/src/libstore/db.cc @@ -292,11 +292,12 @@ void Database::close() try { for (map<TableId, Db *>::iterator i = tables.begin(); - i != tables.end(); i++) + i != tables.end(); ) { - Db * db = i->second; - db->close(DB_NOSYNC); - delete db; + map<TableId, Db *>::iterator j = i; + ++j; + closeTable(i->first); + i = j; } /* Do a checkpoint every 128 kilobytes, or every 5 minutes. */ @@ -336,6 +337,25 @@ TableId Database::openTable(const string & tableName, bool sorted) } +void Database::closeTable(TableId table) +{ + try { + Db * db = getDb(table); + db->close(DB_NOSYNC); + delete db; + tables.erase(table); + } catch (DbException e) { rethrow(e); } +} + + +void Database::deleteTable(const string & table) +{ + try { + env->dbremove(0, table.c_str(), 0, DB_AUTO_COMMIT); + } catch (DbException e) { rethrow(e); } +} + + bool Database::queryString(const Transaction & txn, TableId table, const string & key, string & data) { |