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 "<host>", result);
+ return nil, result;
+ end
+ return result;
end
function keyval_store:set(username, data)
user,store = username,self.store;
return iterator(result);
end
+--- Archive store API
+
local archive_store = {}
archive_store.__index = archive_store
function archive_store:append(username, key, when, with, value)
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)
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);
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