Changeset

6331:fc5113a4540e

plugins/mod_storage_sql2: Add map store support
author daurnimator <quae@daurnimator.com>
date Thu, 07 Aug 2014 12:16:16 -0400
parents 6330:a678d15e590e
children 6332:490acb4941ca
files plugins/mod_storage_sql2.lua
diffstat 1 files changed, 35 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/plugins/mod_storage_sql2.lua	Thu Aug 07 12:15:15 2014 -0400
+++ b/plugins/mod_storage_sql2.lua	Thu Aug 07 12:16:16 2014 -0400
@@ -216,6 +216,40 @@
 	return iterator(result);
 end
 
+local map_store = {};
+map_store.__index = map_store;
+function map_store:get(username, key)
+	return engine:transaction(function()
+		if type(key) == "string" and key ~= "" then
+			local iter, state, first = engine:select("SELECT * FROM `prosody` WHERE `host`=? AND `user`=? AND `store`=? AND `key`=?",
+				host, username, self.store, key or "");
+			local row = iter(state, first);
+			if row then
+				return deserialize(row.type, row.value);
+			else
+				return nil;
+			end
+		else
+			error("TODO: non-string keys");
+		end
+	end);
+end
+function map_store:set(username, key, data)
+	return engine:transaction(function()
+		if data == nil then
+			engine:delete("DELETE FROM `prosody` WHERE `host`=? AND `user`=? AND `store`=? AND `key`=?",
+				host, username, self.store, key or "");
+		elseif type(key) == "string" and key ~= "" then
+			local t, value = assert(serialize(data));
+			engine:update("UPDATE `prosody` SET `type`=?, `value`=? WHERE `host`=? AND `user`=? AND `store`=? AND `key`=?",
+				t, value, host, username, self.store, key);
+		else
+			error("TODO: non-string keys");
+		end
+		return true;
+	end);
+end
+
 local archive_store = {}
 archive_store.__index = archive_store
 function archive_store:append(username, key, when, with, value)
@@ -341,6 +375,7 @@
 
 local stores = {
 	keyval = keyval_store;
+	map = map_store;
 	archive = archive_store;
 };