plugins/mod_storage_sql2: Add map store support

remotes/origin/0.11
daurnimator 12 years ago
parent ea09a45278
commit 1b133aa8a0
  1. 35
      plugins/mod_storage_sql2.lua

@ -216,6 +216,40 @@ function keyval_store:users()
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 @@ end
local stores = {
keyval = keyval_store;
map = map_store;
archive = archive_store;
};

Loading…
Cancel
Save