Если я вставлю значение в HamsterDB база данных с флагом HAM_OVERWRITE
Каков эффект, когда ключ еще не существует?
Я отслеживаю самый высокий серийный номер в моей программе и сохраняю его в базе данных HamsterDB:
if (serial > high_serial_) {
high_serial_ = serial;
ham::key key((void*)HIGH_SERIAL_KEY, strlen(HIGH_SERIAL_KEY));
ham::record record((void*)&high_serial_, sizeof(high_serial_));
db.insert(&key, &record, HAM_OVERWRITE);
}
После запуска приложения снова, high_serial_
инициализируется текущим значением, хранящимся в БД:
ham::key key((void*)HIGH_SERIAL_KEY, strlen(HIGH_SERIAL_KEY));
auto record = roll_file_db.find(&key);
Но этот вызов бросает HAM_KEY_NOT_FOUND
, документация утверждает, что он будет просто вставлен, если ключ еще не существует. Это не то, что я испытываю, хотя.
Если ключ не существует и вы звоните ham_db_insert(db, txn, key, record, HAM_OVERWRITE)
тогда ключ будет вставлен.
Если ключ не существует и вы звоните ham_db_find()
тогда вы получите HAM_KEY_NOT_FOUND
,
Документация для ham_db_find перечисляет HAM_KEY_NOT_FOUND в качестве возвращаемого значения «если ключ не существует»:
http://hamsterdb.com/public/scripts/html_www/group_ветчина_database.html # ga90dd239b79be2181461bbabc2eee1496
НТН
Christoph
Других решений пока нет …