From 9df91659b930ab36d9761b049d18ed30f4b93352 Mon Sep 17 00:00:00 2001 From: Kim Alvefur Date: Sun, 13 Mar 2016 17:42:22 +0100 Subject: mod_storage_sql: Add LIMIT clause to queries where only a single row is expected --- plugins/mod_storage_sql.lua | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'plugins') diff --git a/plugins/mod_storage_sql.lua b/plugins/mod_storage_sql.lua index bf3c1c7b..a289310b 100644 --- a/plugins/mod_storage_sql.lua +++ b/plugins/mod_storage_sql.lua @@ -134,11 +134,11 @@ map_store.remove = {}; function map_store:get(username, key) local ok, result = engine:transaction(function() 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`=?", host, username or "", self.store, key) do + 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]); end else - for row in engine:select("SELECT `type`, `value` FROM `prosody` WHERE `host`=? AND `user`=? AND `store`=? AND `key`=?", host, username or "", self.store, "") do + 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; end @@ -163,7 +163,7 @@ function map_store:set_keys(username, keydatas) end else local extradata = {}; - for row in engine:select("SELECT `type`, `value` FROM `prosody` WHERE `host`=? AND `user`=? AND `store`=? AND `key`=?", host, username or "", self.store, "") do + 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 -- cgit v1.2.3 From 144597d16ba3c2dde9196d39cce0c68c67801806 Mon Sep 17 00:00:00 2001 From: Kim Alvefur Date: Sun, 13 Mar 2016 17:43:33 +0100 Subject: mod_storage_sql: Allow loops over results to end on their own --- plugins/mod_storage_sql.lua | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) (limited to 'plugins') 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; -- cgit v1.2.3 From d1578059cb3152347cddb265cf4b224741dc3997 Mon Sep 17 00:00:00 2001 From: Kim Alvefur Date: Mon, 14 Mar 2016 13:27:02 +0100 Subject: mod_s2s: Include name of remote server when it's missing the stream ID (thanks Ge0rG) --- plugins/mod_s2s/mod_s2s.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'plugins') diff --git a/plugins/mod_s2s/mod_s2s.lua b/plugins/mod_s2s/mod_s2s.lua index 3e80c77b..16320ad1 100644 --- a/plugins/mod_s2s/mod_s2s.lua +++ b/plugins/mod_s2s/mod_s2s.lua @@ -363,7 +363,7 @@ function stream_callbacks.streamopened(session, attr) elseif session.direction == "outgoing" then session.notopen = nil; if not attr.id then - log("error", "Stream response did not give us a stream id!"); + log("error", "Stream response from %s did not give us a stream id!", session.to_host); session:close({ condition = "undefined-condition", text = "Missing stream ID" }); return; end -- cgit v1.2.3