From 5091ef0c46c059b3cfe5bd8c2cb07547d2ea0d50 Mon Sep 17 00:00:00 2001 From: Kim Alvefur Date: Mon, 9 Oct 2017 01:02:17 +0200 Subject: mod_storage_internal: Add more extensive query support to archive:delete method --- plugins/mod_storage_internal.lua | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) (limited to 'plugins/mod_storage_internal.lua') diff --git a/plugins/mod_storage_internal.lua b/plugins/mod_storage_internal.lua index 9f44866a..c29319fc 100644 --- a/plugins/mod_storage_internal.lua +++ b/plugins/mod_storage_internal.lua @@ -160,9 +160,6 @@ function archive:delete(username, query) if not query or next(query) == nil then return datamanager.list_store(username, host, self.store, nil); end - for k in pairs(query) do - if k ~= "end" then return nil, "unsupported-query-field"; end - end local items, err = datamanager.list_load(username, host, self.store); if not items then if err then @@ -173,9 +170,28 @@ function archive:delete(username, query) end items = array(items); local count_before = #items; - items:filter(function (item) - return item.when > query["end"]; - end); + if query then + if query.key then + items:filter(function (item) + return item.key ~= query.key; + end); + end + if query.with then + items:filter(function (item) + return item.with ~= query.with; + end); + end + if query.start then + items:filter(function (item) + return item.when < query.start; + end); + end + if query["end"] then + items:filter(function (item) + return item.when > query["end"]; + end); + end + end local count = count_before - #items; local ok, err = datamanager.list_store(username, host, self.store, items); if not ok then return ok, err; end -- cgit v1.2.3