From f7f8f20929972134c129aea7c53ec45eb60e0454 Mon Sep 17 00:00:00 2001
From: Kim Alvefur <zash@zash.se>
Date: Mon, 17 Sep 2012 05:42:10 +0200
Subject: storagemanager, datamanager, mod_storage_{internal,sql}: Replace
 list_stores() with an iterator version

---
 plugins/mod_storage_internal.lua |  4 ++--
 plugins/mod_storage_sql.lua      | 17 ++++++++---------
 2 files changed, 10 insertions(+), 11 deletions(-)

(limited to 'plugins')

diff --git a/plugins/mod_storage_internal.lua b/plugins/mod_storage_internal.lua
index 92ac3ef5..d8fdfc6f 100644
--- a/plugins/mod_storage_internal.lua
+++ b/plugins/mod_storage_internal.lua
@@ -16,8 +16,8 @@ function driver:set(user, data)
 	return datamanager.store(user, host, self.store, data);
 end
 
-function driver:list_stores(username)
-	return datamanager.list_stores(username, host);
+function driver:stores(username)
+	return datamanager.stores(username, host);
 end
 
 function driver:purge(user)
diff --git a/plugins/mod_storage_sql.lua b/plugins/mod_storage_sql.lua
index ea25c90b..5a08598a 100644
--- a/plugins/mod_storage_sql.lua
+++ b/plugins/mod_storage_sql.lua
@@ -374,10 +374,9 @@ function driver:open(store, typ)
 	return nil, "unsupported-store";
 end
 
-function driver:list_stores(username) -- Not to be confused with the list store type
-	local sql = (username == true
-		and "SELECT DISTINCT `store` FROM `prosody` WHERE `host`=? AND `user`!=?"
-		or  "SELECT DISTINCT `store` FROM `prosody` WHERE `host`=? AND `user`=?");
+function driver:stores(username) -- Not to be confused with the list store type
+	local sql = "SELECT DISTINCT `store` FROM `prosody` WHERE `host`=? AND `user`" ..
+		(username == true and "!=?" or "=?");
 	if username == true or not username then
 		username = "";
 	end
@@ -385,11 +384,11 @@ function driver:list_stores(username) -- Not to be confused with the list store
 	if not stmt then
 		return rollback(nil, err);
 	end
-	local stores = {};
-	for row in stmt:rows() do
-		stores[#stores+1] = row[1];
-	end
-	return commit(stores);
+	local next = stmt:rows();
+	return commit(function()
+		local row = next();
+		return row and row[1];
+	end);
 end
 
 function driver:purge(username)
-- 
cgit v1.2.3