Mercurial > prosody-modules
annotate mod_storage_memory/mod_storage_memory.lua @ 2619:1e4bbff0a6fd
mod_storage_memory: Add :purge() method to all store types
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Tue, 14 Mar 2017 12:59:41 +0000 |
parents | a347b71adb07 |
children | 8b8cab2eb7fc |
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 |
2097
4454f124465a
mod_storage_memory: Support for empty username stores
Matthew Wild <mwild1@gmail.com>
parents:
1760
diff
changeset
|
10 local NULL = {}; |
4454f124465a
mod_storage_memory: Support for empty username stores
Matthew Wild <mwild1@gmail.com>
parents:
1760
diff
changeset
|
11 |
2619
1e4bbff0a6fd
mod_storage_memory: Add :purge() method to all store types
Matthew Wild <mwild1@gmail.com>
parents:
2172
diff
changeset
|
12 local function _purge_store(self, username) |
1e4bbff0a6fd
mod_storage_memory: Add :purge() method to all store types
Matthew Wild <mwild1@gmail.com>
parents:
2172
diff
changeset
|
13 self.store[username or NULL] = nil; |
1e4bbff0a6fd
mod_storage_memory: Add :purge() method to all store types
Matthew Wild <mwild1@gmail.com>
parents:
2172
diff
changeset
|
14 return true; |
1e4bbff0a6fd
mod_storage_memory: Add :purge() method to all store types
Matthew Wild <mwild1@gmail.com>
parents:
2172
diff
changeset
|
15 end |
1e4bbff0a6fd
mod_storage_memory: Add :purge() method to all store types
Matthew Wild <mwild1@gmail.com>
parents:
2172
diff
changeset
|
16 |
1259
fa7e402fcdc1
mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
17 local keyval_store = {}; |
fa7e402fcdc1
mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
18 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
|
19 |
fa7e402fcdc1
mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
20 function keyval_store:get(username) |
2097
4454f124465a
mod_storage_memory: Support for empty username stores
Matthew Wild <mwild1@gmail.com>
parents:
1760
diff
changeset
|
21 return self.store[username or NULL]; |
1259
fa7e402fcdc1
mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
22 end |
fa7e402fcdc1
mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
23 |
fa7e402fcdc1
mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
24 function keyval_store:set(username, data) |
2097
4454f124465a
mod_storage_memory: Support for empty username stores
Matthew Wild <mwild1@gmail.com>
parents:
1760
diff
changeset
|
25 self.store[username or NULL] = data; |
1259
fa7e402fcdc1
mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
26 return true; |
fa7e402fcdc1
mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
27 end |
fa7e402fcdc1
mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
28 |
2619
1e4bbff0a6fd
mod_storage_memory: Add :purge() method to all store types
Matthew Wild <mwild1@gmail.com>
parents:
2172
diff
changeset
|
29 keyval_store.purge = _purge_store; |
1e4bbff0a6fd
mod_storage_memory: Add :purge() method to all store types
Matthew Wild <mwild1@gmail.com>
parents:
2172
diff
changeset
|
30 |
1607
8b997d9cf09e
mod_storage_memory: Add support for map stores
Kim Alvefur <zash@zash.se>
parents:
1259
diff
changeset
|
31 local map_store = {}; |
8b997d9cf09e
mod_storage_memory: Add support for map stores
Kim Alvefur <zash@zash.se>
parents:
1259
diff
changeset
|
32 map_store.__index = map_store; |
8b997d9cf09e
mod_storage_memory: Add support for map stores
Kim Alvefur <zash@zash.se>
parents:
1259
diff
changeset
|
33 |
8b997d9cf09e
mod_storage_memory: Add support for map stores
Kim Alvefur <zash@zash.se>
parents:
1259
diff
changeset
|
34 function map_store:get(username, key) |
2097
4454f124465a
mod_storage_memory: Support for empty username stores
Matthew Wild <mwild1@gmail.com>
parents:
1760
diff
changeset
|
35 local userstore = self.store[username or NULL]; |
1607
8b997d9cf09e
mod_storage_memory: Add support for map stores
Kim Alvefur <zash@zash.se>
parents:
1259
diff
changeset
|
36 if type(userstore) == "table" then |
8b997d9cf09e
mod_storage_memory: Add support for map stores
Kim Alvefur <zash@zash.se>
parents:
1259
diff
changeset
|
37 return userstore[key]; |
8b997d9cf09e
mod_storage_memory: Add support for map stores
Kim Alvefur <zash@zash.se>
parents:
1259
diff
changeset
|
38 end |
8b997d9cf09e
mod_storage_memory: Add support for map stores
Kim Alvefur <zash@zash.se>
parents:
1259
diff
changeset
|
39 end |
8b997d9cf09e
mod_storage_memory: Add support for map stores
Kim Alvefur <zash@zash.se>
parents:
1259
diff
changeset
|
40 |
8b997d9cf09e
mod_storage_memory: Add support for map stores
Kim Alvefur <zash@zash.se>
parents:
1259
diff
changeset
|
41 function map_store:set(username, key, data) |
2097
4454f124465a
mod_storage_memory: Support for empty username stores
Matthew Wild <mwild1@gmail.com>
parents:
1760
diff
changeset
|
42 local userstore = self.store[username or NULL]; |
1607
8b997d9cf09e
mod_storage_memory: Add support for map stores
Kim Alvefur <zash@zash.se>
parents:
1259
diff
changeset
|
43 if userstore == nil then |
8b997d9cf09e
mod_storage_memory: Add support for map stores
Kim Alvefur <zash@zash.se>
parents:
1259
diff
changeset
|
44 userstore = {}; |
2097
4454f124465a
mod_storage_memory: Support for empty username stores
Matthew Wild <mwild1@gmail.com>
parents:
1760
diff
changeset
|
45 self.store[username or NULL] = userstore; |
1607
8b997d9cf09e
mod_storage_memory: Add support for map stores
Kim Alvefur <zash@zash.se>
parents:
1259
diff
changeset
|
46 end |
8b997d9cf09e
mod_storage_memory: Add support for map stores
Kim Alvefur <zash@zash.se>
parents:
1259
diff
changeset
|
47 userstore[key] = data; |
8b997d9cf09e
mod_storage_memory: Add support for map stores
Kim Alvefur <zash@zash.se>
parents:
1259
diff
changeset
|
48 return true; |
8b997d9cf09e
mod_storage_memory: Add support for map stores
Kim Alvefur <zash@zash.se>
parents:
1259
diff
changeset
|
49 end |
8b997d9cf09e
mod_storage_memory: Add support for map stores
Kim Alvefur <zash@zash.se>
parents:
1259
diff
changeset
|
50 |
2171
85d88ed4f2a2
mod_storage_memory: Implement 'add_keys' method of map stores (required for rosters in 0.10+)
Kim Alvefur <zash@zash.se>
parents:
2097
diff
changeset
|
51 map_store.remove = {}; |
85d88ed4f2a2
mod_storage_memory: Implement 'add_keys' method of map stores (required for rosters in 0.10+)
Kim Alvefur <zash@zash.se>
parents:
2097
diff
changeset
|
52 function map_store:set_keys(username, keydatas) |
85d88ed4f2a2
mod_storage_memory: Implement 'add_keys' method of map stores (required for rosters in 0.10+)
Kim Alvefur <zash@zash.se>
parents:
2097
diff
changeset
|
53 local userstore = self.store[username or NULL]; |
85d88ed4f2a2
mod_storage_memory: Implement 'add_keys' method of map stores (required for rosters in 0.10+)
Kim Alvefur <zash@zash.se>
parents:
2097
diff
changeset
|
54 if userstore == nil then |
85d88ed4f2a2
mod_storage_memory: Implement 'add_keys' method of map stores (required for rosters in 0.10+)
Kim Alvefur <zash@zash.se>
parents:
2097
diff
changeset
|
55 userstore = {}; |
85d88ed4f2a2
mod_storage_memory: Implement 'add_keys' method of map stores (required for rosters in 0.10+)
Kim Alvefur <zash@zash.se>
parents:
2097
diff
changeset
|
56 self.store[username or NULL] = userstore; |
85d88ed4f2a2
mod_storage_memory: Implement 'add_keys' method of map stores (required for rosters in 0.10+)
Kim Alvefur <zash@zash.se>
parents:
2097
diff
changeset
|
57 end |
85d88ed4f2a2
mod_storage_memory: Implement 'add_keys' method of map stores (required for rosters in 0.10+)
Kim Alvefur <zash@zash.se>
parents:
2097
diff
changeset
|
58 for k,v in pairs(keydatas) do |
85d88ed4f2a2
mod_storage_memory: Implement 'add_keys' method of map stores (required for rosters in 0.10+)
Kim Alvefur <zash@zash.se>
parents:
2097
diff
changeset
|
59 if v == self.remove then v = nil; end |
2172
a347b71adb07
mod_storage_memory: Fix copypaste error
Kim Alvefur <zash@zash.se>
parents:
2171
diff
changeset
|
60 userstore[k] = v; |
2171
85d88ed4f2a2
mod_storage_memory: Implement 'add_keys' method of map stores (required for rosters in 0.10+)
Kim Alvefur <zash@zash.se>
parents:
2097
diff
changeset
|
61 end |
85d88ed4f2a2
mod_storage_memory: Implement 'add_keys' method of map stores (required for rosters in 0.10+)
Kim Alvefur <zash@zash.se>
parents:
2097
diff
changeset
|
62 return true; |
85d88ed4f2a2
mod_storage_memory: Implement 'add_keys' method of map stores (required for rosters in 0.10+)
Kim Alvefur <zash@zash.se>
parents:
2097
diff
changeset
|
63 end |
85d88ed4f2a2
mod_storage_memory: Implement 'add_keys' method of map stores (required for rosters in 0.10+)
Kim Alvefur <zash@zash.se>
parents:
2097
diff
changeset
|
64 |
2619
1e4bbff0a6fd
mod_storage_memory: Add :purge() method to all store types
Matthew Wild <mwild1@gmail.com>
parents:
2172
diff
changeset
|
65 map_store.purge = _purge_store; |
1e4bbff0a6fd
mod_storage_memory: Add :purge() method to all store types
Matthew Wild <mwild1@gmail.com>
parents:
2172
diff
changeset
|
66 |
1608
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
67 local archive_store = {}; |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
68 archive_store.__index = archive_store; |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
69 |
1753
54c8a0cb2996
mod_storage_(archive-capable): Change order of arguments to :append to be the same as return values from :find iterator (see prosody 41725f3df3cc)
Kim Alvefur <zash@zash.se>
parents:
1608
diff
changeset
|
70 function archive_store:append(username, key, value, when, with) |
54c8a0cb2996
mod_storage_(archive-capable): Change order of arguments to :append to be the same as return values from :find iterator (see prosody 41725f3df3cc)
Kim Alvefur <zash@zash.se>
parents:
1608
diff
changeset
|
71 if type(when) ~= "number" then |
1760
e72f9eac51c8
mod_storage_(various): Order swapping in 54c8a0cb2996 was backwards
Kim Alvefur <zash@zash.se>
parents:
1753
diff
changeset
|
72 when, with, value = value, when, with; |
1753
54c8a0cb2996
mod_storage_(archive-capable): Change order of arguments to :append to be the same as return values from :find iterator (see prosody 41725f3df3cc)
Kim Alvefur <zash@zash.se>
parents:
1608
diff
changeset
|
73 end |
2097
4454f124465a
mod_storage_memory: Support for empty username stores
Matthew Wild <mwild1@gmail.com>
parents:
1760
diff
changeset
|
74 local a = self.store[username or NULL]; |
1608
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
75 if not a then |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
76 a = {}; |
2097
4454f124465a
mod_storage_memory: Support for empty username stores
Matthew Wild <mwild1@gmail.com>
parents:
1760
diff
changeset
|
77 self.store[username or NULL] = a; |
1608
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
78 end |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
79 local i = #a+1; |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
80 local v = { key = key, when = when, with = with, value = value }; |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
81 if not key or a[key] then |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
82 key = tostring(a):match"%x+$"..tostring(v):match"%x+$"; |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
83 v.key = key; |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
84 end |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
85 a[i] = v; |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
86 a[key] = i; |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
87 return true; |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
88 end |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
89 |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
90 local function archive_iter (a, start, stop, step, limit, when_start, when_end, match_with) |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
91 local item, when, with; |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
92 local count = 0; |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
93 coroutine.yield(true); -- Ready |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
94 for i = start, stop, step do |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
95 item = a[i]; |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
96 when, with = item.when, item.with; |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
97 if when >= when_start and when_end >= when and (not match_with or match_with == with) then |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
98 coroutine.yield(item.key, item.value, when, with); |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
99 count = count + 1; |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
100 if limit and count >= limit then return end |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
101 end |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
102 end |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
103 end |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
104 |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
105 function archive_store:find(username, query) |
2097
4454f124465a
mod_storage_memory: Support for empty username stores
Matthew Wild <mwild1@gmail.com>
parents:
1760
diff
changeset
|
106 local a = self.store[username or NULL] or {}; |
1608
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
107 local start, stop, step = 1, #a, 1; |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
108 local qstart, qend, qwith = -math.huge, math.huge; |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
109 local limit; |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
110 if query then |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
111 module:log("debug", "query included") |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
112 if query.reverse then |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
113 start, stop, step = stop, start, -1; |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
114 if query.before then |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
115 start = a[query.before]; |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
116 end |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
117 elseif query.after then |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
118 start = a[query.after]; |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
119 end |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
120 limit = query.limit; |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
121 qstart = query.start or qstart; |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
122 qend = query["end"] or qend; |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
123 end |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
124 if not start then return nil, "invalid-key"; end |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
125 local iter = coroutine.wrap(archive_iter); |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
126 iter(a, start, stop, step, limit, qstart, qend, qwith); |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
127 return iter; |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
128 end |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
129 |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
130 function archive_store:delete(username, query) |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
131 if not query or next(query) == nil then |
2097
4454f124465a
mod_storage_memory: Support for empty username stores
Matthew Wild <mwild1@gmail.com>
parents:
1760
diff
changeset
|
132 self.store[username or NULL] = nil; |
1608
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
133 return true; |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
134 end |
2097
4454f124465a
mod_storage_memory: Support for empty username stores
Matthew Wild <mwild1@gmail.com>
parents:
1760
diff
changeset
|
135 local old = self.store[username or NULL]; |
1608
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
136 if not old then return true; end |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
137 local qstart = query.start or -math.huge; |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
138 local qend = query["end"] or math.huge; |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
139 local qwith = query.with; |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
140 local new = {}; |
2097
4454f124465a
mod_storage_memory: Support for empty username stores
Matthew Wild <mwild1@gmail.com>
parents:
1760
diff
changeset
|
141 self.store[username or NULL] = new; |
1608
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
142 local t; |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
143 for i = 1, #old do |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
144 i = old[i]; |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
145 t = i.when; |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
146 if not(qstart >= t and qend <= t and (not qwith or i.with == qwith)) then |
1753
54c8a0cb2996
mod_storage_(archive-capable): Change order of arguments to :append to be the same as return values from :find iterator (see prosody 41725f3df3cc)
Kim Alvefur <zash@zash.se>
parents:
1608
diff
changeset
|
147 self:append(username, i.key, i.value, t, i.with); |
1608
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
148 end |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
149 end |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
150 if #new == 0 then |
2097
4454f124465a
mod_storage_memory: Support for empty username stores
Matthew Wild <mwild1@gmail.com>
parents:
1760
diff
changeset
|
151 self.store[username or NULL] = nil; |
1608
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
152 end |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
153 return true; |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
154 end |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
155 |
2619
1e4bbff0a6fd
mod_storage_memory: Add :purge() method to all store types
Matthew Wild <mwild1@gmail.com>
parents:
2172
diff
changeset
|
156 archive_store.purge = _purge_store; |
1e4bbff0a6fd
mod_storage_memory: Add :purge() method to all store types
Matthew Wild <mwild1@gmail.com>
parents:
2172
diff
changeset
|
157 |
1259
fa7e402fcdc1
mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
158 local stores = { |
fa7e402fcdc1
mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
159 keyval = keyval_store; |
1607
8b997d9cf09e
mod_storage_memory: Add support for map stores
Kim Alvefur <zash@zash.se>
parents:
1259
diff
changeset
|
160 map = map_store; |
1608
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
161 archive = archive_store; |
1259
fa7e402fcdc1
mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
162 } |
fa7e402fcdc1
mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
163 |
fa7e402fcdc1
mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
164 local driver = {}; |
fa7e402fcdc1
mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
165 |
fa7e402fcdc1
mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
166 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
|
167 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
|
168 if store_mt then |
fa7e402fcdc1
mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
169 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
|
170 end |
fa7e402fcdc1
mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
171 return nil, "unsupported-store"; |
fa7e402fcdc1
mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
172 end |
fa7e402fcdc1
mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
173 |
fa7e402fcdc1
mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
174 module:provides("storage", driver); |