comparison mod_storage_memory/mod_storage_memory.lua @ 2097:4454f124465a

mod_storage_memory: Support for empty username stores
author Matthew Wild <mwild1@gmail.com>
date Wed, 16 Mar 2016 12:55:25 +0000
parents e72f9eac51c8
children 85d88ed4f2a2
comparison
equal deleted inserted replaced
2096:b75d29a162cd 2097:4454f124465a
5 t[k] = store; 5 t[k] = store;
6 return store; 6 return store;
7 end 7 end
8 }); 8 });
9 9
10 local NULL = {};
11
10 local keyval_store = {}; 12 local keyval_store = {};
11 keyval_store.__index = keyval_store; 13 keyval_store.__index = keyval_store;
12 14
13 function keyval_store:get(username) 15 function keyval_store:get(username)
14 return self.store[username]; 16 return self.store[username or NULL];
15 end 17 end
16 18
17 function keyval_store:set(username, data) 19 function keyval_store:set(username, data)
18 self.store[username] = data; 20 self.store[username or NULL] = data;
19 return true; 21 return true;
20 end 22 end
21 23
22 local map_store = {}; 24 local map_store = {};
23 map_store.__index = map_store; 25 map_store.__index = map_store;
24 26
25 function map_store:get(username, key) 27 function map_store:get(username, key)
26 local userstore = self.store[username]; 28 local userstore = self.store[username or NULL];
27 if type(userstore) == "table" then 29 if type(userstore) == "table" then
28 return userstore[key]; 30 return userstore[key];
29 end 31 end
30 end 32 end
31 33
32 function map_store:set(username, key, data) 34 function map_store:set(username, key, data)
33 local userstore = self.store[username]; 35 local userstore = self.store[username or NULL];
34 if userstore == nil then 36 if userstore == nil then
35 userstore = {}; 37 userstore = {};
36 self.store[username] = userstore; 38 self.store[username or NULL] = userstore;
37 end 39 end
38 userstore[key] = data; 40 userstore[key] = data;
39 return true; 41 return true;
40 end 42 end
41 43
44 46
45 function archive_store:append(username, key, value, when, with) 47 function archive_store:append(username, key, value, when, with)
46 if type(when) ~= "number" then 48 if type(when) ~= "number" then
47 when, with, value = value, when, with; 49 when, with, value = value, when, with;
48 end 50 end
49 local a = self.store[username]; 51 local a = self.store[username or NULL];
50 if not a then 52 if not a then
51 a = {}; 53 a = {};
52 self.store[username] = a; 54 self.store[username or NULL] = a;
53 end 55 end
54 local i = #a+1; 56 local i = #a+1;
55 local v = { key = key, when = when, with = with, value = value }; 57 local v = { key = key, when = when, with = with, value = value };
56 if not key or a[key] then 58 if not key or a[key] then
57 key = tostring(a):match"%x+$"..tostring(v):match"%x+$"; 59 key = tostring(a):match"%x+$"..tostring(v):match"%x+$";
76 end 78 end
77 end 79 end
78 end 80 end
79 81
80 function archive_store:find(username, query) 82 function archive_store:find(username, query)
81 local a = self.store[username] or {}; 83 local a = self.store[username or NULL] or {};
82 local start, stop, step = 1, #a, 1; 84 local start, stop, step = 1, #a, 1;
83 local qstart, qend, qwith = -math.huge, math.huge; 85 local qstart, qend, qwith = -math.huge, math.huge;
84 local limit; 86 local limit;
85 if query then 87 if query then
86 module:log("debug", "query included") 88 module:log("debug", "query included")
102 return iter; 104 return iter;
103 end 105 end
104 106
105 function archive_store:delete(username, query) 107 function archive_store:delete(username, query)
106 if not query or next(query) == nil then 108 if not query or next(query) == nil then
107 self.store[username] = nil; 109 self.store[username or NULL] = nil;
108 return true; 110 return true;
109 end 111 end
110 local old = self.store[username]; 112 local old = self.store[username or NULL];
111 if not old then return true; end 113 if not old then return true; end
112 local qstart = query.start or -math.huge; 114 local qstart = query.start or -math.huge;
113 local qend = query["end"] or math.huge; 115 local qend = query["end"] or math.huge;
114 local qwith = query.with; 116 local qwith = query.with;
115 local new = {}; 117 local new = {};
116 self.store[username] = new; 118 self.store[username or NULL] = new;
117 local t; 119 local t;
118 for i = 1, #old do 120 for i = 1, #old do
119 i = old[i]; 121 i = old[i];
120 t = i.when; 122 t = i.when;
121 if not(qstart >= t and qend <= t and (not qwith or i.with == qwith)) then 123 if not(qstart >= t and qend <= t and (not qwith or i.with == qwith)) then
122 self:append(username, i.key, i.value, t, i.with); 124 self:append(username, i.key, i.value, t, i.with);
123 end 125 end
124 end 126 end
125 if #new == 0 then 127 if #new == 0 then
126 self.store[username] = nil; 128 self.store[username or NULL] = nil;
127 end 129 end
128 return true; 130 return true;
129 end 131 end
130 132
131 local stores = { 133 local stores = {