mod_storage_memory/mod_storage_memory.lua
author Kim Alvefur <zash@zash.se>
Sat, 07 May 2016 13:38:43 +0200
changeset 2176 a347b71adb07
parent 2175 85d88ed4f2a2
child 2623 1e4bbff0a6fd
permissions -rw-r--r--
mod_storage_memory: Fix copypaste error
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
2101
4454f124465a mod_storage_memory: Support for empty username stores
Matthew Wild <mwild1@gmail.com>
parents: 1764
diff changeset
    10
local NULL = {};
4454f124465a mod_storage_memory: Support for empty username stores
Matthew Wild <mwild1@gmail.com>
parents: 1764
diff changeset
    11
1259
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    12
local keyval_store = {};
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    13
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
    14
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    15
function keyval_store:get(username)
2101
4454f124465a mod_storage_memory: Support for empty username stores
Matthew Wild <mwild1@gmail.com>
parents: 1764
diff changeset
    16
	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
    17
end
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    18
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    19
function keyval_store:set(username, data)
2101
4454f124465a mod_storage_memory: Support for empty username stores
Matthew Wild <mwild1@gmail.com>
parents: 1764
diff changeset
    20
	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
    21
	return true;
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
1611
8b997d9cf09e mod_storage_memory: Add support for map stores
Kim Alvefur <zash@zash.se>
parents: 1259
diff changeset
    24
local map_store = {};
8b997d9cf09e mod_storage_memory: Add support for map stores
Kim Alvefur <zash@zash.se>
parents: 1259
diff changeset
    25
map_store.__index = map_store;
8b997d9cf09e mod_storage_memory: Add support for map stores
Kim Alvefur <zash@zash.se>
parents: 1259
diff changeset
    26
8b997d9cf09e mod_storage_memory: Add support for map stores
Kim Alvefur <zash@zash.se>
parents: 1259
diff changeset
    27
function map_store:get(username, key)
2101
4454f124465a mod_storage_memory: Support for empty username stores
Matthew Wild <mwild1@gmail.com>
parents: 1764
diff changeset
    28
	local userstore = self.store[username or NULL];
1611
8b997d9cf09e mod_storage_memory: Add support for map stores
Kim Alvefur <zash@zash.se>
parents: 1259
diff changeset
    29
	if type(userstore) == "table" then
8b997d9cf09e mod_storage_memory: Add support for map stores
Kim Alvefur <zash@zash.se>
parents: 1259
diff changeset
    30
		return userstore[key];
8b997d9cf09e mod_storage_memory: Add support for map stores
Kim Alvefur <zash@zash.se>
parents: 1259
diff changeset
    31
	end
8b997d9cf09e mod_storage_memory: Add support for map stores
Kim Alvefur <zash@zash.se>
parents: 1259
diff changeset
    32
end
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:set(username, key, data)
2101
4454f124465a mod_storage_memory: Support for empty username stores
Matthew Wild <mwild1@gmail.com>
parents: 1764
diff changeset
    35
	local userstore = self.store[username or NULL];
1611
8b997d9cf09e mod_storage_memory: Add support for map stores
Kim Alvefur <zash@zash.se>
parents: 1259
diff changeset
    36
	if userstore == nil then
8b997d9cf09e mod_storage_memory: Add support for map stores
Kim Alvefur <zash@zash.se>
parents: 1259
diff changeset
    37
		userstore = {};
2101
4454f124465a mod_storage_memory: Support for empty username stores
Matthew Wild <mwild1@gmail.com>
parents: 1764
diff changeset
    38
		self.store[username or NULL] = userstore;
1611
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
	userstore[key] = data;
8b997d9cf09e mod_storage_memory: Add support for map stores
Kim Alvefur <zash@zash.se>
parents: 1259
diff changeset
    41
	return true;
8b997d9cf09e mod_storage_memory: Add support for map stores
Kim Alvefur <zash@zash.se>
parents: 1259
diff changeset
    42
end
8b997d9cf09e mod_storage_memory: Add support for map stores
Kim Alvefur <zash@zash.se>
parents: 1259
diff changeset
    43
2175
85d88ed4f2a2 mod_storage_memory: Implement 'add_keys' method of map stores (required for rosters in 0.10+)
Kim Alvefur <zash@zash.se>
parents: 2101
diff changeset
    44
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: 2101
diff changeset
    45
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: 2101
diff changeset
    46
	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: 2101
