bool DatabaseManager::recordRangeExists(const StringPimpl &key) { //Go through the range of the existence keys and //add them to the list Dbc *cursor = NULL; try { Dbt dbKey((void *)key.c_str(), key.size() + 1); Dbt dbData; m_pimpl->checkTSSInit(); m_pimpl->m_database->cursor(&(**m_pimpl->m_transaction), &cursor, m_pimpl->m_cursorFlags); int ret = cursor->get(&dbKey, &dbData, DB_SET_RANGE); while(ret != DB_NOTFOUND) { StringPimpl dataString = StringPimpl((char *) dbData.get_data()); StringPimpl keyString = StringPimpl((char *) dbKey.get_data()); if(!keyString.startsWith(key) || keyString == key) { //We are at the end of the range break; } else { cursor->close(); return true; } } cursor->close(); return false; } catch (DbException &e) { std::cerr << "Error in deleteRecordRange: " << e.what() << e.get_errno() << std::endl; if(cursor != NULL) { cursor->close(); } return false; } }
void DatabaseManager::deleteRecordRange(const StringPimpl &key) { Dbc *cursor = NULL; try { Dbt dbKey((void *)key.c_str(), key.size() + 1); Dbt dbData; m_pimpl->checkTSSInit(); m_pimpl->m_database->cursor(&(**m_pimpl->m_transaction), &cursor, m_pimpl->m_cursorFlags); int ret = cursor->get(&dbKey, &dbData, DB_SET_RANGE); while(ret != DB_NOTFOUND) { StringPimpl dataString = StringPimpl((char *) dbData.get_data()); StringPimpl keyString = StringPimpl((char *) dbKey.get_data()); if(!keyString.startsWith(key)) { //We are at the end of the range break; } cursor->del(0); ret = cursor->get(&dbKey, &dbData, DB_NEXT); } cursor->close(); } catch (DbException &e) { std::cerr << "Error in deleteRecordRange: " << e.what() << e.get_errno() << std::endl; if(cursor != NULL) { cursor->close(); } } }