equal
deleted
inserted
replaced
3 -- |
3 -- |
4 -- This file is MIT/X11 licensed. |
4 -- This file is MIT/X11 licensed. |
5 -- |
5 -- |
6 -- Depends on lgdbm: |
6 -- Depends on lgdbm: |
7 -- http://webserver2.tecgraf.puc-rio.br/~lhf/ftp/lua/#lgdbm |
7 -- http://webserver2.tecgraf.puc-rio.br/~lhf/ftp/lua/#lgdbm |
|
8 -- |
|
9 -- luacheck: globals open purge |
8 |
10 |
9 local gdbm = require"gdbm"; |
11 local gdbm = require"gdbm"; |
10 local path = require"util.paths"; |
12 local path = require"util.paths"; |
11 local lfs = require"lfs"; |
13 local lfs = require"lfs"; |
12 local st = require"util.stanza"; |
14 local st = require"util.stanza"; |
16 local serialize = serialization.serialize; |
18 local serialize = serialization.serialize; |
17 local deserialize = serialization.deserialize; |
19 local deserialize = serialization.deserialize; |
18 |
20 |
19 local g_set, g_get, g_del = gdbm.replace, gdbm.fetch, gdbm.delete; |
21 local g_set, g_get, g_del = gdbm.replace, gdbm.fetch, gdbm.delete; |
20 local g_first, g_next = gdbm.firstkey, gdbm.nextkey; |
22 local g_first, g_next = gdbm.firstkey, gdbm.nextkey; |
21 |
|
22 local t_remove = table.remove; |
|
23 |
23 |
24 local empty = {}; |
24 local empty = {}; |
25 |
25 |
26 local function id(v) return v; end |
26 local function id(v) return v; end |
27 |
27 |
92 ok, err = self:set(username, meta); |
92 ok, err = self:set(username, meta); |
93 if not ok then return nil, err; end |
93 if not ok then return nil, err; end |
94 return key; |
94 return key; |
95 end |
95 end |
96 |
96 |
97 local deserialize = { |
97 local deserialize_map = { |
98 stanza = st.deserialize; |
98 stanza = st.deserialize; |
99 }; |
99 }; |
100 |
100 |
101 function archive:find(username, query) |
101 function archive:find(username, query) |
102 query = query or empty; |
102 query = query or empty; |
121 if (not query.with or item.with == query.with) |
121 if (not query.with or item.with == query.with) |
122 and (not query.start or item.when >= query.start) |
122 and (not query.start or item.when >= query.start) |
123 and (not query["end"] or item.when <= query["end"]) then |
123 and (not query["end"] or item.when <= query["end"]) then |
124 s = i + d; c = c + 1; |
124 s = i + d; c = c + 1; |
125 value = self:get(prefix..item.key); |
125 value = self:get(prefix..item.key); |
126 return item.key, (deserialize[item.type] or id)(value), item.when, item.with; |
126 return item.key, (deserialize_map[item.type] or id)(value), item.when, item.with; |
127 end |
127 end |
128 end |
128 end |
129 end |
129 end |
130 end |
130 end |
131 |
131 |
162 end |
162 end |
163 return true; |
163 return true; |
164 end |
164 end |
165 |
165 |
166 function module.unload() |
166 function module.unload() |
167 for path, db in pairs(cache) do |
167 for db_path, db in pairs(cache) do |
|
168 module:log("debug", "Closing db at %q", db_path); |
168 gdbm.sync(db); |
169 gdbm.sync(db); |
169 gdbm.close(db); |
170 gdbm.close(db); |
170 end |
171 end |
171 end |
172 end |
172 |
173 |