diff options
author | Kim Alvefur <zash@zash.se> | 2014-08-12 11:38:12 +0200 |
---|---|---|
committer | Kim Alvefur <zash@zash.se> | 2014-08-12 11:38:12 +0200 |
commit | 7eb2ec7a56e3ffca8ddbe06ece12ba20c4125fac (patch) | |
tree | ee52962585d57beff3e82c06fcf71107f4d7757d | |
parent | b699ac03fbf586261ecc605007993c563e15050b (diff) | |
download | prosody-7eb2ec7a56e3ffca8ddbe06ece12ba20c4125fac.tar.gz prosody-7eb2ec7a56e3ffca8ddbe06ece12ba20c4125fac.zip |
mod_storage_sql2: DELETE then INSERT in map stores
-rw-r--r-- | plugins/mod_storage_sql2.lua | 21 |
1 files changed, 8 insertions, 13 deletions
diff --git a/plugins/mod_storage_sql2.lua b/plugins/mod_storage_sql2.lua index c0e2e6cd..e5357416 100644 --- a/plugins/mod_storage_sql2.lua +++ b/plugins/mod_storage_sql2.lua @@ -221,13 +221,8 @@ map_store.__index = map_store; function map_store:get(username, key) local ok, result = 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; + 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"); @@ -238,13 +233,13 @@ function map_store:get(username, key) end function map_store:set(username, key, data) local ok, result = engine:transaction(function() - if data == nil then + if type(key) == "string" and key ~= "" 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); + 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 |