Software /
code /
prosody
Comparison
plugins/mod_storage_sql.lua @ 5043:2856e1cfbe95
Merge with Zash
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Sat, 28 Jul 2012 20:59:03 +0100 |
parent | 5040:685403a6fee1 |
child | 5054:97385c45e670 |
comparison
equal
deleted
inserted
replaced
5031:28d56268a72d | 5043:2856e1cfbe95 |
---|---|
173 elseif t == "json" then | 173 elseif t == "json" then |
174 return json.decode(value); | 174 return json.decode(value); |
175 end | 175 end |
176 end | 176 end |
177 | 177 |
178 local function getsql(sql, ...) | 178 local function dosql(sql, ...) |
179 if params.driver == "PostgreSQL" then | 179 if params.driver == "PostgreSQL" then |
180 sql = sql:gsub("`", "\""); | 180 sql = sql:gsub("`", "\""); |
181 end | 181 end |
182 -- do prepared statement stuff | 182 -- do prepared statement stuff |
183 local stmt, err = connection:prepare(sql); | 183 local stmt, err = connection:prepare(sql); |
184 if not stmt and not test_connection() then error("connection failed"); end | 184 if not stmt and not test_connection() then error("connection failed"); end |
185 if not stmt then module:log("error", "QUERY FAILED: %s %s", err, debug.traceback()); return nil, err; end | 185 if not stmt then module:log("error", "QUERY FAILED: %s %s", err, debug.traceback()); return nil, err; end |
186 -- run query | 186 -- run query |
187 local ok, err = stmt:execute(host or "", user or "", store or "", ...); | 187 local ok, err = stmt:execute(...); |
188 if not ok and not test_connection() then error("connection failed"); end | 188 if not ok and not test_connection() then error("connection failed"); end |
189 if not ok then return nil, err; end | 189 if not ok then return nil, err; end |
190 | 190 |
191 return stmt; | 191 return stmt; |
192 end | |
193 local function getsql(sql, ...) | |
194 return dosql(sql, host or "", user or "", store or "", ...); | |
192 end | 195 end |
193 local function setsql(sql, ...) | 196 local function setsql(sql, ...) |
194 local stmt, err = getsql(sql, ...); | 197 local stmt, err = getsql(sql, ...); |
195 if not stmt then return stmt, err; end | 198 if not stmt then return stmt, err; end |
196 return stmt:affected(); | 199 return stmt:affected(); |
347 return setmetatable({ store = store }, keyval_store); | 350 return setmetatable({ store = store }, keyval_store); |
348 end | 351 end |
349 return nil, "unsupported-store"; | 352 return nil, "unsupported-store"; |
350 end | 353 end |
351 | 354 |
355 function driver:list_stores(username) -- Not to be confused with the list store type | |
356 local sql = (username == true | |
357 and "SELECT DISTINCT `store` FROM `prosody` WHERE `host`=? AND `user`!=?" | |
358 or "SELECT DISTINCT `store` FROM `prosody` WHERE `host`=? AND `user`=?"); | |
359 if username == true or not username then | |
360 username = ""; | |
361 end | |
362 local stmt, err = dosql(sql, host, username); | |
363 if not stmt then | |
364 return nil, err; | |
365 end | |
366 local stores = {}; | |
367 for row in stmt:rows() do | |
368 stores[#stores+1] = row[1]; | |
369 end | |
370 return stores; | |
371 end | |
372 | |
373 function driver:purge(username) | |
374 local stmt, err = dosql("DELETE FROM `prosody` WHERE `host`=? AND `user`=?", host, username); | |
375 if not stmt then return stmt, err; end | |
376 local changed, err = stmt:affected(); | |
377 if not changed then return changed, err; end | |
378 return true, changed; | |
379 end | |
380 | |
352 module:add_item("data-driver", driver); | 381 module:add_item("data-driver", driver); |