diff changeset
    47
	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: 2101
diff changeset
    48
		userstore = {};
85d88ed4f2a2 mod_storage_memory: Implement 'add_keys' method of map stores (required for rosters in 0.10+)
Kim Alvefur <zash@zash.se>
parents: 2101
diff changeset
    49
		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: 2101
diff changeset
    50
	end
85d88ed4f2a2 mod_storage_memory: Implement 'add_keys' method of map stores (required for rosters in 0.10+)
Kim Alvefur <zash@zash.se>
parents: 2101
diff changeset
    51
	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: 2101
diff changeset
    52
		if v == self.remove then v = nil; end
2176
a347b71adb07 mod_storage_memory: Fix copypaste error
Kim Alvefur <zash@zash.se>
parents: 2175
diff changeset
    53
		userstore[k] = v;
2175
85d88ed4f2a2 mod_storage_memory: Implement 'add_keys' method of map stores (required for rosters in 0.10+)
Kim Alvefur <zash@zash.se>
parents: 2101
diff changeset
    54
	end
85d88ed4f2a2 mod_storage_memory: Implement 'add_keys' method of map stores (required for rosters in 0.10+)
Kim Alvefur <zash@zash.se>
parents: 2101
diff changeset
    55
	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: 2101
diff changeset
    56
end
85d88ed4f2a2 mod_storage_memory: Implement 'add_keys' method of map stores (required for rosters in 0.10+)
Kim Alvefur <zash@zash.se>
parents: 2101
diff changeset
    57
1612
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1611
diff changeset
    58
local archive_store = {};
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1611
diff changeset
    59
archive_store.__index = archive_store;
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1611
diff changeset
    60
1757
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: 1612
diff changeset
    61
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: 1612
diff changeset
    62
	if type(when) ~= "number" then
1764
e72f9eac51c8 mod_storage_(various): Order swapping in 54c8a0cb2996 was backwards
Kim Alvefur <zash@zash.se>
parents: 1757
diff changeset
    63
		when, with, value = value, when, with;
1757
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: 1612
diff changeset
    64
	end
2101
4454f124465a mod_storage_memory: Support for empty username stores
Matthew Wild <mwild1@gmail.com>
parents: 1764
diff changeset
    65
	local a = self.store[username or NULL];
1612
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1611
diff changeset
    66
	if not a then
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1611
diff changeset
    67
		a = {};
2101
4454f124465a mod_storage_memory: Support for empty username stores
Matthew Wild <mwild1@gmail.com>
parents: 1764
diff changeset
    68
		self.store[username or NULL] = a;
1612
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1611
diff changeset
    69
	end
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1611
diff changeset
    70
	local i = #a+1;
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1611
diff changeset
    71
	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: 1611
diff changeset
    72
	if not key or a[key] then
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1611
diff changeset
    73
		key = tostring(a):match"%x+$"..tostring(v):match"%x+$";
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1611
diff changeset
    74
		v.key = key;
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1611
diff changeset
    75
	end
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1611
diff changeset
    76
	a[i] = v;
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1611
diff changeset
    77
	a[key] = i;
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1611
diff changeset
    78
	return true;
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1611
diff changeset
    79
end
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1611
diff changeset
    80
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1611
diff changeset
    81
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: 1611
diff changeset
    82
	local item, when, with;
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1611
diff changeset
    83
	local count = 0;
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1611
diff changeset
    84
	coroutine.yield(true); -- Ready
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1611
diff changeset
    85
	for i = start, stop, step do
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1611
diff changeset
    86
		item = a[i];
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1611
diff changeset
    87
		when, with = item.when, item.with;
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1611
diff changeset
    88
		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: 1611
diff changeset
    89
			coroutine.yield(item.key, item.value, when, with);
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1611
diff changeset
    90
			count = count + 1;
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1611
diff changeset
    91
			if limit and count >= limit then return end
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1611
diff changeset
    92
		end
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1611
diff changeset
    93
	end
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1611
diff changeset
    94
end
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1611
diff changeset
    95
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1611
diff changeset
    96
