int hammy_del(ErlNifEnv *env, hammy_db *db, unsigned char *key, int key_size) { ham_key_t k; ham_txn_t *txn; int retval = HAMMY_FALSE; setup_key(&k, key, key_size); ham_txn_begin(&txn, db->databases[0], HAM_TXN_READ_ONLY); if (ham_erase(db->databases[0], txn, &k, 0) == HAM_SUCCESS) { ham_txn_commit(txn, 0); retval = HAMMY_TRUE; } else { ham_txn_abort(txn, 0); } return retval; }
int hammy_put(ErlNifEnv *env, hammy_db *db, unsigned char *key, int key_size, unsigned char *value, int value_size) { ham_key_t k; ham_record_t rec; ham_txn_t *txn; int rc; setup_key(&k, key, key_size); setup_record(&rec, value, value_size); ham_txn_begin(&txn, db->databases[0], 0); rc = ham_insert(db->databases[0], txn, &k, &rec, HAM_OVERWRITE); if (rc == HAM_SUCCESS) { ham_txn_commit(txn, 0); return HAMMY_TRUE; } else { ham_txn_abort(txn, 0); return HAMMY_FALSE; } }
/** Abort the Transaction */ void abort() { ham_status_t st = ham_txn_abort(m_txn, 0); if (st) throw error(st); }