# HG changeset patch # User Kim Alvefur # Date 1373450924 -7200 # Node ID aeeced7b0149c83a158e0142c09a798d62629806 # Parent 4aa1d6f5083aa0cb32e2ddbf68175f69649150c0 mod_storage_sql2: Fix iteration over users and stores diff -r 4aa1d6f5083a -r aeeced7b0149 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)