function archive_store:find(username, query)
2101
4454f124465a mod_storage_memory: Support for empty username stores
Matthew Wild <mwild1@gmail.com>
parents: 1764
diff changeset
    97
	local a = self.store[username or NULL] or {};
1612
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1611
diff changeset
    98
	local start, stop, step = 1, #a, 1;
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1611
diff changeset
    99
	local qstart, qend, qwith = -math.huge, math.huge;
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1611
diff changeset
   100
	local limit;
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1611
diff changeset
   101
	if query then
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1611
diff changeset
   102
		module:log("debug", "query included")
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1611
diff changeset
   103
		if query.reverse then
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1611
diff changeset
   104
			start, stop, step = stop, start, -1;
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1611
diff changeset
   105
			if query.before then
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1611
diff changeset
   106
				start = a[query.before];
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1611
diff changeset
   107
			end
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1611
diff changeset
   108
		elseif query.after then
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1611
diff changeset
   109
			start = a[query.after];
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1611
diff changeset
   110
		end
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1611
diff changeset
   111
		limit = query.limit;
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1611
diff changeset
   112
		qstart = query.start or qstart;
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1611
diff changeset
   113
		qend = query["end"] or qend;
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1611
diff changeset
   114
	end
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1611
diff changeset
   115
	if not start then return nil, "invalid-key"; end
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1611
diff changeset
   116
	local iter = coroutine.wrap(archive_iter);
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1611
diff changeset
   117
	iter(a, start, stop, step, limit, qstart, qend, qwith);
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1611
diff changeset
   118
	return iter;
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1611
diff changeset
   119
end
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1611
diff changeset
   120
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1611
diff changeset
   121
function archive_store:delete(username, query)
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1611
diff changeset
   122
	if not query or next(query) == nil then
2101
4454f124465a mod_storage_memory: Support for empty username stores
Matthew Wild <mwild1@gmail.com>
parents: 1764
diff changeset
   123
		self.store[username or NULL] = nil;
1612
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1611
diff changeset
   124
		return true;
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1611
diff changeset
   125
	end
2101
4454f124465a mod_storage_memory: Support for empty username stores
Matthew Wild <mwild1@gmail.com>
parents: 1764
diff changeset
   126
	local old = self.store[username or NULL];
1612
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1611
diff changeset
   127
	if not old then return true; end
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1611
diff changeset
   128
	local qstart = query.start or -math.huge;
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1611
diff changeset
   129
	local qend = query["end"] or math.huge;
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1611
diff changeset
   130
	local qwith = query.with;
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1611
diff changeset
   131
	local new = {};
2101
4454f124465a mod_storage_memory: Support for empty username stores
Matthew Wild <mwild1@gmail.com>
parents: 1764
diff changeset
   132
	self.store[username or NULL] = new;
1612
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1611
diff changeset
   133
	local t;
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1611
diff changeset
   134
	for i = 1, #old do
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1611
diff changeset
   135
		i = old[i];
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1611
diff changeset
   136
		t = i.when;
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1611
diff changeset
   137
		if not(qstart >= t and qend <= t and (not qwith or i.with == qwith)) then
1757
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: 1612
diff changeset
   138
			self:append(username, i.key, i.value, t, i.with);
1612
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1611
diff changeset
   139
		end
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1611
diff changeset
   140
	end
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1611
diff changeset
   141
	if #new == 0 then
2101
4454f124465a mod_storage_memory: Support for empty username stores
Matthew Wild <mwild1@gmail.com>
parents: 1764
diff changeset
   142
		self.store[username or NULL] = nil;
1612
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1611
diff changeset
   143
	end
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1611
diff changeset
   144
	return true;
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1611
diff changeset
   145
end
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1611
diff changeset
   146
1259
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   147
local stores = {
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   148
	keyval = keyval_store;
1611
8b997d9cf09e mod_storage_memory: Add support for map stores
Kim Alvefur <zash@zash.se>
parents: 1259
diff changeset
   149
	map = map_store;
1612
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1611
diff changeset
   150
	archive = archive_store;
1259
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   151
}
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   152
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   153
local driver = {};
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   154
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   155
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
   156
	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
   157
	if store_mt then
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   158
		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
   159
	end
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   160
	return nil, "unsupported-store";
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   161
end
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
module:provides("storage", driver);