Software /
code /
prosody-modules
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 |
parent | 1259:fa7e402fcdc1 |
child | 1608:59fdf4f12343 |
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); |