mod_storage_memory/mod_storage_memory.lua
author Kim Alvefur <zash@zash.se>
Thu, 12 Feb 2015 15:13:50 +0100
changeset 1611 8b997d9cf09e
parent 1259 fa7e402fcdc1
child 1612 59fdf4f12343
permissions -rw-r--r--
mod_storage_memory: Add support for map stores
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1259
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     1
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     2
local memory = setmetatable({}, {
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     3
	__index = function(t, k)
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     4
		local store = module:shared(k)
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     5
		t[k] = store;
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     6
		return store;
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     7
	end
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     8
});
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     9
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    10
local keyval_store = {};
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    11
keyval_store.__index = keyval_store;
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    12
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    13
function keyval_store:get(username)
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    14
	return self.store[username];
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    15
end
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    16
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    17
function keyval_store:set(username, data)
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    18
	self.store[username] = data;
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    19
	return true;
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    20
end
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    21
1611
8b997d9cf09e mod_storage_memory: Add support for map stores
Kim Alvefur <zash@zash.se>
parents: 1259
diff changeset
    22
local map_store = {};
8b997d9cf09e mod_storage_memory: Add support for map stores
Kim Alvefur <zash@zash.se>
parents: 1259
diff changeset
    23
map_store.__index = map_store;
8b997d9cf09e mod_storage_memory: Add support for map stores
Kim Alvefur <zash@zash.se>
parents: 1259
diff changeset
    24
8b997d9cf09e mod_storage_memory: Add support for map stores
Kim Alvefur <zash@zash.se>
parents: 1259
diff changeset
    25
function map_store:get(username, key)
8b997d9cf09e mod_storage_memory: Add support for map stores
Kim Alvefur <zash@zash.se>
parents: 1259
diff changeset
    26
	local userstore = self.store[username];
8b997d9cf09e mod_storage_memory: Add support for map stores
Kim Alvefur <zash@zash.se>
parents: 1259
diff changeset
    27
	if type(userstore) == "table" then
8b997d9cf09e mod_storage_memory: Add support for map stores
Kim Alvefur <zash@zash.se>
parents: 1259
diff changeset
    28
		return userstore[key];
8b997d9cf09e mod_storage_memory: Add support for map stores
Kim Alvefur <zash@zash.se>
parents: 1259
diff changeset
    29
	end
8b997d9cf09e mod_storage_memory: Add support for map stores
Kim Alvefur <zash@zash.se>
parents: 1259
diff changeset
    30
end
8b997d9cf09e mod_storage_memory: Add support for map stores
Kim Alvefur <zash@zash.se>
parents: 1259
diff changeset
    31
8b997d9cf09e mod_storage_memory: Add support for map stores
Kim Alvefur <zash@zash.se>
parents: 1259
diff changeset
    32
function map_store:set(username, key, data)
8b997d9cf09e mod_storage_memory: Add support for map stores
Kim Alvefur <zash@zash.se>
parents: 1259
diff changeset
    33
	local userstore = self.store[username];
8b997d9cf09e mod_storage_memory: Add support for map stores
Kim Alvefur <zash@zash.se>
parents: 1259
diff changeset
    34
	if userstore == nil then
8b997d9cf09e mod_storage_memory: Add support for map stores
Kim Alvefur <zash@zash.se>
parents: 1259
diff changeset
    35
		userstore = {};
8b997d9cf09e mod_storage_memory: Add support for map stores
Kim Alvefur <zash@zash.se>
parents: 1259
diff changeset
    36
		self.store[username] = userstore;
8b997d9cf09e mod_storage_memory: Add support for map stores
Kim Alvefur <zash@zash.se>
parents: 1259
diff changeset
    37
	end
8b997d9cf09e mod_storage_memory: Add support for map stores
Kim Alvefur <zash@zash.se>
parents: 1259
diff changeset
    38
	userstore[key] = data;
8b997d9cf09e mod_storage_memory: Add support for map stores
Kim Alvefur <zash@zash.se>
parents: 1259
diff changeset
    39
	return true;
8b997d9cf09e mod_storage_memory: Add support for map stores
Kim Alvefur <zash@zash.se>
parents: 1259
diff changeset
    40
end
8b997d9cf09e mod_storage_memory: Add support for map stores
Kim Alvefur <zash@zash.se>
parents: 1259
diff changeset
    41
1259
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    42
local stores = {
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    43
	keyval = keyval_store;
1611
8b997d9cf09e mod_storage_memory: Add support for map stores
Kim Alvefur <zash@zash.se>
parents: 1259
diff changeset
    44
	map = map_store;
1259
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    45
}
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    46
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    47
local driver = {};
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    48
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    49
function driver:open(store, typ)
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    50
	local store_mt = stores[typ or "keyval"];
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    51
	if store_mt then
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    52
		return setmetatable({ store = memory[store] }, store_mt);
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    53
	end
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    54
	return nil, "unsupported-store";
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    55
end
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    56
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    57
module:provides("storage", driver);