Software /
code /
prosody
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 |