Software / code / prosody
Comparison
plugins/mod_storage_sql2.lua @ 6349:0cee68dd35f8
mod_storage_sql2: DELETE then INSERT in map stores
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Tue, 12 Aug 2014 11:38:12 +0200 |
| parent | 6335:eaf6e7986934 |
| child | 6534:b89406fa076c |
comparison
equal
deleted
inserted
replaced
| 6348:bffc885dc378 | 6349:0cee68dd35f8 |
|---|---|
| 219 local map_store = {}; | 219 local map_store = {}; |
| 220 map_store.__index = map_store; | 220 map_store.__index = map_store; |
| 221 function map_store:get(username, key) | 221 function map_store:get(username, key) |
| 222 local ok, result = engine:transaction(function() | 222 local ok, result = engine:transaction(function() |
| 223 if type(key) == "string" and key ~= "" then | 223 if type(key) == "string" and key ~= "" then |
| 224 local iter, state, first = engine:select("SELECT * FROM `prosody` WHERE `host`=? AND `user`=? AND `store`=? AND `key`=?", | 224 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 |
| 225 host, username, self.store, key or ""); | 225 return deserialize(row[1], row[2]); |
| 226 local row = iter(state, first); | |
| 227 if row then | |
| 228 return deserialize(row.type, row.value); | |
| 229 else | |
| 230 return nil; | |
| 231 end | 226 end |
| 232 else | 227 else |
| 233 error("TODO: non-string keys"); | 228 error("TODO: non-string keys"); |
| 234 end | 229 end |
| 235 end); | 230 end); |
| 236 if not ok then return nil, result; end | 231 if not ok then return nil, result; end |
| 237 return result; | 232 return result; |
| 238 end | 233 end |
| 239 function map_store:set(username, key, data) | 234 function map_store:set(username, key, data) |
| 240 local ok, result = engine:transaction(function() | 235 local ok, result = engine:transaction(function() |
| 241 if data == nil then | 236 if type(key) == "string" and key ~= "" then |
| 242 engine:delete("DELETE FROM `prosody` WHERE `host`=? AND `user`=? AND `store`=? AND `key`=?", | 237 engine:delete("DELETE FROM `prosody` WHERE `host`=? AND `user`=? AND `store`=? AND `key`=?", |
| 243 host, username, self.store, key or ""); | 238 host, username or "", self.store, key); |
| 244 elseif type(key) == "string" and key ~= "" then | 239 if data ~= nil then |
| 245 local t, value = assert(serialize(data)); | 240 local t, value = assert(serialize(data)); |
| 246 engine:update("UPDATE `prosody` SET `type`=?, `value`=? WHERE `host`=? AND `user`=? AND `store`=? AND `key`=?", | 241 engine:insert("INSERT INTO `prosody` (`host`,`user`,`store`,`key`,`type`,`value`) VALUES (?,?,?,?,?,?)", host, username or "", self.store, key, t, value); |
| 247 t, value, host, username, self.store, key); | 242 end |
| 248 else | 243 else |
| 249 error("TODO: non-string keys"); | 244 error("TODO: non-string keys"); |
| 250 end | 245 end |
| 251 return true; | 246 return true; |
| 252 end); | 247 end); |