X-Git-Url: https://git.enpas.org/?a=blobdiff_plain;f=plugins%2Fmod_storage_sql.lua;h=eed3fec900784518a8860b1d5ed79199a85e397b;hb=99b003b1917a8ab0b561f7fb98d28d1fad8f8dc8;hp=e05a475d118c9acf6363447ba736fa6352de9d25;hpb=8d8f658967504064cdcc74936ae4f61ada8ba857;p=prosody.git diff --git a/plugins/mod_storage_sql.lua b/plugins/mod_storage_sql.lua index e05a475d..eed3fec9 100644 --- a/plugins/mod_storage_sql.lua +++ b/plugins/mod_storage_sql.lua @@ -228,7 +228,8 @@ local function rollback(...) return ...; end local function commit(...) - if not connection:commit() then return nil, "SQL commit failed"; end + local success,err = connection:commit(); + if not success then return nil, "SQL commit failed: "..tostring(err); end return ...; end @@ -298,6 +299,17 @@ function keyval_store:set(username, data) end if success then return ret, err; else return rollback(nil, ret); end end +function keyval_store:users() + local stmt, err = dosql("SELECT DISTINCT `user` FROM `prosody` WHERE `host`=? AND `store`=?", host, self.store); + if not stmt then + return rollback(nil, err); + end + local next = stmt:rows(); + return commit(function() + local row = next(); + return row and row[1]; + end); +end local function map_store_get(key) local stmt, err = getsql("SELECT * FROM `prosody` WHERE `host`=? AND `user`=? AND `store`=? AND `key`=?", key or ""); @@ -365,7 +377,7 @@ function list_store:scan(username, from, to, jid, typ) return nil, "not-implemented" end -local driver = { name = "sql" }; +local driver = {}; function driver:open(store, typ) if not typ then -- default key-value store @@ -399,4 +411,4 @@ function driver:purge(username) return commit(true, changed); end -module:add_item("data-driver", driver); +module:provides("storage", driver);