Comparison

plugins/mod_storage_internal.lua @ 11278:c3907f05bed4

mod_storage_internal: Support query for set of IDs Based on implementation in mod_storage_memory
author Kim Alvefur <zash@zash.se>
date Tue, 12 Jan 2021 18:06:55 +0100
parent 11275:b8fada57faf0
child 11765:1cac469b18d0
comparison
equal deleted inserted replaced
11277:1256f32f21b6 11278:c3907f05bed4
4 local datetime = require "util.datetime"; 4 local datetime = require "util.datetime";
5 local st = require "util.stanza"; 5 local st = require "util.stanza";
6 local now = require "util.time".now; 6 local now = require "util.time".now;
7 local id = require "util.id".medium; 7 local id = require "util.id".medium;
8 local jid_join = require "util.jid".join; 8 local jid_join = require "util.jid".join;
9 local set = require "util.set";
9 10
10 local host = module.host; 11 local host = module.host;
11 12
12 local archive_item_limit = module:get_option_number("storage_archive_item_limit", 10000); 13 local archive_item_limit = module:get_option_number("storage_archive_item_limit", 10000);
13 local archive_item_count_cache = cache.new(module:get_option("storage_archive_item_limit_cache_size", 1000)); 14 local archive_item_count_cache = cache.new(module:get_option("storage_archive_item_limit_cache_size", 1000));
51 archive.caps = { 52 archive.caps = {
52 total = true; 53 total = true;
53 quota = archive_item_limit; 54 quota = archive_item_limit;
54 truncate = true; 55 truncate = true;
55 full_id_range = true; 56 full_id_range = true;
57 ids = true;
56 }; 58 };
57 59
58 function archive:append(username, key, value, when, with) 60 function archive:append(username, key, value, when, with)
59 when = when or now(); 61 when = when or now();
60 if not st.is_stanza(value) then 62 if not st.is_stanza(value) then
140 if query then 142 if query then
141 items = array(items); 143 items = array(items);
142 if query.key then 144 if query.key then
143 items:filter(function (item) 145 items:filter(function (item)
144 return item.key == query.key; 146 return item.key == query.key;
147 end);
148 end
149 if query.ids then
150 local ids = set.new(query.ids);
151 items:filter(function (item)
152 return ids:contains(item.key);
145 end); 153 end);
146 end 154 end
147 if query.with then 155 if query.with then
148 items:filter(function (item) 156 items:filter(function (item)
149 return item.with == query.with; 157 return item.with == query.with;