Beispiel #1
0
 /** Begin a new Transaction */
 txn begin(const char *name = 0) {
   ham_txn_t *h;
   ham_status_t st = ham_txn_begin(&h, m_env, name, 0, 0);
   if (st)
     throw error(st);
   return (txn(h));
 }
Beispiel #2
0
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;
}
Beispiel #3
0
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;
    }
}
Beispiel #4
0
int hammy_get(ErlNifEnv *env, hammy_db *db, unsigned char *key, int key_size, ErlNifBinary *value) {
    ham_key_t k;
    ham_record_t rec;
    ham_txn_t *txn;
    int rc;
    int retval = HAMMY_FALSE;

    setup_key(&k, key, key_size);
    memset(&rec, 0, sizeof(ham_record_t));

    ham_txn_begin(&txn, db->databases[0], HAM_TXN_READ_ONLY);
    rc = ham_find(db->databases[0], txn, &k, &rec, 0);
    if (rc == HAM_SUCCESS) {
        if (enif_alloc_binary_compat(env, rec.size, value)) {
            memcpy(value->data, rec.data, rec.size);
            retval = HAMMY_TRUE;
        }
    }
    ham_txn_commit(txn, 0);
    return retval;
}