From b6d0efc79bd2604b84cde2605261d73399246cb7 Mon Sep 17 00:00:00 2001 From: Matthew Wild Date: Thu, 3 Dec 2015 15:02:50 +0000 Subject: mod_storage_sql: Whitespace fix (backported from trunk) --- plugins/mod_storage_sql.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'plugins') diff --git a/plugins/mod_storage_sql.lua b/plugins/mod_storage_sql.lua index 7695e15d..172e569e 100644 --- a/plugins/mod_storage_sql.lua +++ b/plugins/mod_storage_sql.lua @@ -107,7 +107,7 @@ function keyval_store:get(username) module:log("error", "Unable to read from database %s store for %s: %s", store, username or "", result); return nil, result; end - return result; + return result; end function keyval_store:set(username, data) user,store = username,self.store; -- cgit v1.2.3 From 5c6a61d2e7cd76bc7d7b050839eb5da61feda661 Mon Sep 17 00:00:00 2001 From: Matthew Wild Date: Thu, 3 Dec 2015 15:03:24 +0000 Subject: mod_storage_sql: Add map store (backported from trunk) --- plugins/mod_storage_sql.lua | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) (limited to 'plugins') diff --git a/plugins/mod_storage_sql.lua b/plugins/mod_storage_sql.lua index 172e569e..adf9f9b6 100644 --- a/plugins/mod_storage_sql.lua +++ b/plugins/mod_storage_sql.lua @@ -125,6 +125,39 @@ end --- Archive store API +local map_store = {}; +map_store.__index = map_store; +function map_store:get(username, key) + local ok, result = engine:transaction(function() + if type(key) == "string" and key ~= "" then + for row in engine:select("SELECT `type`, `value` FROM `prosody` WHERE `host`=? AND `user`=? AND `store`=? AND `key`=?", host, username or "", self.store, key) do + return deserialize(row[1], row[2]); + end + else + error("TODO: non-string keys"); + end + end); + if not ok then return nil, result; end + return result; +end +function map_store:set(username, key, data) + local ok, result = engine:transaction(function() + if type(key) == "string" and key ~= "" then + engine:delete("DELETE FROM `prosody` WHERE `host`=? AND `user`=? AND `store`=? AND `key`=?", + host, username or "", self.store, key); + if data ~= nil then + local t, value = assert(serialize(data)); + engine:insert("INSERT INTO `prosody` (`host`,`user`,`store`,`key`,`type`,`value`) VALUES (?,?,?,?,?,?)", host, username or "", self.store, key, t, value); + end + else + error("TODO: non-string keys"); + end + return true; + end); + if not ok then return nil, result; end + return result; +end + local archive_store = {} archive_store.caps = { total = true; @@ -253,6 +286,7 @@ end local stores = { keyval = keyval_store; + map = map_store; archive = archive_store; }; -- cgit v1.2.3