Software / code / prosody
Comparison
plugins/mod_storage_sql.lua @ 7149:bb0fd02ae70f
mod_storage_sql: Support non-string keys in map store
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Mon, 08 Feb 2016 20:23:12 +0100 |
| parent | 7008:9beba2572e2b |
| child | 7153:89fa66d4e502 |
comparison
equal
deleted
inserted
replaced
| 7145:b1a109858502 | 7149:bb0fd02ae70f |
|---|---|
| 132 if type(key) == "string" and key ~= "" then | 132 if type(key) == "string" and key ~= "" then |
| 133 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 | 133 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 |
| 134 return deserialize(row[1], row[2]); | 134 return deserialize(row[1], row[2]); |
| 135 end | 135 end |
| 136 else | 136 else |
| 137 error("TODO: non-string keys"); | 137 for row in engine:select("SELECT `type`, `value` FROM `prosody` WHERE `host`=? AND `user`=? AND `store`=? AND `key`=?", host, username or "", self.store, "") do |
| 138 local data = deserialize(row[1], row[2]); | |
| 139 return data and data[key] or nil; | |
| 140 end | |
| 138 end | 141 end |
| 139 end); | 142 end); |
| 140 if not ok then return nil, result; end | 143 if not ok then return nil, result; end |
| 141 return result; | 144 return result; |
| 142 end | 145 end |
| 148 if data ~= nil then | 151 if data ~= nil then |
| 149 local t, value = assert(serialize(data)); | 152 local t, value = assert(serialize(data)); |
| 150 engine:insert("INSERT INTO `prosody` (`host`,`user`,`store`,`key`,`type`,`value`) VALUES (?,?,?,?,?,?)", host, username or "", self.store, key, t, value); | 153 engine:insert("INSERT INTO `prosody` (`host`,`user`,`store`,`key`,`type`,`value`) VALUES (?,?,?,?,?,?)", host, username or "", self.store, key, t, value); |
| 151 end | 154 end |
| 152 else | 155 else |
| 153 error("TODO: non-string keys"); | 156 local extradata = {}; |
| 157 for row in engine:select("SELECT `type`, `value` FROM `prosody` WHERE `host`=? AND `user`=? AND `store`=? AND `key`=?", host, username or "", self.store, "") do | |
| 158 extradata = deserialize(row[1], row[2]); | |
| 159 break; | |
| 160 end | |
| 161 engine:delete("DELETE FROM `prosody` WHERE `host`=? AND `user`=? AND `store`=? AND `key`=?", | |
| 162 host, username or "", self.store, ""); | |
| 163 extradata[key] = data; | |
| 164 local t, value = assert(serialize(extradata)); | |
| 165 engine:insert("INSERT INTO `prosody` (`host`,`user`,`store`,`key`,`type`,`value`) VALUES (?,?,?,?,?,?)", host, username or "", self.store, "", t, value); | |
| 154 end | 166 end |
| 155 return true; | 167 return true; |
| 156 end); | 168 end); |
| 157 if not ok then return nil, result; end | 169 if not ok then return nil, result; end |
| 158 return result; | 170 return result; |