Ejemplo n.º 1
0
func (ndbm *NDBM) store(key, value []byte, mode C.int) (C.int, error) {
	C.dbm_clearerr(ndbm.cDbm)
	status, err := C.dbm_store(ndbm.cDbm, bytesToDatum(key), bytesToDatum(value), mode)
	if status == checkError {
		return status, Error{
			dbErrNum: int(C.dbm_error(ndbm.cDbm)),
			errnoErr: err,
		}
	}
	return status, nil
}
Ejemplo n.º 2
0
func (ndbm *NDBM) nextKey() ([]byte, error) {
	datum, err := C.dbm_nextkey(ndbm.cDbm)
	key := datumToBytes(datum)
	if key == nil {
		dbErrNum := C.dbm_error(ndbm.cDbm)
		if dbErrNum == noError {
			return nil, errNoMoreKeys
		}
		return nil, Error{
			dbErrNum: int(dbErrNum),
			errnoErr: err,
		}
	}
	return key, nil
}
Ejemplo n.º 3
0
// Delete deletes an entry from the database.
// Returns KeyNotFound if the key can't be found.
func (ndbm *NDBM) Delete(key []byte) error {
	C.dbm_clearerr(ndbm.cDbm)
	status, err := C.dbm_delete(ndbm.cDbm, bytesToDatum(key))
	if status == checkError {
		dbErrNum := C.dbm_error(ndbm.cDbm)
		if dbErrNum == C.DBM_ITEM_NOT_FOUND {
			return KeyNotFound{key}
		}
		return Error{
			dbErrNum: int(dbErrNum),
			errnoErr: err,
		}
	}
	if status == notFound {
		return KeyNotFound{key}
	}
	return nil
}
Ejemplo n.º 4
0
// Fetch retrieves an entry value by key.
// Returns KeyNotFound if the key can't be found.
func (ndbm *NDBM) Fetch(key []byte) ([]byte, error) {
	C.dbm_clearerr(ndbm.cDbm)
	datum, err := C.dbm_fetch(ndbm.cDbm, bytesToDatum(key))
	value := datumToBytes(datum)
	if value == nil {
		dbErrNum := C.dbm_error(ndbm.cDbm)
		if dbErrNum == noError {
			return nil, KeyNotFound{key}
		}
		if dbErrNum == C.DBM_ITEM_NOT_FOUND {
			return nil, KeyNotFound{key}
		}
		return nil, Error{
			dbErrNum: int(dbErrNum),
			errnoErr: err,
		}
	}
	return value, nil
}