annotate mod_storage_memory/mod_storage_memory.lua @ 1607:8b997d9cf09e

mod_storage_memory: Add support for map stores
author Kim Alvefur <zash@zash.se>
date Thu, 12 Feb 2015 15:13:50 +0100
parents fa7e402fcdc1
children 59fdf4f12343
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
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
1607
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;
1607
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);