put method
Stores a raw byte value in the database.
Parameters:
txn- Active transactionkey- String key under which to store the valuevalue- Raw bytes to storedbName- Optional named database. If not provided, the default database will be used.flags- Optional operation flags
Example:
final txn = await db.txnStart();
try {
await db.put(txn, 'key', [1, 2, 3, 4]);
await db.txnCommit(txn);
} catch (e) {
await db.txnAbort(txn);
rethrow;
}
Throws StateError if database is not initialized Throws LMDBException if operation fails
Implementation
Future<void> put(
Pointer<MDB_txn> txn,
String key,
List<int> value, {
String? dbName,
LMDBFlagSet? flags,
}) async {
if (!isInitialized) throw StateError(_errDbNotInitialized);
final dbi = await _getDatabase(txn, name: dbName, flags: flags);
final keyPtr = key.toNativeUtf8();
final valuePtr = calloc<Uint8>(value.length);
try {
final valueList = valuePtr.asTypedList(value.length);
valueList.setAll(0, value);
return _withAllocated<void, MDB_val>((keyVal) {
return _withAllocated<void, MDB_val>((dataVal) {
keyVal.ref.mv_size = keyPtr.length;
keyVal.ref.mv_data = keyPtr.cast();
dataVal.ref.mv_size = value.length;
dataVal.ref.mv_data = valuePtr.cast();
final result = _lib.mdb_put(
txn,
dbi,
keyVal,
dataVal,
flags?.value ?? 0,
);
if (result != 0) {
throw LMDBException('Failed to put data', result);
}
}, calloc<MDB_val>());
}, calloc<MDB_val>());
} finally {
calloc.free(keyPtr);
calloc.free(valuePtr);
}
}