diff options
author | Kim Alvefur <zash@zash.se> | 2016-03-13 17:43:33 +0100 |
---|---|---|
committer | Kim Alvefur <zash@zash.se> | 2016-03-13 17:43:33 +0100 |
commit | 3fde897b559ed27596eb31d3b1fd5a46274b0217 (patch) | |
tree | 4cca54fc25a178fefc71061229e42d7aef9f69a1 /plugins/mod_storage_sql.lua | |
parent | a91ca337f30110790b25f2a0dafa18ea80739b94 (diff) | |
download | prosody-3fde897b559ed27596eb31d3b1fd5a46274b0217.tar.gz prosody-3fde897b559ed27596eb31d3b1fd5a46274b0217.zip |
mod_storage_sql: Allow loops over results to end on their own
Diffstat (limited to 'plugins/mod_storage_sql.lua')
-rw-r--r-- | plugins/mod_storage_sql.lua | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/plugins/mod_storage_sql.lua b/plugins/mod_storage_sql.lua index a289310b..70f1ab83 100644 --- a/plugins/mod_storage_sql.lua +++ b/plugins/mod_storage_sql.lua @@ -133,15 +133,17 @@ map_store.__index = map_store; map_store.remove = {}; function map_store:get(username, key) local ok, result = engine:transaction(function() + local data; if type(key) == "string" and key ~= "" then for row in engine:select("SELECT `type`, `value` FROM `prosody` WHERE `host`=? AND `user`=? AND `store`=? AND `key`=? LIMIT 1", host, username or "", self.store, key) do - return deserialize(row[1], row[2]); + data = deserialize(row[1], row[2]); end + return data; else for row in engine:select("SELECT `type`, `value` FROM `prosody` WHERE `host`=? AND `user`=? AND `store`=? AND `key`=? LIMIT 1", host, username or "", self.store, "") do - local data = deserialize(row[1], row[2]); - return data and data[key] or nil; + data = deserialize(row[1], row[2]); end + return data and data[key] or nil; end end); if not ok then return nil, result; end @@ -165,7 +167,6 @@ function map_store:set_keys(username, keydatas) local extradata = {}; for row in engine:select("SELECT `type`, `value` FROM `prosody` WHERE `host`=? AND `user`=? AND `store`=? AND `key`=? LIMIT 1", host, username or "", self.store, "") do extradata = deserialize(row[1], row[2]); - break; end engine:delete("DELETE FROM `prosody` WHERE `host`=? AND `user`=? AND `store`=? AND `key`=?", host, username or "", self.store, ""); @@ -260,8 +261,9 @@ function archive_store:find(username, query) if query.total then local stats = engine:select("SELECT COUNT(*) FROM `prosodyarchive` WHERE " .. t_concat(where, " AND "), unpack(args)); if stats then - local _total = stats() - total = _total and _total[1]; + for row in stats do + total = row[1]; + end end if query.limit == 0 then -- Skip the real query return noop, total; |