X-Git-Url: https://git.enpas.org/?a=blobdiff_plain;f=plugins%2Fmod_storage_sql2.lua;h=74d08801553bcfabd87e4159a5614cd42d8638e2;hb=30afb0dbed5603b802d90a79b78206326e4fea09;hp=0531c90500cc79b54c381a19b05d672219b5bbae;hpb=e1e1bd2dfa385b1003eb6ccbabda639ecb99114e;p=prosody.git diff --git a/plugins/mod_storage_sql2.lua b/plugins/mod_storage_sql2.lua index 0531c905..74d08801 100644 --- a/plugins/mod_storage_sql2.lua +++ b/plugins/mod_storage_sql2.lua @@ -113,8 +113,6 @@ do -- process options to get a db connection --local dburi = db2uri(params); engine = mod_sql:create_engine(params); - engine:set_encoding(); - if module:get_option("sql_manage_tables", true) then -- Automatically create table, ignore failure (table probably already exists) create_table(); @@ -194,13 +192,18 @@ local function keyval_store_set(data) return true; end +--- Key/value store API (default store type) + local keyval_store = {}; keyval_store.__index = keyval_store; function keyval_store:get(username) - user,store = username,self.store; + user, store = username, self.store; local ok, result = engine:transaction(keyval_store_get); - if not ok then return ok, result; end - return result; + if not ok then + module:log("error", "Unable to read from database %s store for %s: %s", store, username or "", result); + return nil, result; + end + return result; end function keyval_store:set(username, data) user,store = username,self.store; @@ -216,6 +219,8 @@ function keyval_store:users() return iterator(result); end +--- Archive store API + local archive_store = {} archive_store.__index = archive_store function archive_store:append(username, key, when, with, value) @@ -344,6 +349,10 @@ local stores = { archive = archive_store; }; +--- Implement storage driver API + +-- FIXME: Some of these operations need to operate on the archive store(s) too + local driver = {}; function driver:open(store, typ) @@ -355,13 +364,13 @@ function driver:open(store, typ) end function driver:stores(username) - local sql = "SELECT DISTINCT `store` FROM `prosody` WHERE `host`=? AND `user`" .. + local query = "SELECT DISTINCT `store` FROM `prosody` WHERE `host`=? AND `user`" .. (username == true and "!=?" or "=?"); if username == true or not username then username = ""; end local ok, result = engine:transaction(function() - return engine:select(sql, host, username); + return engine:select(query, host, username); end); if not ok then return ok, result end return iterator(result); @@ -370,7 +379,7 @@ end function driver:purge(username) return engine:transaction(function() local stmt,err = engine:delete("DELETE FROM `prosody` WHERE `host`=? AND `user`=?", host, username); - return true,err; + return true, err; end); end