# HG changeset patch # User Kim Alvefur # Date 1450481695 -3600 # Node ID f7fc5088b34074dc3a61b7bc1fafdc560de0a8c1 # Parent bb0b2eae5563a80b63c60970ed2dcd0faaeec8a9 mod_storage_lmdb: Allow passing a transaction flag so we can run get operations in a read-only transaction diff -r bb0b2eae5563 -r f7fc5088b340 mod_storage_lmdb/mod_storage_lmdb.lua --- a/mod_storage_lmdb/mod_storage_lmdb.lua Sat Dec 19 00:25:30 2015 +0100 +++ b/mod_storage_lmdb/mod_storage_lmdb.lua Sat Dec 19 00:34:55 2015 +0100 @@ -20,9 +20,9 @@ local serialize = serialization.serialize; local deserialize = serialization.deserialize; -local function transaction(env, func, ...) +local function transaction(env, flag, func, ...) local args, n_args = {...}, select("#", ...); - local t = env:txn_begin(nil, 0); + local t = env:txn_begin(nil, flag); local function f() return func(t, unpack(args, 1, n_args)); end local success, a, b, c = xpcall(f, traceback); if not success then @@ -66,11 +66,11 @@ if value ~= nil then value = serialize(value); end - return transaction(self.env, keyvalue_set, self.db, key, value); + return transaction(self.env, 0, keyvalue_set, self.db, key, value); end function keyval:get(key) - local ok, data = transaction(self.env, keyvalue_get, self.db, key); + local ok, data = transaction(self.env, lmdb.MDB_RDONLY, keyvalue_get, self.db, key); if not ok then return ok, data; end return deserialize(data); end