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 |