comparison mod_storage_gdbm/mod_storage_gdbm.lua @ 1968:95ad6e68e203

mod_storage_gdbm: Refactor for readability (bye single-char variable names)
author Kim Alvefur <zash@zash.se>
date Sat, 12 Dec 2015 03:25:57 +0100
parents e72f9eac51c8
children
comparison
equal deleted inserted replaced
1967:2ce2b194d501 1968:95ad6e68e203
25 25
26 local function id(v) return v; end 26 local function id(v) return v; end
27 27
28 local function is_stanza(s) 28 local function is_stanza(s)
29 return getmetatable(s) == st.stanza_mt; 29 return getmetatable(s) == st.stanza_mt;
30 end
31
32 local function t(c, a, b)
33 if c then return a; end return b;
34 end 30 end
35 31
36 local base_path = path.resolve_relative_path(prosody.paths.data, module.host); 32 local base_path = path.resolve_relative_path(prosody.paths.data, module.host);
37 lfs.mkdir(base_path); 33 lfs.mkdir(base_path);
38 34
104 100
105 function archive:find(username, query) 101 function archive:find(username, query)
106 query = query or empty; 102 query = query or empty;
107 local meta = self:get(username) or empty; 103 local meta = self:get(username) or empty;
108 local prefix = (username or "@") .. "#"; 104 local prefix = (username or "@") .. "#";
109 local r = query.reverse; 105 local reverse = query.reverse;
110 local d = t(r, -1, 1); 106 local step = reverse and -1 or 1;
111 local s = meta[t(r, query.before, query.after)]; 107 local first = meta[query.after];
108 local last = meta[query.before];
109 -- we don't want to include the actual 'after' or 'before' item
110 if first then first = first + 1; end
111 if last then last = last - 1; end
112 first, last = first or 1, last or #meta;
113 if reverse then first, last = last, first; end
112 local limit = query.limit; 114 local limit = query.limit;
113 if s then 115 local count = 0;
114 s = s + d;
115 else
116 s = t(r, #meta, 1)
117 end
118 local e = t(r, 1, #meta);
119 local c = 0;
120 return function () 116 return function ()
121 if limit and c >= limit then return end 117 if limit and count >= limit then return end
122 local item, value; 118 local item, value;
123 for i = s, e, d do 119 for i = first, last, step do
124 item = meta[i]; 120 item = meta[i];
125 if (not query.with or item.with == query.with) 121 if (not query.with or item.with == query.with)
126 and (not query.start or item.when >= query.start) 122 and (not query.start or item.when >= query.start)
127 and (not query["end"] or item.when <= query["end"]) then 123 and (not query["end"] or item.when <= query["end"]) then
128 s = i + d; c = c + 1; 124 first = i + step; count = count + 1;
129 value = self:get(prefix..item.key); 125 value = self:get(prefix..item.key);
130 return item.key, (deserialize_map[item.type] or id)(value), item.when, item.with; 126 return item.key, (deserialize_map[item.type] or id)(value), item.when, item.with;
131 end 127 end
132 end 128 end
133 end 129 end