mod_storage_sql2: Fix iteration over users and stores
authorKim Alvefur <zash@zash.se>
Wed, 10 Jul 2013 12:08:44 +0200
changeset 5733 aeeced7b0149
parent 5732 4aa1d6f5083a
child 5734 49f1fed6e25e
mod_storage_sql2: Fix iteration over users and stores
plugins/mod_storage_sql2.lua
--- a/plugins/mod_storage_sql2.lua	Wed Jul 10 12:01:23 2013 +0200
+++ b/plugins/mod_storage_sql2.lua	Wed Jul 10 12:08:44 2013 +0200
@@ -2,6 +2,16 @@
 local json = require "util.json";
 local resolve_relative_path = require "core.configmanager".resolve_relative_path;
 
+local unpack = unpack
+local function iterator(result)
+	return function(result)
+		local row = result();
+		if row ~= nil then
+			return unpack(row);
+		end
+	end, result, nil;
+end
+
 local mod_sql = module:require("sql");
 local params = module:get_option("sql");
 
@@ -200,9 +210,11 @@
 	end);
 end
 function keyval_store:users()
-	return engine:transaction(function()
+	local ok, result = engine:transaction(function()
 		return engine:select("SELECT DISTINCT `user` FROM `prosody` WHERE `host`=? AND `store`=?", host, self.store);
 	end);
+	if not ok then return ok, result end
+	return iterator(result);
 end
 
 local driver = {};
@@ -220,9 +232,11 @@
 	if username == true or not username then
 		username = "";
 	end
-	return engine:transaction(function()
+	local ok, result = engine:transaction(function()
 		return engine:select(sql, host, username);
 	end);
+	if not ok then return ok, result end
+	return iterator(result);
 end
 
 function driver:purge(username)