* Automatically delete the old referers table.

This commit is contained in:
Eelco Dolstra 2005-12-12 19:14:38 +00:00
parent 8463f27d8c
commit d87549c1c7
3 changed files with 31 additions and 5 deletions

View file

@ -292,11 +292,12 @@ void Database::close()
try { try {
for (map<TableId, Db *>::iterator i = tables.begin(); for (map<TableId, Db *>::iterator i = tables.begin();
i != tables.end(); i++) i != tables.end(); )
{ {
Db * db = i->second; map<TableId, Db *>::iterator j = i;
db->close(DB_NOSYNC); ++j;
delete db; closeTable(i->first);
i = j;
} }
/* Do a checkpoint every 128 kilobytes, or every 5 minutes. */ /* 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, bool Database::queryString(const Transaction & txn, TableId table,
const string & key, string & data) const string & key, string & data)
{ {

View file

@ -65,6 +65,8 @@ public:
void close(); void close();
TableId openTable(const string & table, bool sorted = false); TableId openTable(const string & table, bool sorted = false);
void closeTable(TableId table);
void deleteTable(const string & table);
bool queryString(const Transaction & txn, TableId table, bool queryString(const Transaction & txn, TableId table,
const string & key, string & data); const string & key, string & data);

View file

@ -1034,8 +1034,12 @@ static void upgradeStore09()
nixDB.setString(txn, dbReferrers, addPrefix(*i, *j), ""); nixDB.setString(txn, dbReferrers, addPrefix(*i, *j), "");
cerr << "."; cerr << ".";
} }
cerr << "\n"; cerr << "\n";
txn.commit(); txn.commit();
nixDB.closeTable(dbReferers);
nixDB.deleteTable("referers");
} }