Comparison

plugins/mod_storage_internal.lua @ 8310:1759491b53db

mod_storage_internal: Add more extensive query support to archive:delete method
author Kim Alvefur <zash@zash.se>
date Mon, 09 Oct 2017 01:02:17 +0200
parent 8309:5281c479955a
child 8393:b6a7b83f8d87
comparison
equal deleted inserted replaced
8309:5281c479955a 8310:1759491b53db
158 158
159 function archive:delete(username, query) 159 function archive:delete(username, query)
160 if not query or next(query) == nil then 160 if not query or next(query) == nil then
161 return datamanager.list_store(username, host, self.store, nil); 161 return datamanager.list_store(username, host, self.store, nil);
162 end 162 end
163 for k in pairs(query) do
164 if k ~= "end" then return nil, "unsupported-query-field"; end
165 end
166 local items, err = datamanager.list_load(username, host, self.store); 163 local items, err = datamanager.list_load(username, host, self.store);
167 if not items then 164 if not items then
168 if err then 165 if err then
169 return items, err; 166 return items, err;
170 end 167 end
171 -- Store is empty 168 -- Store is empty
172 return 0; 169 return 0;
173 end 170 end
174 items = array(items); 171 items = array(items);
175 local count_before = #items; 172 local count_before = #items;
176 items:filter(function (item) 173 if query then
177 return item.when > query["end"]; 174 if query.key then
178 end); 175 items:filter(function (item)
176 return item.key ~= query.key;
177 end);
178 end
179 if query.with then
180 items:filter(function (item)
181 return item.with ~= query.with;
182 end);
183 end
184 if query.start then
185 items:filter(function (item)
186 return item.when < query.start;
187 end);
188 end
189 if query["end"] then
190 items:filter(function (item)
191 return item.when > query["end"];
192 end);
193 end
194 end
179 local count = count_before - #items; 195 local count = count_before - #items;
180 local ok, err = datamanager.list_store(username, host, self.store, items); 196 local ok, err = datamanager.list_store(username, host, self.store, items);
181 if not ok then return ok, err; end 197 if not ok then return ok, err; end
182 return count; 198 return count;
183 end 199 end